Du bist nicht angemeldet (anmelden)
Seite 1
kennt jemand eine RSS-Klasse?
servus kinder 
ja, der titel sagt's ja schon. kennt jemand von euch eine gute PHP-klasse, mit der man ein RSS-Feed erstellen kann?
ich habe ein wenig gesucht und bin auf die (in PHP enthaltene) Klasse „DOMDocument“ gestoßen. aber die macht irgendwie nicht so richtig das, was ich mir vorstelle.
eine google-suche brachte mich auch nicht weiter. bzw. nur so viel, dass ich uralte klassen gefunden habe, die nicht mit CDATA umgehen können. oder anders gesagt: die sich nicht selbst darüm kümern, ob das nun CDATA ist oder nicht.
ich will mir nämlich nen feed für www.dropular.net (
) basteln... sodass man einen bestimmten pool abonnieren kann. leider bieten die nur einen feed von ALLEN drops bei sich an.
ja, der titel sagt's ja schon. kennt jemand von euch eine gute PHP-klasse, mit der man ein RSS-Feed erstellen kann?
ich habe ein wenig gesucht und bin auf die (in PHP enthaltene) Klasse „DOMDocument“ gestoßen. aber die macht irgendwie nicht so richtig das, was ich mir vorstelle.
eine google-suche brachte mich auch nicht weiter. bzw. nur so viel, dass ich uralte klassen gefunden habe, die nicht mit CDATA umgehen können. oder anders gesagt: die sich nicht selbst darüm kümern, ob das nun CDATA ist oder nicht.
ich will mir nämlich nen feed für www.dropular.net (
SimpleXML ist ziemlich einfach und hat meine ich auch keine Probleme mit CDATA. Benötigt allerdings PHP 5 (gibt aber auch einen Workaround für PHP 4, einfach mal nach simplexml.class.php suchen).
Houly schrieb am 03.08.09, 19:38 Uhr:
Hab das bisher nur einmal genutzt, ging aber recht einfach: http://simplepie.org/
irgendwie hab ich das gefühl, dass simplepie nur in er lage ist, andere feeds auszulesen, oder seh ich das falsch? ich hab jedenfalls hier (http://simplepie.org/wiki/tutorial/start#code_and_demos) kein beispiel gefunden um ein feed mit simplepie zu erstellen....
kasn schrieb am 03.08.09, 19:58 Uhr:
Zend_Feed
gibt neben dem reader auch noch einen writer.
guter hinweis.... aber wo?
google weiß es irgendwie nicht: http://www.google.de/search?client=opera...p;oe=utf-8
eigenstil schrieb am 03.08.09, 19:42 Uhr:
Houly schrieb am 03.08.09, 19:38 Uhr:
Hab das bisher nur einmal genutzt, ging aber recht einfach: http://simplepie.org/
irgendwie hab ich das gefühl, dass simplepie nur in er lage ist, andere feeds auszulesen, oder seh ich das falsch? ich hab jedenfalls hier (http://simplepie.org/wiki/tutorial/start#code_and_demos) kein beispiel gefunden um ein feed mit simplepie zu erstellen....
stimmt, hast recht. Hab damals auch nur gelesen.
eigenstil schrieb am 03.08.09, 20:00 Uhr:hier, im proposal
guter hinweis.... aber wo?
google weiß es irgendwie nicht: http://www.google.de/search?client=opera...p;oe=utf-8
hab nur in letzterzeit in den phpblogs ab und an drueber gelesen, dachte das waere schon aus dem entwurfsstatus raus.
kasn schrieb am 03.08.09, 20:17 Uhr:hm... das is antürlich schade, dass es das noch nicht gibt.
eigenstil schrieb am 03.08.09, 20:00 Uhr:hier, im proposal
guter hinweis.... aber wo?
google weiß es irgendwie nicht: http://www.google.de/search?client=opera...p;oe=utf-8
hab nur in letzterzeit in den phpblogs ab und an drueber gelesen, dachte das waere schon aus dem entwurfsstatus raus.
marcus_a schrieb am 03.08.09, 20:16 Uhr:ok, soweit bin ich jetzt auch schon. wie allerdings schafft ihr es, dass der mir mein CDATA nicht kaputtmacht...
Also ich mach das auch immer über simplexml.
bis jetzt macht er mir aus:
<![CDATA[ ... irgendwas mit <html>-tags drin... ]]>
immer:
<![CDATA[... irgendwas mit <html>-tags drin... ]]>
irgendjemand ne idee?
kasn schrieb am 03.08.09, 20:50 Uhr:bestimmt falsch
wie setzt du den cdata?
$desc = '<![CDATA[' . $zeugsundgedoens . ']]>';$child->addChild('description', $desc);
wie gehts richtig?
hmmm, mit simplexml scheint es irgendwie keine ordentliche loesung zu geben.
mein tipp: domdocument
alternativ hab ich dieses in der phpdoku gefunden, da wird aber auch der umweg ueber dom document gegangen. sieht aber aus als koennte es funzen
And to use:
mein tipp: domdocument
alternativ hab ich dieses in der phpdoku gefunden, da wird aber auch der umweg ueber dom document gegangen. sieht aber aus als koennte es funzen
<?phpclass SimpleXMLExtend extends SimpleXMLElement{public function addCData($nodename,$cdata_text){$node = $this->addChild($nodename); //Added a nodename to create inside the function$node = dom_import_simplexml($node);$no = $node->ownerDocument;$node->appendChild($no->createCDATASection($cdata_text));}}?>
And to use:
<?php$xml = new SimpleXMLExtended('<?xml version = "1.0" encoding = "UTF-8"?><root></root>');$xml->addCData("newnode","contenthere with & $ % etc");echo $xml->asXml();?>
hm... das ist natürlich sehr unbefriedigend, denn da gehts auch nicht.
ich habe mal bei php.net geschaut und dort folgendes gefunden (aber noch nict ausprobiert):
http://de2.php.net/manual/en/function.si....php#89616
werde mein ergebnis bald hier posten.
ich habe mal bei php.net geschaut und dort folgendes gefunden (aber noch nict ausprobiert):
http://de2.php.net/manual/en/function.si....php#89616
The class:<?phpclass SimpleXMLExtend extends SimpleXMLElement{public function addCData($nodename,$cdata_text){$node = $this->addChild($nodename); //Added a nodename to create inside the function$node = dom_import_simplexml($node);$no = $node->ownerDocument;$node->appendChild($no->createCDATASection($cdata_text));}}?>And to use:<?php$xml = new SimpleXMLExtended('<?xml version = "1.0" encoding = "UTF-8"?><root></root>');$xml->addCData("newnode","contenthere with & $ % etc");echo $xml->asXml();?>
werde mein ergebnis bald hier posten.
kasn schrieb am 04.08.09, 10:00 Uhr:
hmmm, mit simplexml scheint es irgendwie keine ordentliche loesung zu geben.
mein tipp: domdocument
alternativ hab ich dieses in der phpdoku gefunden, da wird aber auch der umweg ueber dom document gegangen. sieht aber aus als koennte es funzen
Quelltext in Zwischenablage kopieren
<?phpclass SimpleXMLExtend extends SimpleXMLElement{public function addCData($nodename,$cdata_text){$node = $this->addChild($nodename); //Added a nodename to create inside the function$node = dom_import_simplexml($node);$no = $node->ownerDocument;$node->appendChild($no->createCDATASection($cdata_text));}}?>
And to use:
Quelltext in Zwischenablage kopieren
<?php$xml = new SimpleXMLExtended('<?xml version = "1.0" encoding = "UTF-8"?><root></root>');$xml->addCData("newnode","contenthere with & $ % etc");echo $xml->asXml();?>
ha, da haben wir beide das gleiche gefunden. aber so wie es dort steht, funkltioniert es wunderbar.
wer interesse an dem feed hat:
www.eigenstil.de/dropular/?q=typography
„typography“ kann natürlich frei ersetzt werden durch alles was man möchte.
phloo schrieb am 04.08.09, 11:36 Uhr:
Ich nutze http://feedcreator.org
das sieht ja super aus...
hätte ich mal früher sehen müssen, dann hätte ich mir bestimmt einiges sparen können
Editiert: 09.08.09, 11:41 Uhr
<?phpclass RSS {var $title;var $link;var $description;var $language = "en-us";var $pubDate;var $items;var $tags;function RSS(){$this->__construct();}function __construct(){$this->items = array();$this->tags = array();}function addItem($item){$this->items[] = $item;}function setPubDate($when){if(strtotime($when) == false)$this->pubDate = date("D, d M Y H:i:s ", $when) . "GMT";else$this->pubDate = date("D, d M Y H:i:s ", strtotime($when)) . "GMT";}function getPubDate(){if(empty($this->pubDate))return date("D, d M Y H:i:s ") . "GMT";elsereturn $this->pubDate;}function addTag($tag, $value){$this->tags[$tag] = $value;}function out(){$out = $this->header();$out .= "<channel>\n";$out .= "<title>" . $this->title . "</title>\n";$out .= "<link>" . $this->link . "</link>\n";$out .= "<description>" . $this->description . "</description>\n";$out .= "<language>" . $this->language . "</language>\n";$out .= "<pubDate>" . $this->getPubDate() . "</pubDate>\n";foreach($this->tags as $key => $val) $out .= "<$key>$val</$key>\n";foreach($this->items as $item) $out .= $item->out();$out .= "</channel>\n";$out .= $this->footer();$out = str_replace("&", "&", $out);return $out;}function serve($contentType = "application/xml"){$xml = $this->out();header("Content-type: $contentType");echo $xml;}function header(){$out = '<?xml version="1.0" encoding="utf-8"?>' . "\n";$out .= '<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">' . "\n";return $out;}function footer(){return '</rss>';}}class RSSItem {var $title;var $link;var $description;var $pubDate;var $guid;var $tags;var $attachment;var $length;var $mimetype;function RSSItem(){$this->tags = array();}function setPubDate($when){if(strtotime($when) == false)$this->pubDate = date("D, d M Y H:i:s ", $when) . "GMT";else$this->pubDate = date("D, d M Y H:i:s ", strtotime($when)) . "GMT";}function getPubDate(){if(empty($this->pubDate))return date("D, d M Y H:i:s ") . "GMT";elsereturn $this->pubDate;}function addTag($tag, $value){$this->tags[$tag] = $value;}function out(){$out .= "<item>\n";$out .= "<title>" . $this->title . "</title>\n";$out .= "<link>" . $this->link . "</link>\n";$out .= "<description>" . $this->description . "</description>\n";$out .= "<pubDate>" . $this->getPubDate() . "</pubDate>\n";if($this->attachment != "")$out .= "<enclosure url='{$this->attachment}' length='{$this->length}' type='{$this->mimetype}' />";if(empty($this->guid)) $this->guid = $this->link;$out .= "<guid>" . $this->guid . "</guid>\n";foreach($this->tags as $key => $val) $out .= "<$key>$val</$key\n>";$out .= "</item>\n";return $out;}function enclosure($url, $mimetype, $length){$this->attachment = $url;$this->mimetype = $mimetype;$this->length = $length;}}
Wird dann so angewendet:
$feed = new RSS();$feed->title = "RSS Feed Title";$feed->link = "http://website.com";$feed->description = "Recent articles on your website.";$db->query($query);$result = $db->result;while( $row = mysql_fetch_array($result) ){$item = new RSSItem();$item->title = $title;$item->link = $link;$item->setPubDate($create_date);$item->description = "<![CDATA[ $html ]]>";$feed->addItem($item);}echo $feed->serve();
