Existe uma maneira de consumir serviços da Web externos e mostrar resultados no Views?

11

Eu tenho um serviço da web externo, que pode ser acessado usando uma chamada HTTP (com parâmetros passados ​​como string de consulta) e que retorna o resultado no formato XML.

Gostaria de usar o Drupal para acessar esse serviço da web (com os parâmetros desejados) e exibir o resultado usando o Views.

Essa é uma consulta de amostra e o resultado obtido do serviço da web que estou 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>  
Mugunth
fonte

Respostas:

4

As soluções recomendadas são baseadas em colocar os dados no banco de dados primeiro e depois mostrá-los no Views.

Uma alternativa é consultar o serviço diretamente do Views, usando um backend de consulta personalizado. Confira http://drupal.org/node/958270 para obter links para back-end personalizados que você pode usar como exemplo para escrever seus próprios (não é muito trabalhoso)

Bojan Zivanovic
fonte
Claro, mas as vantagens de colocar os dados no banco de dados primeiro são mais do que apenas simplicidade, isso também significa armazenar em cache os dados. Consultar um armazenamento de dados local é sempre mais rápido que um serviço externo.
Alex Weber
Mas, drupal.org/node/958270 é com o uso do Views3.0. Alguma maneira de não usar o Views 3.0 e também sem a necessidade de salvar os dados no db? Basta consumir o serviço da web em tempo real e exibir dados na página.
Claro, isso é desnecessário.
Bojan Zivanovic
N.º Visualizações 2 está muito próximo fim-de-vida, para que todos os novos recursos estão em Visualizações 3.
Bojan Zivanovic
@ Alex: você pode usar o Views 3 com um serviço da Web externo e ainda armazenar em cache os resultados.
precisa saber é o seguinte
3

O módulo Feeds pode extrair conteúdo e transformá-lo em nós. Feeds O XPath Parser permitirá analisar o arquivo xml e mapear as tags nos campos. Você pode usar o Views para exibir o conteúdo normalmente.

Carolyn
fonte
1

Tenho certeza de que há uma solução mais elegante por aí, mas já fiz isso no passado com feeds do twitter e funciona muito bem. Aqui está a minha opinião:

  • Crie um tipo de conteúdo para armazenar seus resultados e configure os campos conforme necessário para corresponder ao conteúdo que você consumirá
  • Crie um módulo que implemente hook_cron () e consuma periodicamente o serviço da web e armazene resultados como nós

A segunda etapa pode ser alcançada criando programaticamente as instâncias do nó:

$node = new stdClass();
$node->title = 'title';
$node->my_custom_field['und'][0]['value'] = 'my custom value';
// fill all your other fields
node_save($node);
  • A melhor maneira de evitar duplicação ao criar os nós de maneira programática seria comparar o ID (ou carimbo de data / hora ou o que for) dos resultados do serviço da Web com a entrada mais recente no banco de dados:
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

O exemplo acima pode parecer meio confuso, mas não é realmente: eu criei um tipo de conteúdo "imagem" que possui um campo personalizado "imagem_id". É apenas uma maneira manual de recuperar o ID para o nó criado mais recentemente desse tipo.

  • Então agora que você tem um tipo de conteúdo específico que preenche automaticamente no horário do cron ... lucro! Você pode usar o Views para exibir os dados da maneira que desejar, porque está na forma de nós Drupal regulares! :)

Espero que isto ajude!

Alex Weber
fonte