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


11

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.

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

Respuestas:


4

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, mediante un backend de consulta personalizado. Consulte http://drupal.org/node/958270 para obtener enlaces a backends personalizados que puede usar como ejemplo para escribir los suyos (no es mucho trabajo)


Claro, pero las ventajas de introducir primero los datos en la base de datos son más que simpleza, también significa almacenar en caché los datos. Consultar un almacén de datos local siempre es más rápido que un servicio externo.
Alex Weber

Pero, drupal.org/node/958270 es con el uso de Views3.0. ¿Alguna forma de no usar Views 3.0 y también sin necesidad de guardar los datos en db? Simplemente consuma el servicio web en tiempo real y muestre los datos en la página.

Por supuesto, eso es evidente.
Bojan Zivanovic

No. Views 2 está muy cerca del final de su vida útil, por lo que todas las nuevas características están en Views 3.
Bojan Zivanovic

@Alex: puede usar Views 3 con un servicio web externo y aún almacenar en caché los resultados.
s.Daniel

3

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 las Vistas para mostrar el contenido de manera normal.


1

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 coincidan con el contenido que consumirá
  • Cree un módulo que implemente hook_cron () y consuma periódicamente 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 nodos Drupal normales! :)

¡Espero que esto ayude!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.