RSS Feed

Momo

B1G-Software-Kunde
#1
Mahlzeit!
Hat jemand eine Ahnung, wie man einen RSS Feed baut? Was ist der Unterschied zwischen einem RSS und CVS? Wie ihr merkt:

Ich habe keine Ahnung

Gerne hätte ich einen, der zum Beispiel die Schlagzeilen von der Spiegelseite ausliest.
 

CPB2

B1G-Software-Kunde
#2
Hallo Momo,

Du benötigst dazu einen rss-parser, damit sich das ganze ins Layout (HTML) integrieren lässt. Einen guten (einfachen) Parser findest Du HIER

Im Downloadfile ist auch ein Beispiel enthalten.

Bissl "googeln" hilft vielleicht auch :)
 

Momo

B1G-Software-Kunde
#3
Jo, ich hatte schon gestern noch einen gefunden, aber leider wird nichts auf der seite angezeigt. Danke erstmal für den Tipp, mehr gerne!
 

patrick

Staff member
B1G-Software-Kunde
#4
Ich hab auch mal einen einfachen RSS Parser geschrieben

PHP:
<?php
class RDFParser {
   var $_item;
   var $_url;

   function RDFParser($url) {
       $this->_url = $url;
   }

   function ParseRDF() {
       $this->_item = array('i' => 0);

       $parser = xml_parser_create();
       xml_set_object($parser, &$this);
       xml_set_element_handler($parser, "_startElement", "_endElement");
       xml_set_character_data_handler($parser, "_charHandler");

       $fp = fopen($this->_url, "r");
       while(!feof($fp)) {
           $line = fgets($fp, 4096);
           xml_parse($parser, $line);
       }
       fclose($fp);

       xml_parser_free($parser);

       return($this->_item['items']);
   }

   function _startElement($parser, $name, $attrs)  {
       $this->_item['maychar'] = true;

       if($name=="ITEM") {
           $this->_item['mayparse'] = true;
           $this->_item['i']++;
       } elseif($name=="TITLE") {
           $this->_item['akt'] = "TITLE";
       } elseif($name=="LINK") {
           $this->_item['akt'] = "LINK";
       } elseif($name=="DESCRIPTION") {
           $this->_item['akt'] = "DESCRIPTION";
       } else {
           $this->_item['maychar'] = false;
       }
   }

   function _endElement($parser, $name) {
       if($name=="ITEM") {
           $this->_item['mayparse'] = false;
       } elseif($name=="TITLE" || $name=="LINK" || $name="DESCRIPTION") {
           $this->_item['maychar'] = false;
       }
   }

   function _charHandler($parser, $data) {
       if($this->_item['maychar'] && $this->_item['mayparse']) {
           if($this->_item['akt']=="TITLE") {
               $this->_item['items'][$this->_item['i']]['title'] = $data;
           }
           if($this->_item['akt']=="LINK") {
               $this->_item['items'][$this->_item['i']]['link'] = $data;
           }
           if($this->_item['akt']=="DESCRIPTION") {
               $this->_item['items'][$this->_item['i']]['description'] = $data;
           }
       }
   }
}
?>
 

Momo

B1G-Software-Kunde
#5
Dann nehm ich doch lieber altbewährtes, deins. WO kann ihc denn die URL des rss dingens reinschrieben ? Bei URL?
 

patrick

Staff member
B1G-Software-Kunde
#6
Das ist ne einfache Klasse. Beispiel:

PHP:
<?php
$rdf = new RDFParser("http://b1gmail.de/p4-bin/rdf/1/");
$data = $rdf->ParseRDF();
print_r($data);
?>
Kannst dann natürlich z.B. mit foreach durch $data walken und die Daten schön aufbereiten wie du sie brauchst.
 

Momo

B1G-Software-Kunde
#7
Mh, ich versteh das nicht so ganz, liegt wahrscheinlich daran, das ich mit Variablen nicht so viel am Hut habe. Ich könnte dir was von unabhägigen und abhängigen Variablen in der empirischen Sozialforschung erzählen, aber damit komme ich hier nicht weiter.

Diese beiden Codes, die Du hier veröffentlicht hast, sind dazu da, damit man einen beliebigen feed auf der Seite anzeigen kann.

Ich kopiere also den ersten Code in eine Datei, und den zweiten in die seite in der es angezeigt werden soll?
Oh Mann, ich glaube ich werde ausgelacht.
 

patrick

Staff member
B1G-Software-Kunde
#8
Die Klasse parst den XML-Code nur in ein PHP-Array, formatieren in HTML musst du die Ausgabe selbst.
 

helga

B1G-Software-Kunde
#9
hier ein einfaches Script dazu:

PHP:
<?php
$url = "http://www.spiegel.de/schlagzeilen/rss/0,5291,20,00.xml";
$data = implode("", file($url));
preg_match("/<title>(.+)<\/title>/Uism", $data, $tit);
$tit=trim($tit[1]);

preg_match_all("/<item[^>]*?>(.*)<\/item>/Uism", $data, $items);
	foreach ($items[1] as $item) {
		preg_match("/<title>(.+)<\/title>/Uism", $item, $title);
		preg_match("/<link>(.+)<\/link>/Uism", $item, $link);
	echo "<a href=\"".$link[1]."\" target=blank\">".$title[1]."</a><br>";
}
?>
 

Momo

B1G-Software-Kunde
#10
PHP:
<?php
$rdffile = "http://www.netzeitung.de/export/news/rss/deutschland.xml";
$content = implode ("", file ($rdffile));
preg_match_all("|<item>(.*)</item>|Uism",$content, $items, PREG_PATTERN_ORDER);
for ($i=0;$i<count($items[1]);$i++)
{
preg_match_all("|<title>(.*)</title>(.*)<description>(.*)</description>(.*)<link>(.*)</link>|Uism",$items[1][$i], $regs, PREG_PATTERN_ORDER);
echo "<a href='".$regs[5][0]."' target='_blank'>".$regs[1][0]."</a><br>".$regs[3][0]." <br><a href='".$regs[5][0]."' target='_blank'>mehr lesen</a><br><br>\n";
}
?>
Diesen Code habe ich jetzt in einem iframe auf die Startseite von http://begierig.de gepackt. Er klappt auch. Aber ich möchte das gerne per
PHP:
<? include >
Befehl in die Seite einbauen. Mit dem i-frame sieht es einfach doof aus.
Auch wenn ich ein {literal} include Befehl {/literal} darum mache, bekomme ich entweder eine Fehlermeldung oder der Code wird "pur" ausgegeben.
Hat jemand Ideen?
 
Top