Hämta XML-data med Xpath & Curl från RSS-flöde
2009-05-31 @ 17:24Introduktion
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.
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
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!