RSS-Feed auslesen

stega

Erfahrenes Mitglied
Hi, habe hier schon die Forensuche benutzt, aber nix passendes gefunden, außer einem Anfang eines Code-Schnipsels.
Folgendes Problem:
Ich möchte den tagesschau-News-Feed auf meiner Seite platzieren. Dazu muss ich die rdf-Datei aber erstmal mit PHP auslesen und umbauen (soweit hab ichs verstanden). Nur weiß ich nicht, wie ich das machen soll.
diesen Code hab ich in nem anderen Thema gefunden:
PHP:
 // RSS Fedd
$stream = "deineXMLdatei";

// Feed laden
if (!$xml = simplexml_load_file ($stream)) {
    die("Fehler beim Einlesen der XML Datei");
}

// Ausgabe Array
$out = array();
// auszulesende Datensaetze
$i = 5;

// Items vorhanden?
if (!isset($xml->channel->item)) {
    die("Keine Items vorhanden");
}

// fetchen der Items
foreach($xml->channel->item as $item) { 
    $data = array();
    $data['title'] = $item->title;
    $data['description'] = $item->description;
    $data['link'] = $item->link;
    //$data['date'] = date("d.m.Y", strtotime($item->pubDate));
    
    // Pushen des Ausgabe Array´s
    array_push($out, $data);
    
    // wenn auszulesende Datensaetze erreicht -> Abbruch
    if ($i == 1) {
        break;
    }
    $i--;
}

// in $out stecken nun die Datensaetze

nur das bei tagesschau-rss nicht, da kommt immer, dass keine items gefunden sind.
der Newsfeed sieht so aus:
Code:
<rdf:RDF>
	<channel>
<title>tagesschau.de - Die Nachrichten der ARD</title>
<link>http://www.tagesschau.de</link>
<description>
tagesschau.de: Dieses Dokument enthält die Schlagzeilen der aktuellen tagesschau.de-Homepage
</description>
</channel>
<item>
<title>Telekom trennt sich von 32.000 Mitarbeitern</title>
<link>
http://www.tagesschau.de/aktuell/meldungen/0,1185,OID4915106_REF1,00.html
</link>
<description>
Die Deutsche Telekom hat Pläne für einen massiven Stellenabbau in den kommenden drei Jahren vorgelegt. Rund 32.000 Mitarbeiter müssen den Konzern verlassen. Betriebsbedingte Kündigungen soll es dabei keine geben. Wegen gleichzeitiger Neueinstellungen werden am Ende netto 19.000 Stellen wegfallen.
</description>
</item>
// dann kommen noch ein paar mehr

wie kann ich das jetzt umbauen? einen News-Reader möchte ich nicht installieren bzw. einbauen, sondern die Schlagzeilen speziell für meine Seite aufbereitet verarbeiten. Mit dem obigen Script ist das mit dem Array ja super machbar, nur warum liest er mir dabei nichts aus?

danke für die Hilfe
 
Probier mal Folgnedes:
PHP:
<?php

	$filename = 'http://www.tagesschau.de/newsticker.rdf';

	// Feed laden
	if( !$xml = simplexml_load_file($filename) ) {
		die('Fehler beim Einlesen der XML Datei!');
	}

	// Ausgabe Array
	$out = array();
	// auszulesende Datensaetze
	$i = 5;

	// Items vorhanden?
	if( !isset($xml->item) ) {
		die('Keine Items vorhanden!');
	}

	// fetchen der Items
	foreach($xml->item as $item) {
		if( $i-- == 0 ) {
			break;
		}
		$out[] = array(
			'title'         => (string) $item->title,
			'description'   => (string) $item->description,
			'link'          => (string) $item->link,
			// 'date'         => date('d.m.Y', strtotime((string) $item->pubDate))
		);
	}

?>
 
Fatal error: Call to undefined function: simplexml_load_file() in /usr/export/www/vhosts/funnetwork/hosting/rabioaktiv/inc/news_feed.php on line 6

das gibt er mir jetzt aus :(
danke auf alle Fälle mal, dass du dich meinem Problem widmest =)
 
ich hab jetzt mal php_info benutzt und da steht "Based on PHP 4.4.1"...also geht's wohl nicht...
dann muss ich wohl einen fertigen RSS-Reader einsetzen oder wie kann ich das sosnt noch machen?
 
nichts, ich wollt's mal selsbt probieren, weil ich dagegen bin/war, dass man für nen fertigen RSS-Reader gleich wieder 3-5 oder mehr Dateien einbinden muss und so... das war mir zu aufwendig, das alles anzupassen :-(

aber jetzt muss es wohl sein... obwohl, eigentlich kann das dann doch auch nicht klappen, wenn die alle mit der Funktion arbeiten?!
 
Neben den SimpleXML-Funktionen gibt es noch mehr XML-Funktionen, wie etwa die XML-Parser-Funktionen. Auch ist es nicht unbedingt nötig gleich XML-Funktionen zu nutzen, da beispielsweise auch möglich ist, dies mit reguläre Ausdrücken zu erledigen.
 
hab ich mir auch schon überlegt:
eigentlich muss es doch möglichs ein, dass ich mit php die einzelnen "Abschnitte" also alles zwischen <title></title> und <description></description> auslese.... im Prinzip immer an diesen Ausdrücken 'schneiden'.... wie kann ich das dann machen, dass ich den Titel habe und die Beschreibung dazu?
das geht nicht mit ereg_replace, oder? oder könnt ich da sagen ereg_replace ("<title>","",..) und dann ereg_replace ("</title","<br>",...) und das gleiche bei descritpion...

Als Problem folgt aber daraus, dass ich das dann nicht wirklich schön verpacken kann...

weißt du da ne Hilfe?
 
PHP:
<?php

	$data = file_get_contents('http://www.tagesschau.de/newsticker.rdf');
	$feed = array();
	$tmp = explode('</channel>', $data);
	if( preg_match_all('#<(title|link|description)>(.+?)</\1>#', $tmp[0], $matches) ) {
		foreach( $matches[0] as $key => $value ) {
			$feed[strtolower($matches[1][$key])] = $matches[2][$key];
		}
	}
	if( preg_match_all('#<item>(.+?)</item>#s', $tmp[1], $items) ) {
		foreach( $items[0] as $item ) {
			if( preg_match_all('#<(title|link|description)>(.+?)</\1>#', $item, $matches) ) {
				$tmp = array();
				foreach( $matches[0] as $key => $value ) {
					$tmp[strtolower($matches[1][$key])] = $matches[2][$key];
				}
				$feed['items'][] = $tmp;
			}
		}
	}

	var_dump( $feed );

?>
 
Zurück