Advertisement
Guest User

elm

a guest
Oct 10th, 2009
989
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.95 KB | None | 0 0
  1. <?php
  2. // Heise Feed Version 0.3
  3. header("Content-type: text/xml; charset=UTF-8");
  4. define('CACHEFOLDER','feed');
  5. define('FEEDINTERVAL',600);
  6. define('MAXARTIKELS',100);
  7.  
  8. function getID($url) {
  9.         $id = substr($url, -11, 6);
  10.         return $id;
  11. }
  12.  
  13. function getArtikel($url, $id, $date) {
  14.         if($_GET["do"] != "reload" and file_exists(CACHEFOLDER."/".$date."-".$id.".txt")) {
  15.                 $artikelFertig = file_get_contents(CACHEFOLDER."/".$date."-".$id.".txt");
  16.         } else {
  17.                 $doc = new DOMDocument();
  18.                 $artikel = mb_convert_encoding(file_get_contents($url), 'HTML-ENTITIES', "UTF-8");
  19.                 $doc->loadHTML($artikel);
  20.                 $divs = $doc->getElementsByTagName('div');
  21.  
  22.                 $artikelFertig = 'Konnte Artikelinhalt nicht finden.';
  23.  
  24.                 $newDoc = new DOMDocument();
  25.  
  26.                 foreach ( $divs as $div ) {
  27.                         #$artikelFertig = $artikelFertig.$div->nodeValue.'\n\n';
  28.                        if( $div->hasAttribute('class') && $div->getAttribute('class') == 'meldung_wrapper' ) {
  29.                                 $newDoc->appendChild($newDoc->importNode($div,true));
  30.                         }
  31.                 }
  32.                 $artikelFertig = $newDoc->saveHTML();
  33.                 $artikelFertig = strip_tags($artikelFertig, '<a><pre><b><br><em><ul><li><hr><p><img><strong><table><td><tr>');
  34.                 $artikelFertig = str_replace("\"/","\"http://www.heise.de/",$artikelFertig);
  35.                 $artikelFertig = htmlspecialchars($artikelFertig);
  36.  
  37.                 if(!file_put_contents(CACHEFOLDER."/".$date."-".$id.".txt",$artikelFertig)) die();
  38.         }
  39.         $files = scandir(CACHEFOLDER);
  40.         while(count($files) > MAXARTIKELS) {
  41.                 unlink(CACHEFOLDER."/".$files[2]);
  42.                 $files = scandir(CACHEFOLDER);
  43.         }
  44.         return $artikelFertig;
  45. }
  46.  
  47. if($_GET["do"]=="reload" or $_GET["do"]=="sync" or $_GET["do"]=="test" or !file_exists(CACHEFOLDER."/"."feed.txt") or time() - filemtime(CACHEFOLDER."/"."feed.txt") > FEEDINTERVAL) {
  48.         $xml = DOMDocument::load("http://www.heise.de/newsticker/heise-atom.xml");
  49.         $entrys = $xml->getElementsByTagName('entry');
  50.  
  51.         $xml->getElementsByTagName('link')->item(1)->attributes->item(1)->nodeValue="http://www.example.com/feed.php";
  52.  
  53.         for ($i=0; $i < $entrys->length; $i++) {
  54.                 $entry = $entrys->item($i);
  55.                 $url = str_replace('/from/atom10', '', $entry->getElementsByTagName('id')->item(0)->nodeValue);
  56.                 $id = getID($url);
  57.                 $date = $entry->getElementsByTagName('updated')->item(0)->nodeValue;
  58.  
  59.                 $summary = $xml->createElement('summary');
  60.                 $entry->appendChild($summary);
  61.  
  62.                 $entry->getElementsByTagName('summary')->item(0)->setAttribute('type','html');
  63.  
  64.                 #Setze das Datum zurück, falls der Artikel nicht upgedated wurde.
  65.                #Heise verändert das Datum bei der hälfte der Artikel, ohne dass sich der Inhalt ändert.
  66.                if(!preg_match("/\[update\]/i",$entry->getElementsByTagName('title')->item(0)->nodeValue)) {
  67.                         $files = scandir(CACHEFOLDER);
  68.                         foreach($files as $file) {
  69.                                 if(preg_match("/.+-".$id.".txt/", $file)) {
  70.                                         $date = substr($file,0,25);
  71.                                         $entry->getElementsByTagName('updated')->item(0)->nodeValue = $date;
  72.                                 }
  73.                         }
  74.                 }
  75.                 $artikelInhalt = getArtikel($url, $id, $date);
  76.                 $entrys->item($i)->getElementsByTagName('summary')->item(0)->nodeValue = $artikelInhalt;
  77.         }
  78.         $feed = $xml->saveXML();
  79.         file_put_contents(CACHEFOLDER."/"."feed.txt",$feed);
  80.         echo $feed;
  81. } else {
  82.         echo file_get_contents(CACHEFOLDER."/"."feed.txt");
  83. }
  84. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement