Multidesk.be » Forums » PHP » RSS reader

  • Pagina
  • 1 van 1
0 gasten lezen dit onderwerp.
^ Onderwerp geschreven door stefanc op dinsdag 15 juli 2008 om 19:21:27.
stefanc heeft nog geen avatar toegevoegd
Multiviteit: 7
Ik heb van het internet een script gehaald waarmee ik een rss feed op mijn website kan plaatsen, echter heb ik compleet geen verstand van PHP.

Het is me gelukt om het script werkend te krijgen en heb al wat aanpassingen gedaan. Het enige wat me niet lukt is om een maximum van het aantal berichten in te stellen.

Heeft iemand een idee hoe ik dit kan doen?

pagina: http://test.stefancoppens.nl/reader.php

code:
PHP
  1. <?php
  2. /*******************************************************
  3. CHANGE THE $file variable below to your desired feed URL
  4. *******************************************************/
  5.  
  6. /*  PHP RSS Reader v1.1
  7.  
  8.     Modified by Glenn Prialde - http://www.isnare.com
  9.    
  10.     Originally written: 
  11.     By Richard James Kendall
  12.     Bugs to richard@richardjameskendall.com
  13.     Free to use, please acknowledge me
  14.    
  15.     Place the URL of an RSS feed in the $file variable.
  16.         
  17.         The $rss_channel array will be filled with data from the feed,
  18.         every RSS feed is different by by and large it should contain:
  19.         
  20.         Array {
  21.              [TITLE] = feed title
  22.              [DESCRIPTION] = feed description
  23.              [LINK] = link to their website
  24.              
  25.              [IMAGE] = Array {
  26.                             [URL] = url of image
  27.                             [DESCRIPTION] = alt text of image
  28.                        }
  29.              
  30.              [ITEMS] = Array {
  31.                             [0] = Array {
  32.                                       [TITLE] = item title
  33.                                       [DESCRIPTION] = item description
  34.                                       [LINK = a link to the story
  35.                                  }
  36.                             .
  37.                             .
  38.                             .
  39.                        }
  40.         }
  41.         
  42.         By default it retrives the Reuters Oddly Enough RSS feed. The data is put into the array
  43.         structure so you can format the information as you see fit.
  44. */
  45.  
  46. /*************************************************
  47. CHANGE THE $file variable to your desired feed URL
  48. *************************************************/
  49. $file = "http://www.autosport.com/rss/allnews.xml"; //URL where your Feed comes from
  50.  
  51.  
  52. $rss_channel = array();
  53. $currently_writing = "";
  54. $main = "";
  55. $item_counter = 0;
  56.  
  57. function startElement($parser, $name, $attrs) {
  58.         global $rss_channel, $currently_writing, $main;
  59.         switch($name) {
  60.              case "RSS":
  61.              case "RDF:RDF":
  62.              case "ITEMS":
  63.                   $currently_writing = "";
  64.                   break;
  65.              case "CHANNEL":
  66.                   $main = "CHANNEL";
  67.                   break;
  68.              case "IMAGE":
  69.                   $main = "IMAGE";
  70.                   $rss_channel["IMAGE"] = array();
  71.                   break;
  72.              case "ITEM":
  73.                   $main = "ITEMS";
  74.                   break;
  75.              default:
  76.                   $currently_writing = $name;
  77.                   break;
  78.         }
  79. }
  80.  
  81. function endElement($parser, $name) {
  82.         global $rss_channel, $currently_writing, $item_counter;
  83.         $currently_writing = "";
  84.         if ($name == "ITEM") {
  85.              $item_counter++;
  86.         }
  87. }
  88.  
  89. function characterData($parser, $data) {
  90.         global $rss_channel, $currently_writing, $main, $item_counter;
  91.         if ($currently_writing != "") {
  92.                 switch($main) {
  93.                         case "CHANNEL":
  94.                                 if (isset($rss_channel[$currently_writing])) {
  95.                                         $rss_channel[$currently_writing] .= $data;
  96.                                 } else {
  97.                                         $rss_channel[$currently_writing] = $data;
  98.                                 }
  99.                                 break;
  100.                         case "IMAGE":
  101.                                 if (isset($rss_channel[$main][$currently_writing])) {
  102.                                         $rss_channel[$main][$currently_writing] .= $data;
  103.                                 } else {
  104.                                         $rss_channel[$main][$currently_writing] = $data;
  105.                                 }
  106.                                 break;
  107.                         case "ITEMS":
  108.                                 if (isset($rss_channel[$main][$item_counter][$currently_writing])) {
  109.                                         $rss_channel[$main][$item_counter][$currently_writing] .= $data;
  110.                                 } else {
  111.                                         //print ("rss_channel[$main][$item_counter][$currently_writing] = $data<br>");
  112.                                         $rss_channel[$main][$item_counter][$currently_writing] = $data;
  113.                                 }
  114.                                 break;
  115.                 }
  116.         }
  117. }
  118.  
  119. $xml_parser = xml_parser_create();
  120. xml_set_element_handler($xml_parser, "startElement", "endElement");
  121. xml_set_character_data_handler($xml_parser, "characterData");
  122. if (!($fp = fopen($file, "r"))) {
  123.         die("could not open XML input");
  124. }
  125.  
  126. while ($data = fread($fp, 4096)) {
  127.         if (!xml_parse($xml_parser, $data, feof($fp))) {
  128.                 die(sprintf("XML error: %s at line %d",
  129.                                         xml_error_string(xml_get_error_code($xml_parser)),
  130.                                         xml_get_current_line_number($xml_parser)));
  131.         }
  132. }
  133. xml_parser_free($xml_parser);
  134. ?>
  135. <html>
  136. <title>test</title>
  137. <head>
  138. <style type="text/css">
  139. .text {font-size: 11px; font-weight: normal; font-family: Verdana, Helvitica, Arial;}
  140. .title {font-size: 13px; font-weight: bold; font-family: Verdana, Helvitica, Arial;}
  141. .link {text-decoration: none; font-size: 11px; font-weight: normal; font-family:Verdana, Helvitica;}   
  142. </style>
  143. </head>
  144. <?
  145. if (isset($rss_channel["ITEMS"])) {
  146.         if (count($rss_channel["ITEMS"]) > 0) {
  147.                 for($i = 0;$i < count($rss_channel["ITEMS"]);$i++) {
  148. ?>                 
  149.                         <div>
  150.                           <p>
  151.                       <div class="title"><? echo "<a href=\"" . $rss_channel["ITEMS"][$i]["LINK"] . "\" target=\"_blank\" style='text-decoration: none;'>" . $rss_channel["ITEMS"][$i]["TITLE"] . "</a></b> - by: autosport.com " . $rss_channel["ITEMS"][$i]["AUTHOR"]; ?></div>
  152.                           <div class="text"><? echo stripcslashes(html_entity_decode($rss_channel["ITEMS"][$i])); ?>&nbsp;[<? echo "<a href=\"" . $rss_channel["ITEMS"][$i]["LINK"] . "\" target=\"http://www.autosport.com\" style='text-decoration: none;'>read more</a>"; ?>]</div>
  153.                           </p> 
  154.                         </div>
  155. <?                                   
  156.                 }
  157. ?>           
  158.  
  159. <table cellpadding="0" border="0" cellspacing="1" width="700" align=center>
  160. <tr><td class=text>
  161. <? print ("<span class=text>" . $rss_channel["COPYRIGHT"]. "</span>"); ?>
  162. </td></tr>
  163. </table>
  164.  
  165. <?                   
  166.         } else {
  167.                 print ("<b>There are no articles in this feed.</b>");
  168.         }
  169. }
  170. print ("</body></html>");
  171. ?>
  172.  



Opmerking van de crew

Gast = stefanc
SMG
^ Reactie #1 geschreven door Martijn op dinsdag 15 juli 2008 om 21:22:08.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Hey Stefan,

Even snel je code diagonaal doorgenomen.
Op regel 148 zie je $i < count($rss_channel["ITEMS"]) staan. Als je die verandert in bijvoorbeeld 20, dan zal je maximum 20 items zien.
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #2 geschreven door stefanc op dinsdag 15 juli 2008 om 21:41:36.
stefanc heeft nog geen avatar toegevoegd
Multiviteit: 7
Hoi Martijn,

Bedankt voor je reactie, ik heb het getal 0 van regel 148 aangepast naar 22 waardoor ik nu de 8 oudste berichten zie. Is dit ook op een of andere manier om te keren zodat ik de nieuwste berichten zie of ligt dit aan de aanbieder van de RSS feed?

for($i = 22;$i < count($rss_channel["ITEMS"]);$i++) {
^ Reactie #3 geschreven door Martijn op woensdag 16 juli 2008 om 07:12:24.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Hey Stefan,

Je hebt (volgens mij) het tegenovergestelde gedaan van wat ik bedoelde :).

Ik zou de $i terug op 0 zetten en count($rss_channel["ITEMS"]) vervangen door je gewenste waarde (in dit geval acht). Probeer dat eens. Moesten de items in omgekeerde volgorde staan vervolgens, dan passen we gewoon de volgorde van de for-lus aan. Je geeft maar een seintje ;).
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #4 geschreven door stefanc op woensdag 16 juli 2008 om 09:10:10.
stefanc heeft nog geen avatar toegevoegd
Multiviteit: 7
Voel me nu heel dom :( maar waar moet ik exact dat getal invullen? want als ik "ITEMS" vervang voor een getal dan krijg ik een mooie witte pagina. Dit gebeurt ook als ik $rss_channel en 0 vervang voor een getal.
^ Reactie #5 geschreven door Martijn op woensdag 16 juli 2008 om 09:32:01.
Martijn heeft nog geen avatar toegevoegd
Multiviteit: 13785
Beheerder
Hey Stefan,

Niets doms aan ;).

Gewoon heel count($rss_channel["ITEMS"]) vervangen door het getal van je wens :).
Met vriendelijke groeten,
Martijn Wouters
^ Reactie #6 geschreven door stefanc op woensdag 16 juli 2008 om 18:36:28.
stefanc heeft nog geen avatar toegevoegd
Multiviteit: 7
Perfect, het werkt
Bedankt Martijn!
  • Pagina
  • 1 van 1

Snel-antwoordformulier
Toon uitgebreid antwoordformulier Bericht nalezen Bericht plaatsen