it-swarm.it

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

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

Vorrei usare 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>  
11
Mugunth

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. Acquista http://drupal.org/node/95827 per i collegamenti a backend personalizzati che puoi usare come esempio per scrivere il tuo (non è molto lavoro)

4
Bojan Zivanovic

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

3
Carolyn

Sono sicuro che esiste 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
  • Crea un modulo che implementa hook_cron () e consuma periodicamente il servizio web e archivia 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é è sotto forma di normali ol 'Drupal! :)

Spero che sia di aiuto!

1
Alex Weber