<?php/* Heise Feed Version 0.2*/header("Content-type: text/xml; charset=UTF-8");/* Ordner in dem die Artikel zwischengespeichert werden */define('CACHEFOLDER','feed');/* Sek. in denen der Feed nicht aktualisiert wird. Das verhindert bei mehreren* Clients, dass der Server und Heise belastet werden.*/define('FEEDINTERVAL',600);/* Anzahl Artikel, die im Cacheordner gespeichert werden sollen. */define('MAXARTIKELS',100);function getId($artikelUrl) { return substr($artikelUrl,39);}function getArtikel($id, $date) { $artikelUrl = "http://www.heise.de/newsticker/meldung/print/".$id; /* Artikel aus dem Cacheordner holen, falls er existiert und nicht reload angegeben ist. */ if($_GET["do"] != "reload" and file_exists(CACHEFOLDER."/".$date."-".$id.".txt")) { $artikelFertig = file_get_contents(CACHEFOLDER."/".$date."-".$id.".txt"); } else { if(!$artikelRoh=file_get_contents($artikelUrl)) { $artikelFertig = "Fehler: Artikel konnte nicht geladen werden"; } else { $text = "/<div class=\"meldung_wrapper\">(.+)<\/div>(.+)<\/div>/si"; $reg = "/ class=\"(.{1,20})\"| /i"; if (preg_match($text, $artikelRoh, $treffer)) { $artikelFertig = $treffer[0]; $artikelFertig = strip_tags($artikelFertig, '<pre><b><br><em><ul><li><hr><p><img><strong><table><td><tr>'); $artikelFertig = str_replace("/bilder/","http://www.heise.de/bilder/",$artikelFertig); $artikelFertig = str_replace(" /newsticker/"," http://www.heise.de/newsticker/",$artikelFertig); $artikelFertig = htmlspecialchars($artikelFertig); file_put_contents(CACHEFOLDER."/".$date."-".$id.".txt",$artikelFertig); } else { $artikelFertig = "Es konnte kein Artikeltext extrahiert werden"; } } } /* Alte Artikel im Cacheordner löschen */ $files = scandir(CACHEFOLDER); while(count($files) > MAXARTIKELS) { unlink(CACHEFOLDER."/".$files[2]); $files = scandir(CACHEFOLDER); } return $artikelFertig;}/* Mit ?do=reload werden alle Artikel des Feeds neu eingelesen. Mit ?do=sync*wird nur überprüft ob es neue Artikel gibt.*/if($_GET["do"]=="reload" or $_GET["do"]=="sync" or !file_exists(CACHEFOLDER."/"."feed.txt") or time() - filemtime(CACHEFOLDER."/"."feed.txt") > FEEDINTERVAL) { $xml = DOMDocument::load("http://www.heise.de/newsticker/heise-atom.xml"); $entrys = $xml->getElementsByTagName('entry'); /* Eigene URL setzen */ $xml->getElementsByTagName('link')->item(1)->attributes->item(1)->nodeValue="www.YOURURLHERE.com"; for ($i=0; $i < $entrys->length; $i++) { $entry = $entrys->item($i); $id = getId($entry->getElementsByTagName('id')->item(0)->nodeValue); $date = $entry->getElementsByTagName('updated')->item(0)->nodeValue; $entry->getElementsByTagName('summary')->item(0)->setAttribute('type','html'); /* Setze das Datum zurück, falls der Artikel nicht upgedated wurde. * Heise verändert das Datum bei der Hälfte der Artikel, ohne dass sich * der Inhalt ändert. Darum wird nur ein Update gemacht, wenn auch * "Update" im Title steht. */ if(!preg_match("/\[update\]/i",$entry->getElementsByTagName('title')->item(0)->nodeValue)) { $files = scandir(CACHEFOLDER); foreach($files as $file) { if(preg_match("/.+-".$id.".txt/", $file)) { $date = substr($file,0,25); $entry->getElementsByTagName('updated')->item(0)->nodeValue = $date; } } } $artikelInhalt = getArtikel($id, $date); $entrys->item($i)->getElementsByTagName('summary')->item(0)->nodeValue = $artikelInhalt; } $feed = $xml->saveXML(); file_put_contents(CACHEFOLDER."/"."feed.txt",$feed); echo $feed;} else { echo file_get_contents(CACHEFOLDER."/"."feed.txt");}?>