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>
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)
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.
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:
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);
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.
¡Espero que esto ayude!