kennt jemand eine RSS-Klasse?

 


eigenstil
Gast

03.08.09
19:24 Uhr
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.
Link zu diesem Beitrag in die Zwischenablage kopieren
loeffler
Veteran

03.08.09
19:34 Uhr
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).
Link zu diesem Beitrag in die Zwischenablage kopieren
Houly
Gast

03.08.09
19:38 Uhr
Hab das bisher nur einmal genutzt, ging aber recht einfach: http://simplepie.org/
Link zu diesem Beitrag in die Zwischenablage kopieren
eigenstil
Gast

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.... planlos
Link zu diesem Beitrag in die Zwischenablage kopieren
kasn
Gast

03.08.09
19:58 Uhr
Zend_Feed

gibt neben dem reader auch noch einen writer.
Link zu diesem Beitrag in die Zwischenablage kopieren
eigenstil
Gast

03.08.09
20:00 Uhr
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
Link zu diesem Beitrag in die Zwischenablage kopieren
Houly
Gast

03.08.09
20:07 Uhr
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.... planlos

stimmt, hast recht. Hab damals auch nur gelesen.
Link zu diesem Beitrag in die Zwischenablage kopieren
marcus_a
Veteran

03.08.09
20:16 Uhr
Also ich mach das auch immer über simplexml.
Link zu diesem Beitrag in die Zwischenablage kopieren
kasn
Gast

03.08.09
20:17 Uhr
eigenstil schrieb am 03.08.09, 20:00 Uhr:

guter hinweis.... aber wo?

google weiß es irgendwie nicht: http://www.google.de/search?client=opera...p;oe=utf-8
hier, im proposal

hab nur in letzterzeit in den phpblogs ab und an drueber gelesen, dachte das waere schon aus dem entwurfsstatus raus.
Link zu diesem Beitrag in die Zwischenablage kopieren
eigenstil
Gast

03.08.09
20:26 Uhr
kasn schrieb am 03.08.09, 20:17 Uhr:

eigenstil schrieb am 03.08.09, 20:00 Uhr:

guter hinweis.... aber wo?

google weiß es irgendwie nicht: http://www.google.de/search?client=opera...p;oe=utf-8
hier, im proposal

hab nur in letzterzeit in den phpblogs ab und an drueber gelesen, dachte das waere schon aus dem entwurfsstatus raus.
hm... das is antürlich schade, dass es das noch nicht gibt.

marcus_a schrieb am 03.08.09, 20:16 Uhr:

Also ich mach das auch immer über simplexml.
ok, soweit bin ich jetzt auch schon. wie allerdings schafft ihr es, dass der mir mein CDATA nicht kaputtmacht...

bis jetzt macht er mir aus:
  1. <![CDATA[ ... irgendwas mit <html>-tags drin... ]]>
Quelltext in Zwischenablage kopieren
immer:
  1. &lt;![CDATA[... irgendwas mit &lt;html&gt;-tags drin... ]]&gt;
Quelltext in Zwischenablage kopieren
irgendjemand ne idee?
Link zu diesem Beitrag in die Zwischenablage kopieren
kasn
Gast

03.08.09
20:50 Uhr
wie setzt du den cdata?
Link zu diesem Beitrag in die Zwischenablage kopieren
eigenstil
Gast

04.08.09
09:44 Uhr
kasn schrieb am 03.08.09, 20:50 Uhr:

wie setzt du den cdata?
bestimmt falsch -) ich bastel nen string zusammen:
  1. $desc = '<![CDATA[' . $zeugsundgedoens . ']]>';
  2. $child->addChild('description', $desc);
Quelltext in Zwischenablage kopieren
wie gehts richtig?
Link zu diesem Beitrag in die Zwischenablage kopieren
kasn
Gast

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
  1. <?php
  2. class SimpleXMLExtend extends SimpleXMLElement
  3. {
  4. public function addCData($nodename,$cdata_text)
  5. {
  6. $node = $this->addChild($nodename); //Added a nodename to create inside the function
  7. $node = dom_import_simplexml($node);
  8. $no = $node->ownerDocument;
  9. $node->appendChild($no->createCDATASection($cdata_text));
  10. }
  11. }
  12. ?>
Quelltext in Zwischenablage kopieren

And to use:

  1. <?php
  2. $xml = new SimpleXMLExtended('<?xml version = "1.0" encoding = "UTF-8"?><root></root>');
  3. $xml->addCData("newnode","contenthere with & $ % etc");
  4. echo $xml->asXml();
  5. ?>
Quelltext in Zwischenablage kopieren
Link zu diesem Beitrag in die Zwischenablage kopieren
eigenstil
Gast

04.08.09
10:05 Uhr
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

  1. The class:
  2. <?php
  3. class SimpleXMLExtend extends SimpleXMLElement
  4. {
  5. public function addCData($nodename,$cdata_text)
  6. {
  7. $node = $this->addChild($nodename); //Added a nodename to create inside the function
  8. $node = dom_import_simplexml($node);
  9. $no = $node->ownerDocument;
  10. $node->appendChild($no->createCDATASection($cdata_text));
  11. }
  12. }
  13. ?>
  14.  
  15. And to use:
  16.  
  17. <?php
  18. $xml = new SimpleXMLExtended('<?xml version = "1.0" encoding = "UTF-8"?><root></root>');
  19. $xml->addCData("newnode","contenthere with & $ % etc");
  20. echo $xml->asXml();
  21. ?>
Quelltext in Zwischenablage kopieren
werde mein ergebnis bald hier posten.
Link zu diesem Beitrag in die Zwischenablage kopieren
marcus_a
Veteran

04.08.09
11:27 Uhr
Link zu diesem Beitrag in die Zwischenablage kopieren
eigenstil
Gast

04.08.09
11:31 Uhr
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
  1. <?php
  2. class SimpleXMLExtend extends SimpleXMLElement
  3. {
  4. public function addCData($nodename,$cdata_text)
  5. {
  6. $node = $this->addChild($nodename); //Added a nodename to create inside the function
  7. $node = dom_import_simplexml($node);
  8. $no = $node->ownerDocument;
  9. $node->appendChild($no->createCDATASection($cdata_text));
  10. }
  11. }
  12. ?>
Quelltext in Zwischenablage kopieren

And to use:

  1. <?php
  2. $xml = new SimpleXMLExtended('<?xml version = "1.0" encoding = "UTF-8"?><root></root>');
  3. $xml->addCData("newnode","contenthere with & $ % etc");
  4. echo $xml->asXml();
  5. ?>
Quelltext in Zwischenablage kopieren

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. -)
Link zu diesem Beitrag in die Zwischenablage kopieren
phloo
Veteran

04.08.09
11:36 Uhr
Link zu diesem Beitrag in die Zwischenablage kopieren
eigenstil
Gast

04.08.09
11:39 Uhr
phloo schrieb am 04.08.09, 11:36 Uhr:

Ich nutze http://feedcreator.org

das sieht ja super aus...love

hätte ich mal früher sehen müssen, dann hätte ich mir bestimmt einiges sparen können vogel brain
Link zu diesem Beitrag in die Zwischenablage kopieren
marcus_a
Veteran

05.08.09
07:26 Uhr
Editiert: 09.08.09, 11:41 Uhr
  1. <?php
  2.  
  3. class RSS {
  4.  
  5. var $title;
  6. var $link;
  7. var $description;
  8. var $language = "en-us";
  9. var $pubDate;
  10. var $items;
  11. var $tags;
  12.  
  13. function RSS()
  14. {
  15. $this->__construct();
  16. }
  17.  
  18. function __construct()
  19. {
  20. $this->items = array();
  21. $this->tags = array();
  22. }
  23.  
  24. function addItem($item)
  25. {
  26. $this->items[] = $item;
  27. }
  28.  
  29. function setPubDate($when)
  30. {
  31. if(strtotime($when) == false)
  32. $this->pubDate = date("D, d M Y H:i:s ", $when) . "GMT";
  33. else
  34. $this->pubDate = date("D, d M Y H:i:s ", strtotime($when)) . "GMT";
  35. }
  36.  
  37. function getPubDate()
  38. {
  39. if(empty($this->pubDate))
  40. return date("D, d M Y H:i:s ") . "GMT";
  41. else
  42. return $this->pubDate;
  43. }
  44.  
  45. function addTag($tag, $value)
  46. {
  47. $this->tags[$tag] = $value;
  48. }
  49.  
  50. function out()
  51. {
  52. $out = $this->header();
  53. $out .= "<channel>\n";
  54. $out .= "<title>" . $this->title . "</title>\n";
  55. $out .= "<link>" . $this->link . "</link>\n";
  56. $out .= "<description>" . $this->description . "</description>\n";
  57. $out .= "<language>" . $this->language . "</language>\n";
  58. $out .= "<pubDate>" . $this->getPubDate() . "</pubDate>\n";
  59.  
  60. foreach($this->tags as $key => $val) $out .= "<$key>$val</$key>\n";
  61. foreach($this->items as $item) $out .= $item->out();
  62.  
  63. $out .= "</channel>\n";
  64.  
  65. $out .= $this->footer();
  66.  
  67. $out = str_replace("&", "&amp;", $out);
  68.  
  69. return $out;
  70. }
  71.  
  72. function serve($contentType = "application/xml")
  73. {
  74. $xml = $this->out();
  75. header("Content-type: $contentType");
  76. echo $xml;
  77. }
  78.  
  79. function header()
  80. {
  81. $out = '<?xml version="1.0" encoding="utf-8"?>' . "\n";
  82. $out .= '<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">' . "\n";
  83. return $out;
  84. }
  85.  
  86. function footer()
  87. {
  88. return '</rss>';
  89. }
  90.  
  91. }
  92.  
  93. class RSSItem {
  94.  
  95. var $title;
  96. var $link;
  97. var $description;
  98. var $pubDate;
  99. var $guid;
  100. var $tags;
  101. var $attachment;
  102. var $length;
  103. var $mimetype;
  104.  
  105. function RSSItem()
  106. {
  107. $this->tags = array();
  108. }
  109.  
  110. function setPubDate($when)
  111. {
  112. if(strtotime($when) == false)
  113. $this->pubDate = date("D, d M Y H:i:s ", $when) . "GMT";
  114. else
  115. $this->pubDate = date("D, d M Y H:i:s ", strtotime($when)) . "GMT";
  116. }
  117.  
  118. function getPubDate()
  119. {
  120. if(empty($this->pubDate))
  121. return date("D, d M Y H:i:s ") . "GMT";
  122. else
  123. return $this->pubDate;
  124. }
  125.  
  126. function addTag($tag, $value)
  127. {
  128. $this->tags[$tag] = $value;
  129. }
  130.  
  131. function out()
  132. {
  133. $out .= "<item>\n";
  134. $out .= "<title>" . $this->title . "</title>\n";
  135. $out .= "<link>" . $this->link . "</link>\n";
  136. $out .= "<description>" . $this->description . "</description>\n";
  137. $out .= "<pubDate>" . $this->getPubDate() . "</pubDate>\n";
  138.  
  139. if($this->attachment != "")
  140. $out .= "<enclosure url='{$this->attachment}' length='{$this->length}' type='{$this->mimetype}' />";
  141.  
  142. if(empty($this->guid)) $this->guid = $this->link;
  143. $out .= "<guid>" . $this->guid . "</guid>\n";
  144.  
  145. foreach($this->tags as $key => $val) $out .= "<$key>$val</$key\n>";
  146. $out .= "</item>\n";
  147. return $out;
  148. }
  149.  
  150. function enclosure($url, $mimetype, $length)
  151. {
  152. $this->attachment = $url;
  153. $this->mimetype = $mimetype;
  154. $this->length = $length;
  155. }
  156.  
  157. }
Quelltext in Zwischenablage kopieren
Wird dann so angewendet:

  1. $feed = new RSS();
  2. $feed->title = "RSS Feed Title";
  3. $feed->link = "http://website.com";
  4. $feed->description = "Recent articles on your website.";
  5.  
  6. $db->query($query);
  7. $result = $db->result;
  8.  
  9. while( $row = mysql_fetch_array($result) )
  10. {
  11. $item = new RSSItem();
  12. $item->title = $title;
  13. $item->link = $link;
  14. $item->setPubDate($create_date);
  15. $item->description = "<![CDATA[ $html ]]>";
  16. $feed->addItem($item);
  17. }
  18.  
  19. echo $feed->serve();
Quelltext in Zwischenablage kopieren
Spoiler (anzeigen):

unter Vorbehalt. trippel
Link zu diesem Beitrag in die Zwischenablage kopieren
 
#