Чи є спосіб споживання зовнішніх веб-служб та показ результатів у переглядах?


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>  

Відповіді:


4

Рекомендовані рішення ґрунтуються на тому, щоб спочатку отримати дані в базу даних, а потім показати їх у меню Views.

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


Звичайно, але переваги отримання даних у db спочатку - це не просто простота, це також означає кешування даних. Запит у локальну сховище даних завжди швидший, ніж зовнішня служба.
Алекс Вебер

Але, drupal.org/node/958270 це за допомогою Views3.0. Будь-який спосіб не використовувати Views 3.0, а також без необхідності зберігати дані в db? Просто споживайте в режимі реального часу веб-сервіс і відображайте дані на сторінці.

Звичайно, це само собою зрозуміло.
Боян Живанович

№. Перегляди 2 дуже близькі до кінця життя, тому всі нові функції є у ​​Переглядах 3.
Боян Живанович

@Alex: Ви можете використовувати Views 3 із зовнішньою веб-службою і все одно кешувати результати.
с.Даніель

3

Модуль каналів може витягувати вміст і перетворювати його на вузли. Канали XPath Parser дозволять вам проаналізувати файл xml та позначити теги на поля. Потім можна використовувати Перегляд для відображення вмісту як звичайного.


1

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

  • Створіть тип вмісту для зберігання результатів та встановіть поля за необхідності, щоб вони відповідали вмісту, який ви споживаєте
  • Створіть модуль, який реалізує moka_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_id". Це просто ручний спосіб отримати ідентифікатор для останнього створеного вузла цього типу.

  • Отже, тепер у вас є певний тип вмісту, який ви автоматично заповнюєте під час крон ... прибуток! Ви можете використовувати Перегляд для відображення даних будь-яким способом, який вам подобається, тому що це у вигляді звичайних ol 'Drupal вузлів! :)

Сподіваюся, це допомагає!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.