Gibt es eine Möglichkeit, externe Webdienste zu nutzen und Ergebnisse in Ansichten anzuzeigen?

11

Ich habe einen externen Webdienst, auf den über einen HTTP-Aufruf zugegriffen werden kann (wobei Parameter als Abfragezeichenfolge übergeben werden) und der das Ergebnis im XML-Format zurückgibt.

Ich möchte Drupal verwenden, um auf diesen Webdienst (mit den gewünschten Parametern) zuzugreifen und das Ergebnis mithilfe von Ansichten anzuzeigen.

Dies ist eine Beispielabfrage und das Ergebnis des von mir verwendeten Webdienstes.

Abfrage: http: //localhost/query.php? Cy = in & q = abcd & cat = 22
Ergebnis:

<?xml version="1.0"?>
<results>
<Jobs>
    <Job ID="111">
        <Title>Test one</Title>
        <Summary>Test one summary</Summary>
        <DateUpdated Date="2011-04-04 18:03:00">4/4/2011</DateUpdated>
        <Location>
            <Country>India</Country>
            <City>Delhi</City>
        </Location>
        <CompanyName>Test Company</CompanyName>
    </Job>
    <Job ID="222">
        <Title>Test two</Title>
        <Summary>Test two summary</Summary>
        <DateUpdated Date="2011-04-04 18:03:00">4/4/2011</DateUpdated>
        <Location>
            <Country>India</Country>
            <City>Chennai</City>
        </Location>
        <CompanyName>Test company</CompanyName>
    </Job>
</Jobs> 
</results>  
Mugunth
quelle

Antworten:

4

Die empfohlenen Lösungen basieren darauf, dass die Daten zuerst in die Datenbank übernommen und dann in Ansichten angezeigt werden.

Eine Alternative besteht darin, den Dienst mithilfe eines benutzerdefinierten Abfrage-Backends direkt in Ansichten abzufragen. Unter http://drupal.org/node/958270 finden Sie Links zu benutzerdefinierten Backends, die Sie als Beispiel für das Schreiben eigener Backends verwenden können (es ist nicht viel Arbeit).

Bojan Zivanovic
quelle
Sicher, aber die Vorteile, die Daten zuerst in die Datenbank zu bekommen, sind mehr als nur Einfachheit. Es bedeutet auch, die Daten zwischenzuspeichern. Das Abfragen eines lokalen Datenspeichers ist immer schneller als ein externer Dienst.
Alex Weber
Aber drupal.org/node/958270 ist mit Views3.0 verwenden. Gibt es eine Möglichkeit, Views 3.0 nicht zu verwenden und die Daten auch nicht in db zu speichern? Verbrauchen Sie einfach den Webservice in Echtzeit und zeigen Sie die Daten auf der Seite an.
Das ist natürlich selbstverständlich.
Bojan Zivanovic
Nein. Views 2 ist
fast
@Alex: Sie können Views 3 mit einem externen Webservice verwenden und die Ergebnisse trotzdem zwischenspeichern.
Daniel
3

Das Feeds- Modul kann Inhalte abrufen und in Knoten umwandeln. Feeds Mit XPath Parser können Sie die XML-Datei analysieren und Tags Feldern zuordnen. Sie können dann Ansichten verwenden, um den Inhalt wie gewohnt anzuzeigen.

Carolyn
quelle
1

Ich bin mir sicher, dass es eine elegantere Lösung gibt, aber ich habe dies in der Vergangenheit mit Twitter-Feeds getan und es funktioniert einwandfrei. Hier ist meine Meinung dazu:

  • Erstellen Sie einen Inhaltstyp, um Ihre Ergebnisse zu speichern, und richten Sie nach Bedarf Felder ein, die dem Inhalt entsprechen, den Sie verbrauchen
  • Erstellen Sie ein Modul, das hook_cron () implementiert, den Webdienst regelmäßig verwendet und die Ergebnisse als Knoten speichert

Der zweite Schritt kann durch programmgesteuertes Erstellen der Knoteninstanzen erreicht werden:

$node = new stdClass();
$node->title = 'title';
$node->my_custom_field['und'][0]['value'] = 'my custom value';
// fill all your other fields
node_save($node);
  • Der beste Weg, um Doppelarbeit beim programmgesteuerten Erstellen der Knoten zu vermeiden, besteht darin, die ID (oder den Zeitstempel oder was auch immer) der Ergebnisse des Webdienstes mit dem neuesten Eintrag in der Datenbank zu vergleichen:
SELECT fdfpi.field_picture_id_value FROM field_data_field_picture_id fdfpi INNER JOIN node n ON fdfpi.entity_id = n.nid AND fdfpi.entity_type = 'node' WHERE n.type = 'picture' ORDER BY n.created DESC LIMIT 1

Das obige Beispiel kann etwas verwirrend wirken, ist aber nicht wirklich: Ich habe einen Inhaltstyp "Bild" erstellt, der ein benutzerdefiniertes Feld "Bild_ID" enthält. Dies ist nur eine manuelle Methode zum Abrufen der ID für den zuletzt erstellten Knoten dieses Typs.

  • Nun, da Sie einen bestimmten Inhaltstyp haben, den Sie automatisch nach Cron-Zeit ausfüllen ... profitieren Sie! Sie können Ansichten verwenden, um die Daten nach Belieben anzuzeigen, da sie in Form von regulären alten Drupal-Knoten vorliegen! :) :)

Hoffe das hilft!

Alex Weber
quelle