Esiste un modo per utilizzare servizi Web esterni e mostrare i risultati in Views?


11

Ho un servizio Web esterno, a cui è possibile accedere utilizzando una chiamata HTTP (con parametri passati come stringa di query) e che restituisce il risultato in formato XML.

Vorrei utilizzare Drupal per accedere a quel servizio Web (con i parametri desiderati) e visualizzare il risultato usando Views.

Queste sono una query di esempio e il risultato ottenuto dal servizio Web che sto utilizzando.

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

<?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>  

Risposte:


4

Le soluzioni consigliate si basano innanzitutto sul trasferimento dei dati nel database, quindi sulla loro visualizzazione in Views.

Un'alternativa è eseguire una query sul servizio direttamente da Views, utilizzando un back-end di query personalizzato. Guarda http://drupal.org/node/958270 per i collegamenti a backend personalizzati che puoi usare come esempio per scrivere il tuo (non è un sacco di lavoro)


Certo, ma i vantaggi di inserire prima i dati nel db non sono solo semplicità, significa anche memorizzare nella cache i dati. L'interrogazione di un archivio dati locale è sempre più rapida di un servizio esterno.
Alex Weber,

Ma drupal.org/node/958270 è con l'utilizzo di Views3.0. Un modo per non usare Views 3.0 e anche senza la necessità di salvare i dati in db? Consumare il servizio web in tempo reale e visualizzare i dati sulla pagina.

Certo, questo è ovvio.
Bojan Zivanovic,

No. Views 2 è molto vicino alla fine del ciclo di vita, quindi tutte le nuove funzionalità sono in Views 3.
Bojan Zivanovic

@Alex: è possibile utilizzare Views 3 con un servizio Web esterno e conservare comunque i risultati nella cache.
s

3

Il modulo Feed può estrarre contenuto e trasformarlo in nodi. Feed XPath Parser ti permetterà di analizzare il file xml e mappare i tag nei campi. È quindi possibile utilizzare Viste per visualizzare il contenuto normalmente.


1

Sono sicuro che esista una soluzione più elegante, ma in passato l'ho fatto con i feed di Twitter e funziona perfettamente. Ecco la mia opinione su di esso:

  • Crea un tipo di contenuto per archiviare i risultati e imposta i campi in base alle necessità per abbinare il contenuto che consumerai
  • Creare un modulo che implementa hook_cron () e consuma periodicamente il servizio Web e memorizza i risultati come nodi

Il secondo passaggio può essere ottenuto creando programmaticamente le istanze del nodo:

$node = new stdClass();
$node->title = 'title';
$node->my_custom_field['und'][0]['value'] = 'my custom value';
// fill all your other fields
node_save($node);
  • Il modo migliore per evitare la duplicazione durante la creazione programmatica dei nodi sarebbe quello di confrontare l'ID (o il timestamp, o qualsiasi altra cosa) dei risultati del servizio Web con la voce più recente nel database:
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

L'esempio sopra può sembrare un po 'confuso ma non è proprio: ho creato un tipo di contenuto "picture" che ha un campo personalizzato "picture_id". È solo un modo manuale per recuperare l'ID per il nodo creato più di recente di quel tipo.

  • Quindi ora che hai un tipo di contenuto specifico che compili automaticamente in cron time ... profit! Puoi usare Views per visualizzare i dati nel modo che preferisci perché sono sotto forma di normali nodi Drupal! :)

Spero che questo ti aiuti!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.