Preciso usar o Drupal como cliente para um serviço da Web, para extrair dados e mostrá-los em uma exibição ou como conteúdo. (O formato utilizado é JSON ou REST.)
Eu uso um módulo Cliente de Serviço da Web no Drupal 7 e o módulo Serviços no Drupal 6, mas não sei como usá-los. Li a documentação, mas não obtive nenhum resultado.
Alguém pode ajudar nessa questão ou me dizer como usar esses módulos? Existe algum outro módulo para esse fim?
Uma solução possível: encontro um módulo chamado XML VIEWS, mas este módulo converte apenas arquivos XML.
Agora, estou programando neste módulo para converter o JSON em XML.
Nestes arquivos: xml_views_plugin_query_xml.inc
Nesta função: Execute
Alguém tem outra solução?
Respostas:
O Drupal possui funções específicas que podem ajudar na comunicação com um serviço da Web e no tratamento da entrada JSON.
O Drupal 7 tem as seguintes funções:
rawurlencode()
cadeia de caracteres -d.Com essas funções, você pode escrever seu próprio módulo personalizado para fazer solicitações a um site que implemente um serviço da Web.
Se houver algumas restrições sobre o número de solicitações que podem ser feitas ao servidor da web, você poderá usar as funções do Drupal para armazenar em cache o resultado obtido no servidor da web:
Observe que o Drupal suporta mais de uma bandeja de cache e os módulos podem usar suas próprias caixas de cache, quando necessário.
O Drupal também suporta itens de cache que são removidos automaticamente com o furto sucessivo de cache (consulte a descrição para a constante CACHE_TEMPORARY ). Implementando hook_flush_caches () , os módulos permitem que os usuários administradores limpem o cache usado pelo módulo quando o botão "Limpar" na página "Desempenho" é clicado ou sempre que um módulo chama drupal_flush_all_caches () .
No Drupal 7, os dados de cache dos dados usados com frequência estão associados a uma variável estática tratada com drupal_static () . Quando os dados são realmente usados com frequência na saída da mesma página, um código semelhante ao seguinte é usado:
O código faz parte de module_implements () .
fonte
Toda vez que preciso consumir um serviço da web, acabei de criar uma classe PHP baseada em file_get_contents ou enrolar em conjunto com json_decode ou simplexml_load_string .
A classe é acessada em um módulo por meio de uma função getter que usa drupal_static , ou o
$static
padrão do Drupal 6.Eu então uso isso dentro de meus blocos personalizados, retornos de chamada de menu etc., conforme necessário.
EDITAR
A resposta de @ kiamlaluno está correta e demonstra uma maneira de fazer isso por meio da API Drupal. A principal razão pela qual não faço isso é porque prefiro abstrair a classe de serviço da web de uma maneira que me permita usá-la em outros aplicativos. Existem vantagens e desvantagens nisso, portanto pesa suas opções.
fonte