Есть ли способ использовать внешние веб-сервисы и показывать результаты в представлениях?

11

У меня есть внешний веб-сервис, доступ к которому можно получить с помощью вызова HTTP (с параметрами, переданными в виде строки запроса), и который возвращает результат в формате XML.

Я хотел бы использовать Drupal для доступа к этому веб-сервису (с нужными параметрами) и отображать результат с помощью Views.

Это пример запроса и результат, полученный от веб-службы, которую я использую.

Запрос: http: //localhost/query.php? Cy = in & q = abcd & cat = 22
Результат:

<?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
источник

Ответы:

4

Предлагаемые решения основаны на том, чтобы сначала поместить данные в базу данных, а затем отобразить их в представлениях.

Альтернативой является запрос сервиса напрямую из Views с использованием пользовательского бэкэнда запроса. Оформить заказ http://drupal.org/node/958270 для ссылок на пользовательские бэкэнды, которые вы можете использовать в качестве примера для написания своих собственных (это не много работы)

Боян Живанович
источник
Конечно, преимущества получения данных в первую очередь в БД - это не просто простота, это также означает кэширование данных. Запрашивать локальное хранилище данных всегда быстрее, чем внешний сервис.
Алекс Вебер
Но drupal.org/node/958270 - это использование Views3.0. Любой способ не использовать Views 3.0, а также без необходимости сохранять данные в БД? Просто используйте веб-сервис в режиме реального времени и отображать данные на странице.
Конечно, это само собой разумеется.
Боян Живанович
Нет. Представления 2 близки к концу, поэтому все новые функции находятся в представлениях 3.
Боян Живанович
@Alex: вы можете использовать Views 3 с внешним Web-сервисом и по-прежнему кэшировать результаты.
s.Daniel
3

Модуль Feeds может извлекать контент и превращать его в узлы. Feeds XPath Parser позволит вам анализировать xml-файл и сопоставлять теги с полями. Затем вы можете использовать представления для отображения содержимого в обычном режиме.

Кэролин
источник
1

Я уверен, что есть более элегантное решение, но я делал это в прошлом с помощью твиттеров, и он прекрасно работает. Вот мой взгляд на это:

  • Создайте тип контента для хранения результатов и при необходимости установите поля, соответствующие контенту, который вы будете использовать.
  • Создайте модуль, который реализует hook_cron () и периодически использует веб-сервис и сохраняет результаты в виде узлов

Второй шаг может быть достигнут путем программного создания экземпляров узла:

$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

Приведенный выше пример может показаться странным, но это не совсем так: я создал тип контента «picture», в котором есть настраиваемое поле «picture_id». Это просто ручной способ получения идентификатора для последнего созданного узла этого типа.

  • Теперь, когда у вас есть определенный тип контента, который вы автоматически заполняете по времени ... прибыль! Вы можете использовать Views для отображения данных любым удобным для вас способом, потому что они представлены в виде обычных старых узлов Drupal! :)

Надеюсь это поможет!

Алекс Вебер
источник