So, ich habe das ganze doch mithilfe von Simplepie lösen können. Für alle, die jemals RSS-Feeds per Simplepie einbinden wollen, welche ev:location, ev:startdate und ev:enddate enthalten, also Event-Feeds sind, hier meine Lösung.
So sieht der RSS-Feed ungefähr aus:
PHP-Code:
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:ev="URL ZUM EV-KRAM FÜR UNTEN" xmlns:georss="http://www.georss.org/georss">
<item>
<title>Event</title>
<link>Link zum Event</link>
<ev:startdate>2010-04-06T22:29:00+02:00</ev:startdate>
<ev:enddate>2010-04-06T22:29:00+02:00</ev:enddate>
<ev:location>Blub-Center, Straße, 99089 Erfurt, Germany</ev:location>
<atom:summary>
<![CDATA[Das ist ein Event, das in ganz toller Atmosphäre mit kraßen Gästen stattfindet.]]>
</atom:summary>
</item>
So fängt obligatorisch die Abfrage an:
PHP-Code:
<?php
require_once('pfad/zu/simplepie.inc');
$feed = new SimplePie();
$feed->set_feed_url('http://url-des-feeds/');
$feed->init();
$feed->handle_content_type();
Und nun geht der Spaß los. Als erstes das Start-Datum:
PHP-Code:
/*
Scan, Explode und Ausgabe vom Tag ev:startdate
*/
$startdate = $item->get_item_tags('HIER STEHT DIE URL VOM EV-KRAM/', 'startdate'); //Scan
$startdate = explode ('T', $startdate[0][data]); //den kryptischen Array auf das Datum beschränken
$startdate = explode('-', $startdate[0]); //Tag, Monat, Jahr aus dem Array werden exploded
echo $startdate[2].".".$startdate[1].".".$startdate[0]; //Ausgabe von Tag, Monat, Jahr in deutscher Reihenfolge
Das gleiche machen wir mit dem End-Datum. Zusätzlich überprüfen wir aber, ob das Enddatum überhaupt vorhanden ist. Eigentlich muss es der ev-Kovention immer da sein, aber dem trau ich nicht. Und wenn es ein eintägiges Event ist, dann ist gem. der ev-Konvention das End-Datum gleich dem Startdatum. Sollte das der Fall sein, wird das Enddatum gar nicht ausgegeben. Eine Ausgabe allá "06.04.2010 - 06.04.2010" hat einfach keinen Sinn.
PHP-Code:
/*
Scan, Explode und Ausgabe vom Tag ev:enddate, sofern vorhanden und nicht gleich dem Startdate
*/
$enddate = $item->get_item_tags('HIER STEHT DIE URL VOM EV-KRAM/', 'enddate'); //Scan
if(isset($enddate)) //Wenn enddate vorhanden...
{
$enddate = explode ('T', $enddate[0][data]); //den kryptischen Array auf das Datum beschränken
$enddate = explode('-', $enddate[0]);//Tag, Monat, Jahr aus dem Array werden exploded
if($startdate != $enddate) echo " - ".$enddate[2].".".$enddate[1].".".$enddate[0];//Ausgabe von Tag, Monat, Jahr in deutscher Reihenfolge
}
Jetzt kümmern wir uns um den Ort. Wie oben zu sehen ist das Standart-Format "Name der Location, Straße Nr., PLZ Ort, Land". Für meine Zwecke will ich nur den Ort ausgeben lassen.
PHP-Code:
/*
Scan, Explode und Ausgabe vom Tag ev:location
*/
$location = $item->get_item_tags('HIER STEHT DIE URL VOM EV-KRAM/', 'location');//Scan
if(isset($location))
{
$location = explode(', ',$location[0][data]);//Explode von Name, Straße, Ort, Land in ein Array
if(preg_match('#[0-9]{5}(.+)[^0-9]#',$location[2])>0) //Gibts ne PLZ im Array-Wert [2]?
{
echo ",".substr($location[2],5); //Ausgabe des Stringwerts ohne PLZ
}
else
{
echo ",".$location[2]; // Ausgabe des Stringwerts da keine PLZ vorhanden
}
}
?>
Die "URL VOM EV-KRAM" ist bei mir
[Zur Link-Ansicht bitte registrieren.]
Am Ende steht alles so da:
06.04.2010, Erfurt
oder
06.04.2010 - 08.04.2010, Erfurt
Je nachdem, welche Daten man vom Feed bekommt.