Hämta XML-data med Xpath & Curl från RSS-flöde

2009-05-31 @ 17:24

Introduktion

Det finns flera sätt att hämta och hantera XML-data från en RSS-feed i PHP. Ett sätt att hantera datan, för att exempelvis hämta ut endast rubrikerna, är att använda explode-funktionen i PHP. Nackdelen med explode är att det kan bli mycket och förvirrande kod tillslut. Xpath är därför mer rekommenderat för den här typen av problem.

Alla servrar stödjer inte simplexml_load_file, men det går att hämta ut dessa med Curl istället, som ska vara betydligt säkrare. Loopia är ett webbhotell som har stöd för Curl.

Exempel

Det exempel jag har skapat hämtar data från en XML-fil från ett RSS-flöde med Xpath. Sedan skrivs rubrikerna ut, då jag valt att hämta just dessa. Filen hämtas med Curl, så se till att det är aktiverat på servern där skriptet körs.

function get_url($url)
{
	$curl = curl_init();
	curl_setopt($curl, CURLOPT_HEADER, 0);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($curl, CURLOPT_URL, $url);
	$data = curl_exec($curl);
	curl_close($curl);
	return $data;
}

function get_url_data()
{
	$xml_content = get_url("http://feeds.aftonbladet.se/?service=rss");
	$dom = new DOMDocument();
	@$dom->loadXML($xml_content);
	$xpath = new DomXPath($dom);
	$content_title = $xpath->query('//channel//title/text()');
	return $content_title;
}

function print_url_data()
{
	$content = get_url_data();
	foreach ($content as $value)
	{
		echo $value->nodeValue . "<br />";
	}
	return $output;
}

print_url_data();

Resultatet

Så här kan resultatet se ut:

En majoritet av GM:s fordringsägare godkänner förslaget
Tog Elitloppet efter turbulent vecka
Den 25-årige egyptiern gillade inte den fru hans föräldrar valt åt honom
"Jag och Jarmo paktade minst"
Svensksuccé i Elitloppet - tränaren Stefan Hultman i glädjetårar
Zlatan gjorde mest mål i italienska serie A
Zlatan målskytt

Slutord

Om det finns ett bättre sätt att skriva det på, lägg en kommentar så kikar jag på det.

RSS-feed för kommentarer

2 svar till “Hämta XML-data med Xpath & Curl från RSS-flöde”

  • Rickard Johnsson »
    2010-01-06 @ 0:30

    Hej Jens. om jag nu vill hämta dom senaste nyheterna från aftonbladet och lägga dom på min sida ..nästan så som det ser ut på aftonbladet.. hur gör man då? då måste man ju gå in och hämta dom exempel 3 senaste artiklarna? eller? maila gärna

  • Fredrik »
    2010-03-03 @ 15:17

    Hej!

    Jag skulle behöva göra just detta fast från en MySQl server på windows. Finns det något motsvarande man kan köra direkt eller på annat sätt från en server som inte kör mer än MySQL. Kanske något script eller liten java?

    Tack på förhand!