Guide: passo per passo

Condividi:        

Generale
PREMESSA: se non conoscete il significato di qualche parola consultate il nostro Glossario.
3. Esempio di feed RSS con PHP

Abbiamo detto che si possono creare feed RSS a partire da una pagina HTML (scraping) vediamo come.
Per prima cosa è utile creare una classe per creare un feed RSS inserendo i parametri obbligatori o più utilizzati. Questa è una delle tante disponibili sul web e mi è sembrata la migliore ognuno lo adatterà alle sue esigenze. Verrà salvata come rss.php e la ritroveremo nell’include del prossimo file che chiameremo output_rss.php.

Nome del file: rss.php

 <?php
class MakeRSS{
  var $Articles = array();

  // Channel info
  var $title = '';
  var $link = '';
  var $description = '';
  var $optional = array();
  var $image = array('url' => '', 'title' => '', 'link' => '', 'description' => '', 'w' => 0, 'h' => 0);

  function MakeRSS($title, $link, $description, $optional = ''){
    $this->title = $title;
    $this->link = $link;
    $this->description = $description;

    if( is_array($optional) and count($optional) ){
      $this->optional = $optional;
    }
  }
 
  function AddOptional($key, $value){
    $this->optional[$key] = $value;
  }

  function AddImage($title, $url, $link, $description = ''){
    $this->image['title'] = $title;
    $this->image['url'] = $url;
    $this->image['link'] = $link;
    $this->image['description'] = $description;

    if( $tmp = @getimagesize($url) ){
      $this->image['w'] = ($tmp[0] > 144) ? 144 : $tmp[0];
      $this->image['h'] = ($tmp[1] > 400) ? 400 : $tmp[1];
    }
  }
 
  function AddArticle($title, $link, $description, $author, $optional = ''){
    $i = array_push($this->Articles, array('title' => $title, 'link' => $link, 'description' => $description, 'author' => $author));

    if( is_array($optional) and count($optional) ){
      --$i;
      while( list($k, $v) = each($optional) ){
         $this->Articles[$i][$k] = $v;
      }
    }
  }

  function Output($save = false, $path = ''){
    $out = '<?xml version="1.0"?>' . "\n" .
       '<rss version="2.0">' . "\n" .
       '<channel>' . "\n";
       
    $out .= "<title>$this->title</title>\n" .
        "<link>$this->link</link>\n" .
        "<description>$this->description</description>\n";
   
    //Channel optionals
    if( is_array($this->optional) and count($this->optional) ){
      while( list($k, $v) = each($this->optional) ){
        $out .= "<$k>$v</$k>\n";
      }
    }
   
//Image
  if( $this->image['title'] and $this->image['url'] and $this->image['link'] ){
   $out .= "<image>\n" .
     "<title>" . $this->image['title'] . "</title>\n" .
     "<url>" . $this->image['url'] . "</url>\n" .
     "<link>" . $this->image['link'] . "</link>\n";

   if( $this->image['description'] ){
    $out .= "<description>" . $this->image['description'] . "</description>\n";
   }

   if( $this->image['w'] and $this->image['h'] ){
    $out .= "<width>" . $this->image['w'] . "</width>\n" .
      "<height>" . $this->image['h'] . "</height>\n";
   }
   $out .= "</image>\n";
  }

    //Articles
    for( $i = 0, $c = count($this->Articles); $i < $c; $i++ ){
       $out .= "<item>\n" .
           "<title>" . $this->Articles[$i]['title'] . "</title>\n" .
           "<link>" . $this->Articles[$i]['link'] . "</link>\n" .
           "<description>" . $this->Articles[$i]['description'] . "</description>\n" .
           "<author>" . $this->Articles[$i]['author'] . "</author>\n";

       if( count($this->Articles[$i]) > 4 ){
         while( list($k, $v) = each($optional) ){
           if( !in_array($k, array('title', 'link', 'description', 'author')) ){
             $out .= "<$k>$v</$k>\n";
           }
         }
       }


       $out .= "</item>\n";
    }

    $out .= "</channel>\n</rss>";


    // True output
    if( !$save or !$path ){
      header("Content-type: application/xml");
      echo $out;
      return true;
    }
    else{
      $fh = fopen($path, 'w');
      if( $fh ){
        fwrite($fh, $out);
        fclose($fh);       
       
        return true;
      }
      return false;
    }
  }
}
?>


Nome del file: output_rss.php

include('/rss.php'); $r = new MakeRSS('Feed RSS in php, 'http://www.pc-facile.com/guide', 'GUIDE’);
$r->AddArticle('Guide', 'http://www.pc-facile.com/guide/guide.php?id=1', 'guida all’installazione di reti miste', 'Klizya');
$r->Output();


Il feed RSS creato sarà:
<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>Feed RSS in php</title>
<link>http:// www.pc-facile.com/guide </link>
<description> GUIDE </description>
<item>
<title>Guide</title>
<link>http:// http://www.pc-facile.com/guide/guide.php?id=1</link>
<description>guida all’installazione di reti miste</description>
<author>klizya</author>
</item>
< </channel>
</rss>


Generale: Dylan666 [144 visite dal 05 Settembre 05 @ 23:01 pm]