# RSS-Feed auslesen



## stega (2. November 2005)

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:

```
// 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:

```
<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


----------



## Gumbo (13. November 2005)

Probier mal Folgnedes:
	
	
	



```
<?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))
		);
	}

?>
```


----------



## stega (13. November 2005)

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 =)


----------



## Gumbo (13. November 2005)

Hat der Aufruf der Funktion vorher auch schon nicht funktioniert? Denn die SimpleXML-Funktionen sind erst ab PHP-Version 5 verfügbar.


----------



## stega (13. November 2005)

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?


----------



## Gumbo (13. November 2005)

Was wäre gegen einen fertigen RSS-Reader einzuwenden?


----------



## stega (13. November 2005)

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?!


----------



## Gumbo (13. November 2005)

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.


----------



## stega (13. November 2005)

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?


----------



## Gumbo (13. November 2005)

```
<?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 );

?>
```


----------



## stega (13. November 2005)

bei der Seite, wo ich's ursprünlgich einbinden wollte, kommt folgende Meldung:
Warning: file_get_contents(): URL file-access is disabled in the server configuration in /usr/export/www/vhosts/funnetwork/hosting/rabioaktiv/inc/news_feed.php on line 3

Warning: file_get_contents(http://www.tagesschau.de/newsticker.rdf): failed to open stream: no suitable wrapper could be found in /usr/export/www/vhosts/funnetwork/hosting/rabioaktiv/inc/news_feed.php on line 3
array(0) { }

dann hab ichs mal bei meinem anderen Webspace probiert, da kommt das (Auszugsweise):
rray(4) { ["title"]=> string(39) "tagesschau.de - Die Nachrichten der ARD" ["link"]=> string(24) "http://www.tagesschau.de" ["description"]=> string(92) "tagesschau.de: Dieses Dokument enthält die Schlagzeilen der aktuellen tagesschau.de-Homepage" ["items"]=> array(19) { [0]=> array(3) { ["title"]=> string(44) "Parteigremien beraten über Koalitionsvertrag" ["link"]=> string(73) "http://www.tagesschau.de/aktuell/meldungen/0,1185,OID4936654_REF1,00.html" ["description"]=> string(305) "Die designierte Kanzlerin Merkel hat bei der Vorstellung des Koalitionsvertrags die geplanten Sparvorhaben verteidigt. Ihr sei bewusst, dass damit den Menschen etwas zugemutet werde. Aber die Haushaltslage sei prekär. Heute beraten die Partei- und Fraktionsgremien von Union und SPD über das Vertragswerk." } [1]=> array(3) { ["title"]=> string(65) "Einzelhandelssprecher: "Dieses Programm ist Flick- und Stückwerk"" ["link"]=> string(73) "http://www.tagesschau.de/aktuell/meldungen/0,1185,OID4946466_REF1,00.html" 
[und so weiter...]

heißt das, ich kann's vergessen auf dem ersten Webspace das einzubinden? eigentlich könnt ich ja die Datei vom zweiten Webspace einfach einbinden, oder?

und was gibts jetzt da für ein Problem, dass die Anzeige sooo (s.o.) aussieht?


----------



## fanste (13. November 2005)

Da ist bei dir in der php.ini der Parameter
allow_url_fopen auf OFF gesetzt. Mach daraus On, wenn du Zugriff auf die php.ini has, ansonsten Frag mal bei deinem Hoster nach.


----------



## Gumbo (13. November 2005)

Mir scheint, dass du aufgrund der allow_url_fopen-Konfigurationseinstellung mit der file_get_contents()-Funktion kein Zugriff auf entfernte Ressourcen hast. Hier müsstest du unter Umständen die Einstellung ändern (vgl. ini_set()-Funktion) oder aber – falls dein Anbieter eine Änderung nicht zulässt – mit der fsockopen()-Funktion arbeiten.


----------



## stega (13. November 2005)

Warning: fsockopen() has been disabled for security reasons in /usr/export/www/vhosts/funnetwork/hosting/rabioaktiv/inc/news_feed.php on line 3

ne, ich denk, das kann ich mir auf dem Webspace abschmieren, da wird's einfach nicht gehen.... 

aber was ist mit dem zweiten, da wo's schon ausgegeben wird nur halt als endlosschlange? (s.o.) da öffnet er ja den RSS-Feed, nur dass er dann halt alles rausschmeißt, anstelle von geordneten Sachen


----------



## BlackRock (15. Dezember 2009)

Hallo,

den bisherigen Usern, insbesondere stega und Gumbo möchte ich für die Ideen danken. Ich habe eine Lösung gefunden. Der Befehl simpleXML_Load_File ist falsch. Richtig ist new SimpleXMLElement. Das von Gumbo geschriebene Skript lautet abgewandelt wie folgt:


----------



## BlackRock (15. Dezember 2009)

<?php
$filename = 'http://www.RSS-URL&_render=rss';
$xml = new SimpleXMLElement($filename, NULL, TRUE);
echo $xml->asXML();
?>


----------

