PHP   6

rss10.inc

Guest on 21st August 2021 09:12:34 AM

  1. <?php
  2.  
  3. // $Id: rss10.inc,v 1.3  edmundd Exp $
  4. //
  5. // A convenience class to make it easy to write RSS classes
  6. // Edd Dumbill <mailto:edd+rsswriter@usefulinc.com>
  7. //
  8. // $Log: rss10.inc,v $
  9. // Revision 1.3    edmundd
  10. // Final distribution tweaks.
  11. //
  12. // Revision 1.2   edmundd
  13. // Ready for distribution.
  14. //
  15. // Revision 1.1    edmundd
  16. // First functional draft of code working.
  17. //
  18. // Revision 1.1  edmundd
  19. // Start of a convenience library to help RSS1.0 creation
  20. //
  21.  
  22. class RSSWriter {
  23.  
  24. function RSSWriter($uri, $title, $description, $meta=array()) {
  25.         $this->chaninfo=array();
  26.         $this->website=$uri;
  27.         $this->chaninfo["link"]=$uri;
  28.         $this->chaninfo["description"]=$description;
  29.         $this->chaninfo["title"]=$title;
  30.         $this->items=array();
  31.         $this->modules=array("dc" => "http://purl.org/dc/elements/1.1/");
  32.         // thanks James Mills for bugfix to this line
  33.         $this->channelURI=str_replace("&", "&amp;", "http://" . $GLOBALS["SERVER_NAME"] . $GLOBALS["REQUEST_URI"]);
  34.         foreach ($meta as $key => $value) {
  35.                 $this->chaninfo[$key]=$value;
  36.         }
  37. }
  38.  
  39. function useModule($prefix, $uri) {
  40.         $this->modules[$prefix]=$uri;
  41. }
  42.  
  43. function setImage($imgURI, $imgAlt, $imgWidth=88, $imgHeight=31) {
  44.         $this->image=array(
  45.                 "uri" => $imgURI, "title" => $imgAlt, "width" => $imgWidth,
  46.                 "height" => $imgHeight);
  47. }
  48.  
  49. function addItem($uri, $title, $meta=array()) {
  50.         $item=array("uri" => $uri, "link" => $uri,
  51.                 "title" => $this->deTag($title));
  52.         foreach ($meta as $key => $value) {
  53.                 if ($key == "description" || $key == "dc:description") {
  54.                         $value=$this->deTag($value);
  55.                 }
  56.                 $item[$key]=$value;
  57.         }
  58.         $this->items[]=$item;
  59. }
  60.  
  61. function serialize() {
  62.         $this->preamble();
  63.         $this->channelinfo();
  64.         $this->image();
  65.         $this->items();
  66.         $this->postamble();
  67. }
  68.  
  69. function deTag($in) {
  70.   while(ereg('<[^>]+>', $in)) {
  71.         $in=ereg_replace('<[^>]+>', '', $in);
  72.   }
  73.   return $in;
  74. }
  75.  
  76. function preamble() {
  77.         header("Content-type: text/xml");
  78.         print '<?xml version="1.0" encoding="iso-8859-1"?>
  79. <rdf:RDF
  80.         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  81.         xmlns="http://purl.org/rss/1.0/"
  82.         xmlns:mn="http://usefulinc.com/rss/manifest/"
  83. ';
  84.         foreach ($this->modules as $prefix => $uri) {
  85.                 print "         xmlns:${prefix}=\"${uri}\"\n";
  86.         }
  87.         print ">\n\n";
  88. }
  89.  
  90. function channelinfo() {
  91.         print '  <channel rdf:about="' .  $this->channelURI . '">
  92. ';
  93.         $i=$this->chaninfo;
  94.         foreach (array("title", "link", "dc:source", "description", "dc:language", "dc:publisher",
  95.                 "dc:creator", "dc:rights") as $f) {
  96.                 if (isset($i[$f])) {
  97.                         print "    <${f}>" . htmlspecialchars($i[$f]) . "</${f}>\n";
  98.                 }
  99.         }
  100.         if (isset($this->image)) {
  101.                 print "    <image rdf:resource=\"" . htmlspecialchars($this->image["uri"]) . "\" />\n";
  102.         }
  103.         print "    <items>\n";
  104.         print "      <rdf:Seq>\n";
  105.         foreach ($this->items as $i) {
  106.                 print "        <rdf:li rdf:resource=\"" . htmlspecialchars($i["uri"]) . "\" />\n";
  107.         }
  108.         print "      </rdf:Seq>\n";
  109.         print "    </items>\n";
  110.         print "  </channel>\n\n";
  111. }
  112.  
  113. function image() {
  114.         if (isset($this->image)) {
  115.         print "  <image rdf:about=\"" . htmlspecialchars($this->image["uri"]) . "\">\n";
  116.     print "     <title>" . htmlspecialchars($this->image["title"]) . "</title>\n";
  117.     print "     <url>" . htmlspecialchars($this->image["uri"]) . "</url>\n";
  118.     print "     <link>" . htmlspecialchars($this->website) . "</link>\n";
  119.     if ($this->chaninfo["description"])
  120.          print "     <dc:description>" . htmlspecialchars($this->chaninfo["description"]) .
  121.                 "</dc:description>\n";
  122.         print "  </image>\n\n";
  123.         }
  124. }
  125.  
  126. function postamble() {
  127.         print '  <rdf:Description rdf:ID="manifest">
  128.    <mn:channels>
  129.      <rdf:Seq>
  130.        <rdf:li rdf:resource="' . $this->channelURI . '" />
  131.      </rdf:Seq>
  132.    </mn:channels>
  133.  </rdf:Description>
  134.  
  135. </rdf:RDF>
  136. ';
  137. }
  138.  
  139. function items() {
  140.         foreach ($this->items as $item) {
  141.                 print "  <item rdf:about=\"" .  htmlspecialchars($item["uri"]) . "\">\n";
  142.                 foreach ($item as $key => $value) {
  143.                         if ($key!="uri") {
  144.                                 if (is_array($value)) {
  145.                                         foreach ($value as $v1) {
  146.                                                 print "    <${key}>" . htmlspecialchars($v1) . "</${key}>\n";
  147.                                         }
  148.                                 } else {
  149.                                         print "    <${key}>" . htmlspecialchars($value) . "</${key}>\n";
  150.                                 }
  151.                         }
  152.                 }
  153.                 print "  </item>\n\n";
  154.         }
  155. }
  156.  
  157. }
  158.  
  159. ?>

Raw Paste


Login or Register to edit or fork this paste. It's free.