• Aktualisierte Forenregeln

    Eine kleine Änderung hat es im Bereich Forenregeln unter Abschnitt 2 gegeben, wo wir nun explizit darauf verweisen, dass Forenkommentare in unserer Heftrubrik Leserbriefe landen können.

    Forenregeln


    Vielen Dank

XML-Feed: Formatierung der Zeitangabe

B

bigfraggle

Gast
Hallo,

ich versuche gerade einen XML-Feed als Ticker auf meiner Homepage einzubauen. Habe da mit miniXML auch ein Skript, mit dem das grundsätzlich problemlos funktioniert.

Jetzt aber zum Problem: Jedes Item im Feed hat einen Eintrag <pubDate>, dem Erstellungsdatum des Items. Leider ist das Format für mich nicht ganz zu gebrauchen. Beispiel:

<pubDate>Fri, 12 Jan 2007 04:42:15 -0800</pubDate>

Gibt es eine Möglichkeit, die Ausgabe von pubDate anders zu formatieren? Vielleicht einfach nur "12.01.2007"?

Die Standardausgabe erfolgt mit

echo $item['pubDate'];

Gruß & Danke im Voraus
bigfraggle
 
Grandios. :)
Danke.

Weißt du zufällig auch, wie man die Anzeige des Feeds auf die ersten x Items beschränken kann?

Momentan sieht die Ausgabefunktion so aus:

foreach ($arr['rss']['channel']['item'] as $item) {if ($item['title']) echo date("d.m.Y",strtotime($item['pubDate']))." <a href='".$item['link']."'>".$item['title']."</a>";}

Gruß
bigfraggle
 
bigfraggle am 13.01.2007 10:04 schrieb:
Weißt du zufällig auch, wie man die Anzeige des Feeds auf die ersten x Items beschränken kann?

Na ja - vielleicht so:

Code:
for ($i=0;$i<[b]5[/b];$i++) { 
 if ($arr['rss']['channel']['item'][$i]['title']) {
  echo date("d.m.Y",
        strtotime($arr['rss']['channel']['item'][$i]['pubDate'])).
       " <a href='".$arr['rss']['channel']['item'][$i]['link']."'>".
       $arr['rss']['channel']['item'][$i]['title']."</a>";
 }
}

Kommt drauf an ob die Werte im Array $arr['rss']['channel']['item'] assoziative oder numerische Schluessel haben.
 
Dank dir erstmal soweit, es funktioniert. :)

Habe eigentlich gehofft, mit der Beschränkung auf x Elemente eine Verbesserung der Performance erziehlen zu können. Ich nutze wie gesagt miniXML, aber im Vergleich zu anderen Tickern, die ich damit eingebunden habe, hat dieser hier ne recht lange Ladezeit:
http://www.xboxaktuell.de/rss_test3.php

Die ursprüngliche RSS-Seite ist dagegen relativ flott da:
http://www.youtube.com/rss/user/XboxAktuell/videos.rss

<?php
include_once "minixml.inc.php";
$data = new MiniXMLDoc();
$data->fromString(implode("",file("http://www.youtube.com/rss/user/XboxAktuell/videos.rss")));
$arr = $data->toArray();
echo "<a href='".$arr['rss']['channel']['link']."'>".
$arr['rss']['channel']['title']."</a> - ".
$arr['rss']['channel']['description']."<br><br><marquee>";

for ($i=0;$i<1;$i++) {if ($arr['rss']['channel']['item'][$i]['title']) { echo date("d.m.Y",strtotime($arr['rss']['channel']['item'][$i]['pubDate']))." <a href='".$arr['rss']['channel']['item'][$i]['link']."'>".$arr['rss']['channel']['item'][$i]['title']."</a> + + + "; }}

echo "</marquee>";
?>

Irgendeine Idee?
 
bigfraggle am 22.01.2007 12:58 schrieb:
Dank dir erstmal soweit, es funktioniert. :)

Habe eigentlich gehofft, mit der Beschränkung auf x Elemente eine Verbesserung der Performance erziehlen zu können. Ich nutze wie gesagt miniXML, aber im Vergleich zu anderen Tickern, die ich damit eingebunden habe, hat dieser hier ne recht lange Ladezeit:
http://www.xboxaktuell.de/rss_test3.php

Die ursprüngliche RSS-Seite ist dagegen relativ flott da:
http://www.youtube.com/rss/user/XboxAktuell/videos.rss


Irgendeine Idee?


Hallo,
weniger Elemente auszugeben bringt insofern nichts, als dass nur weniger ausgegeben wird - der Feed wird aber nach wie vor komplett vom Youtube-Server geladen. Das ist diese Zeile:
Code:
$data->fromString(implode("",file("...")));
Dass das langsamer geht als das Laden von Feeds von anderen Servern, liegt wahrscheinlich an der hoehreren Last des Youtube-Servers im Gegensatz zu den anderen (der Feed laedt in meinem Browser auch recht langsam).
Die einzige Moeglichkeit, die mir einfallen wuerde, um die Ladezeit in den meisten Faellen zu verringern, waere, den Youtube-Feed lokal zu cachen und nur nach einer bestimmten Zeitspanne neu zu laden. Das koennte zum Beispiel so gehen:
Code:
<?php
$url = "http://www.youtube.com/rss/user/XboxAktuell/videos.rss";
$local = "./cached-feed.rss";
$cachetime = 10; // minutes
if (!file_exists($local) || 
    (filemtime($local)+$cachetime*60) < time()) {
 copy($url,$local);
}

// weiter mit $local
?>
 
Danke, dass mit dem Zwischenspeichern ist ne gute Idee.
Ändert aber leider auch nichts am Tempo. Ich denke mal, der Feed ist wirklich einfach von Haus aus zu lang... :-S

Und künstlich kürzen (auch in der lokalen Datei zum Zwischenspeichern) geht ja denke ich mal nicht.
 
bigfraggle am 23.01.2007 16:18 schrieb:
Ändert aber leider auch nichts am Tempo. Ich denke mal, der Feed ist wirklich einfach von Haus aus zu lang... :-S

Du kannst ja einen Cronjob anlegen, der den Feed von Zeit zu Zeit aktualisiert - dann merkt der Benutzer nichts von der Ladezeit (wenn du keine Moeglichkeit hast, Cronjobs auf deinem Server auszufuehren, nimm zB. http://www.cronjob.de und lass' das obige Skript abrufen). Wenn du das alle 5 Minuten machen laesst, duerfte niemand was davon merken - außerdem kannst du immer noch manuell aktualisieren, indem du das Skript von Hand aufrufst.
 
Hm, hört sich interessant an. Wie binde ich das "Ergebniss" des Cronjobs denn auf der HP ein?
 
bigfraggle am 25.01.2007 14:04 schrieb:
Hm, hört sich interessant an. Wie binde ich das "Ergebniss" des Cronjobs denn auf der HP ein?

Gar nicht. Du hast zwei Skripte: eins, das - vom Cronjob oder auch mal manuell ausgefuehrt - den Feed von Youtube auf deinen Server kopiert. Das zweite liest dann direkt aus der lokalen Datei und zeigt den Feed an.
 
Meinst du, dass das Vorteile in der Geschwindigkeit bringt? Ist doch - so wie ich das sehe - nichts anderes, als wenn ich den Feed wie oben von dir beschrieben quasi manuel auf meinem Server cache... Oder?
 
bigfraggle am 29.01.2007 13:00 schrieb:
Meinst du, dass das Vorteile in der Geschwindigkeit bringt? Ist doch - so wie ich das sehe - nichts anderes, als wenn ich den Feed wie oben von dir beschrieben quasi manuel auf meinem Server cache... Oder?

Insofern hast du Recht. Nur: die Seite, die den Feed anzeigt, und deren Ladezeit der Nutzer ja letztlich nur mitbekommt, laedt dann schneller, da nur noch eine Datei von der Platte des Servers geoeffnet wird. Allerdings kann es dann natuerlich sein, dass der Nutzer nicht die neuesten Inhalte zu sehen bekommt, da der Feed auf der Festplatte noch nicht aktualisiert wurde (vom Cronjob). Eine zweischneidige Sache also.
 
Zurück