All pastes #1297823 Raw Edit

feed.php

public php v1 · immutable
#1297823 ·published 2009-01-01 21:10 UTC
rendered paste body
<?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})\"|&nbsp;/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("&nbsp;/newsticker/","&nbsp;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");}?>