Externe XML-Datei regelmäßig einlesen und darstellen
am 03.09.2008 - 09:18 Uhr in
Ein externer Server bietet ständig aktualisierte XML-Dateien (keine Feeds) an.
Ich möchte nun manche Inhalte aus diesen Dateien auf meiner Drupal-Website darstellen. Drupal soll sich also zB alle 24 Std. eine neue Version der XML-Datei holen und dann den Inhalt visuell ausgeben (und zwar den Inhalt, der sich zwischen bestimmten Tags befindet, die ich angebe; die Struktur der XML-Dateien ändert sich nie).
Nur, ich habe keinen blassen Schimmer von XML. Wie bekomme ich Inhalte in einen Block bzw. Node?
Ist das überhaupt so machbar?
Und wie schaut es mit der Performance aus? Was, wenn der externe Server mal lahmt: wird meine Seite dann gar nicht ausgegeben? Oder kann man das so regeln, dass halt nur die speziellen Inhalte fehlen aber die Seite an sich angezeigt wird?
- Anmelden oder Registrieren um Kommentare zu schreiben
Was mir gerade einfällt
am 04.09.2008 - 08:47 Uhr
... das mit der Performance dürfte sich ja erübrigen, weil das ja der Cronjob machen könnte. Er holt sich einmalig die aktuellen Daten und ab da wird dieser Datenstand angezeigt bis Cron wieder zuschlägt. Oder geht das nicht?
Es gibt ja das Aggregator-Modul... verträgt das wirklich nur Feeds oder vielleicht auch jegliches sonstiges XML?
hi phnad,
am 04.09.2008 - 09:18 Uhr
hi phnad,
schau dir mal die Module FeedAPI (http://drupal.org/project/feedapi) und Feed Element Mapper (http://drupal.org/project/feedapi_mapper) an. Damit habe ich auch schon mal rumprobiert. Damit sollte es möglich sein die Inhalte einer XML datei (per cron) auslesen zu lassen und Felder aus dieser XML datei in Felder eines entsprechenden CCK-Inhalttyps zu speichern. Hat bei mir geklappt, wenn auch nicht ganz fehlerfrei.
lg Morgenstern
edit: XML content (http://drupal.org/project/xmlcontent) wäre sonst auch noch ne Möglichkeit.
Hey Morgenstern,
am 04.09.2008 - 10:17 Uhr
danke für deine Hilfe.
Ich habe mir gerade mal den Screencast zum Feed Element Mapper angeschaut. Was ich jetzt noch nicht so recht verstanden habe:
kann ich dieses Spielchen auch mit einem ganz normalen, bestehenden Node machen? Also, aus der XML-Quelle die vorhandenen XML-Tags auswählen und dann sagen: zeig mir den Inhalt auf /node/42 an und zwar an der und der Stelle. Weil, im Video hat er ja den Feed importiert und dann schien es mir, als ob all die Seiten automatisch angelegt wurden.
in Felder eines entsprechenden CCK-Inhalttyps zu speichern.
Bedeutet das, dass es nur beim Erstellen des Nodes greift (was also gerade zu dem Zeitpunkt in der XML-Datei steht, wird im Node verewigt), oder aktualisiert sich das Spielchen dann stetig (nach Cron), während der Node auch schon veröffentlicht ist?
wenn ich das richtig
am 04.09.2008 - 10:36 Uhr
wenn ich das richtig verstanden habe dann erstellt das modul mehrere Nodes. Angenommen du hast folgende XML-Struktur:
<buch id="1">
<autor>Hans Meier</autor>
<titel>Meiers Autobiografie</titel>
<seiten>121</seiten>
</buch>
<buch id="2">
<autor>Charlotte Müller</autor>
<titel>Blumen im Garten</titel>
<gewicht>234</gewicht>
</buch>
<buch id="2">
<autor>Alfred Müller</autor>
<titel>In vino veritas</titel>
<gewicht>92</gewicht>
</buch>
Daraus würde das Modul dann drei nodes machen und die drei Felder (autor, titel, gewicht) in entsprechende CCK Felder einfügen (sofern diese vorhanden sind und du das richtig eingestellt hast). Also beispielsweise:
[xml] titel -> [drupal] node title field
[xml] autor -> [drupal] cck text field 'autor'
[xml] gewicht -> [drupal] cck number field 'gewicht'
Dafür müsstest du natürlich vorher einen CCK-Inhaltstyp (z.B. 'buch') mit den entsprechenden Feldern anlegen. Anzeigen lassen kannst du dir die nodes dann ganz bequem mit views.