Guide: passo per passo
Condividi:
PREMESSA: se non conoscete il significato di qualche parola consultate il nostro Glossario.
3. Esempio di feed RSS con PHP
Nome del file: output_rss.php
Il feed RSS creato sarà:
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;
}
}
}
?>
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();
$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>
<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>
Indice 1. L’RSS questo sconosciuto 2. Curiosiamo dentro un RSS 3. Esempio di feed RSS con PHP 4. Esempio di feed RSS con ASP 5. Link correlati |
Guide correlate a "": |