web-dev-qa-db-fra.com

Existe-t-il un moyen de consommer des services Web externes et d'afficher les résultats dans les vues?

J'ai un service Web externe, auquel on peut accéder à l'aide d'un appel HTTP (avec des paramètres passés comme chaîne de requête), et qui renvoie le résultat au format XML.

Je souhaite utiliser Drupal pour accéder à ce service Web (avec les paramètres souhaités) et afficher le résultat à l'aide de Views.

Il s'agit d'un exemple de requête et du résultat obtenu à partir du service Web que j'utilise.

Requête: http: //localhost/query.php? Cy = in & q = abcd & cat = 22
Résultat:

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

Les solutions conseillées sont basées sur la première introduction des données dans la base de données, puis sur leur affichage dans les vues.

Une alternative consiste à interroger le service directement à partir de Views, en utilisant un backend de requête personnalisé. Checkout http://drupal.org/node/95827 pour les liens vers des backends personnalisés que vous pouvez utiliser comme exemple pour écrire le vôtre (ce n'est pas beaucoup de travail)

4
Bojan Zivanovic

Le module Feeds peut extraire du contenu et le transformer en nœuds. Feeds XPath Parser vous permettra d'analyser le fichier xml et de mapper les balises aux champs. Vous pouvez ensuite utiliser des vues pour afficher le contenu normalement.

3
Carolyn

Je suis sûr qu'il existe une solution plus élégante, mais je l'ai déjà fait avec des flux Twitter et cela fonctionne très bien. Voici mon point de vue:

  • Créez un type de contenu pour stocker vos résultats et configurez les champs nécessaires pour correspondre au contenu que vous consommerez
  • Créez un module qui implémente hook_cron () et consomme périodiquement le service Web et stocke les résultats sous forme de nœuds

La deuxième étape peut être réalisée en créant par programmation les instances de nœud:

$node = new stdClass();
$node->title = 'title';
$node->my_custom_field['und'][0]['value'] = 'my custom value';
// fill all your other fields
node_save($node);
  • La meilleure façon d'éviter la duplication lors de la création des nœuds par programmation serait de comparer l'ID (ou l'horodatage, ou autre) des résultats du service Web à l'entrée la plus récente de la base de données:
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'exemple ci-dessus peut sembler un peu déroutant mais ce n'est pas vraiment: j'ai créé un type de contenu "image" qui a un champ personnalisé "image_id". C'est juste un moyen manuel de récupérer l'ID du dernier nœud créé de ce type.

  • Alors maintenant que vous avez un type de contenu spécifique que vous remplissez automatiquement au moment du cron ... profit! Vous pouvez utiliser les vues pour afficher les données comme vous le souhaitez, car elles se présentent sous la forme de nœuds ol 'Drupal! :)

J'espère que cela t'aides!

1
Alex Weber