WordPress stellt zu jeder Kategorie einen RSS 2.0 Feed zur Verfügung. Man muss dazu nur die Permalink-URL gefolgt von einem /feed/
eingeben.
Beispiel: https://www.bennyn.de/downloads/
RSS-Feed: https://www.bennyn.de/downloads/feed/
Alternativ: https://www.bennyn.de/downloads/?feed=rss2
Das Datum des jeweiligen Feed-Eintrags wird nach RFC822 Spezifikation angegeben (Beispiel: Sun, 06 Sep 2009 16:10:34 +0000
). In der Programmiersprache PHP habe ich eine Funktion geschrieben, die dieses Format in ein MySQL-kompatibles DATETIME umwandelt.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <?php function rss_to_sql_datetime($rss_datetime) { $string = $rss_datetime; $day = substr($string, 5,2); $month = substr($string, 8,3); $year = substr($string,12,4); $time = substr($string,17,8); $week_map = array( 'Jan' => '01' ,'Feb' => '02' ,'Mar' => '03' ,'Apr' => '04' ,'May' => '05' ,'Jun' => '06' ,'Jul' => '07' ,'Aug' => '08' ,'Sep' => '09' ,'Oct' => '10' ,'Nov' => '11' ,'Dec' => '12' ); $datetime = $year.'-'.$week_map[$month].'-'.$day.' '.$time; return $datetime; } $rss_datetime = 'Sun, 01 May 2011 21:30:45 +0000'; $sql_datetime = rss_to_sql_datetime($rss_datetime); echo $sql_datetime; // 2011-05-01 21:30:45 ?> |
Wie Björn in den Kommentaren bemerkt hat, nimmt meine Funktion keine Rücksicht auf die Zeitzone des jeweiligen Eintrags. Um das zu erreichen, könnte man die ab PHP5 verfügbare DateTime-Klasse verwenden:
1 2 3 4 5 6 7 8 9 10 11 12 | <?php date_default_timezone_set('Europe/Berlin'); $rss_datetime = 'Sun, 01 May 2011 21:30:45 +0200'; $dateTime = new DateTime($rss_datetime); $timeZone = $dateTime->getTimezone(); echo 'DateTimeZone::getName(): '.$timeZone->getName(); echo 'DateTime::getTimestamp(): '.$dateTime->getTimestamp(); echo 'DateTime::format(): '.$dateTime->format('d.m.Y H:i:S'); echo 'date(): '.date('d.m.Y H:i:s',$dateTime->getTimestamp()); ?> |
Deine Funktion hat ein Manko, du ignorierst die Zeitzone
noch n Nachtrag, warum überhaupt ne eigene Funktion? Geht auch mit PHP-Boardmitteln zB. für PHP5:
einfach mal die default_timezone umschalten, dann siehst du bei der Ausgabe von date() warum die Timezone so wichtig ist.
getTimezone();
echo ‚DateTimeZone::getName(): ‚.$timeZone->getName();
echo ‚DateTime::getTimestamp(): ‚.$dateTime->getTimestamp();
echo ‚DateTime::format(): ‚.$dateTime->format(‚d.m.Y H:i:s‘);
echo ‚date(): ‚.date(‚d.m.Y H:i:s‘,$dateTime->getTimestamp());
?>
ups da fehlte die hälfte
getTimezone();
echo ‚DateTimeZone::getName(): ‚.$timeZone->getName();
echo ‚DateTime::getTimestamp(): ‚.$dateTime->getTimestamp();
echo ‚DateTime::format(): ‚.$dateTime->format(‚d.m.Y H:i:s‘);
echo ‚date(): ‚.date(‚d.m.Y H:i:s‘,$dateTime->getTimestamp());
?>
warum schneidet der die hälfte der Nachricht ab?