it-swarm-es.com

¿Hay alguna manera de consumir servicios web externos y mostrar resultados en Vistas?

Tengo un servicio web externo, al que se puede acceder mediante una llamada HTTP (con parámetros pasados ​​como cadena de consulta), y que devuelve el resultado en formato XML.

Me gustaría usar Drupal para acceder a ese servicio web (con los parámetros deseados) y mostrar el resultado usando Vistas.

Estas son una consulta de muestra y el resultado obtenido del servicio web que estoy usando.

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

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

Las soluciones recomendadas se basan en obtener primero los datos en la base de datos y luego mostrarlos en Vistas.

Una alternativa es consultar el servicio directamente desde Vistas, utilizando un backend de consulta personalizado. Checkout http://drupal.org/node/95827 para enlaces a backends personalizados que puedes usar como ejemplo para escribir el tuyo (no es mucho trabajo)

4
Bojan Zivanovic

El módulo Feeds puede extraer contenido y convertirlo en nodos. Feeds XPath Parser le permitirá analizar el archivo xml y asignar etiquetas a los campos. Luego puede usar Vistas para mostrar el contenido de manera normal.

3
Carolyn

Estoy seguro de que hay una solución más elegante, pero lo he hecho en el pasado con los feeds de Twitter y funciona bien. Aquí está mi opinión al respecto:

  • Cree un tipo de contenido para almacenar sus resultados y configure los campos según sea necesario para que coincida con el contenido que consumirá
  • Cree un módulo que implemente hook_cron () y periódicamente consuma el servicio web y almacene los resultados como nodos

El segundo paso se puede lograr mediante la creación programática de las instancias de 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);
  • La mejor manera de evitar la duplicación al crear los nodos mediante programación sería comparar la ID (o marca de tiempo, o lo que sea) de los resultados del servicio web con la entrada más reciente en la base de datos:
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

El ejemplo anterior puede parecer un poco confuso, pero en realidad no lo es: creé un tipo de contenido "picture" que tiene un campo personalizado "picture_id". Es solo una forma manual de recuperar la ID para el nodo de ese tipo creado más recientemente.

  • Entonces, ahora que tiene un tipo de contenido específico que completa automáticamente en tiempo cron ... ¡beneficio! Puede usar Vistas para mostrar los datos de la forma que desee, ya que está en forma de ol 'Drupal nodos! :)

¡Espero que esto ayude!

1
Alex Weber