abonnement Unibet Coolblue Bitvavo
  maandag 5 april 2004 @ 20:36:02 #7
42782 QuietGuy
opscheppende pats-nerd
pi_18202674
RSS gebruiken in je website - Serverside door middel van PHP

Ik heb zelf, speciaal voor deze FAQ een simpel PHP-scriptje in elkaar gezet welke, zonder extra modules, een RSS-feed binnenhaalt:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
   // RSS-feed
   $adres="http://rss.fok.nl/feeds/nieuws"; 
   // Map waar het RSS-bestand wordt opgeslagen voor de cache
   $cachemap="w:/";
   // Het aantal minuten dat deze feed in de cache blijft staan
   $cachetijd=10;
   
   /* * * * Begin Cache-gebeuren * * * */
   $p=explode("/",$adres);
   $fn=$p[count($p)-1];
   $ln=$cachemap.$i.$fn;
   $maak_cache=false;
   if(file_exists($ln)) {
      if(filemtime($ln)<time()-($cachetijd*60)) {
         $maak_cache=true;
      }
   } else { $maak_cache=true; }
   if($maak_cache) {
      if(@$f_r=fopen($adres,"r")) {
         if(@$f_w=fopen($ln,"w")) {
            while(!feof($f_r)) {
               $data=fgets($f_r,1024);
               fputs($f_w,$data);
            }
            fclose($f_w);
            $adres=$ln;
         }
         fclose($f_r);
      }
   }
   if(file_exists($ln)) { $adres=$ln; }
   /* * * * Einde Cache-gebeuren * * * */
   
   // Haalt het RSS-file op en zet deze in een variabele
   if($file=fopen($adres,"r")) {
      while(!feof($file)) {
         $data.=fgets($file,1024);
      }
      fclose($file);
   }
   
   // Zet de RSS-feed in een array
   $p=explode("<item>",$data);
   for($i=0;$i<count($p);$i++) {
      $item=$p[$i];
      if($q=stristr($item,"<title")) { $r=stristr($q,"</title"); $rss[$i]['title']=substr($q,7,strlen($q)-strlen($r)-7); }
      if($q=stristr($item,"<description")) { $r=stristr($q,"</description"); $rss[$i]['description']=substr($q,13,strlen($q)-strlen($r)-13); }
      if($q=stristr($item,"<pubDate")) { $r=stristr($q,"</pubDate"); $rss[$i]['pubdate']=strtotime(substr($q,9,strlen($q)-strlen($r)-9)); }
      if($q=stristr($item,"<link")) { $r=stristr($q,"</link"); $rss[$i]['link']=substr($q,6,strlen($q)-strlen($r)-6); }
   }
?>

Dit script maakt een array aan welke je supersimpel kan laten weergeven door bijvoorbeeld deze code:
1
2
3
4
5
6
7
8
9
10
11
12
<!-- Begin: weergave van de RSS-feed -->
<table border=1>
<?php
   for($i=0;$i<count($rss);$i++) {
      echo " <tr><td><b><a href=\"".$rss[$i]['link']."\" target=\"_blank\">".$rss[$i]['title']."</a></b><br>";
      echo html_entity_decode($rss[$i]['description']);
      echo "<br><i>Geschreven op ".date("d-m-Y H:i:s",$rss[$i]['pubdate'])."</i>";
      echo "</td></tr>\n";
   }
?>
</table>
<!-- Einde: weergave van de RSS-feed -->

Aanpassen van deze codes lijkt me geen probleem.

Let wel op, deze PHP code schrijft de RSS-feed lokaal weg in $cachemap en laat deze een aantal ($cachetijd) minuten staan.
Hiervoor is schrijfrecht nodig in de map $cachemap
Gebruik de cache! Anders kost het jou en de eigenaar van de RSS-feed waarschijnlijk onnodige bandbreedte.
Met deze instellingen wordt de feed maximaal 1x per 10 minuten opgehaald. Anders bij iedere pagina-aanvraag.

[ Bericht 39% gewijzigd door QuietGuy op 03-01-2005 10:39:24 ]
abonnement Unibet Coolblue Bitvavo
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')