Czy istnieje sposób korzystania z zewnętrznych usług internetowych i wyświetlania wyników w widokach?

11

Mam zewnętrzną usługę internetową, do której można uzyskać dostęp za pomocą wywołania HTTP (z parametrami przekazanymi jako ciąg zapytania) i który zwraca wynik w formacie XML.

Chciałbym użyć Drupala, aby uzyskać dostęp do tej usługi internetowej (z żądanymi parametrami) i wyświetlić wynik za pomocą Widoku.

Są to przykładowe zapytanie i wynik uzyskany z usługi sieciowej, z której korzystam.

Zapytanie: http: //localhost/query.php? Cy = in & q = abcd & cat = 22
Wynik:

<?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
źródło

Odpowiedzi:

4

Zalecane rozwiązania polegają najpierw na wprowadzeniu danych do bazy danych, a następnie wyświetleniu ich w widokach.

Alternatywą jest odpytywanie usługi bezpośrednio z widoków przy użyciu niestandardowego zaplecza zapytania. Zapoznaj się z http://drupal.org/node/958270 linkami do niestandardowych backendów, których możesz użyć jako przykładu do pisania własnych (to nie jest dużo pracy)

Bojan Zivanovic
źródło
Jasne, ale zalety najpierw przeniesienia danych do bazy danych to nie tylko prostota, ale także buforowanie danych. Zapytanie do lokalnego magazynu danych jest zawsze szybsze niż usługa zewnętrzna.
Alex Weber,
Ale drupal.org/node/958270 korzysta z programu Views3.0. Jakiś sposób, aby nie korzystać z widoków 3.0, a także bez konieczności zapisywania danych w db? Wystarczy korzystać z usługi internetowej w czasie rzeczywistym i wyświetlać dane na stronie.
Oczywiście to oczywiste.
Bojan Zivanovic,
Nie. Widoki 2 są bliskie końca życia, więc wszystkie nowe funkcje są w
Widokach
@Alex: Możesz korzystać z Widoku 3 z zewnętrzną usługą internetową i nadal buforować wyniki.
s.Daniel
3

Feeds moduł może ciągnąć w treści i przekształcić go w węzłach. Kanały Parser XPath pozwoli ci na parsowanie pliku xml i mapowanie znaczników na pola. Następnie można użyć widoków, aby wyświetlić zawartość w normalny sposób.

Carolyn
źródło
1

Jestem pewien, że istnieje bardziej eleganckie rozwiązanie, ale robiłem to w przeszłości z kanałami Twitter i działa dobrze. Oto moje zdanie na ten temat:

  • Utwórz typ zawartości, aby przechowywać wyniki i odpowiednio skonfiguruj pola w celu dopasowania do treści, które będziesz konsumować
  • Utwórz moduł, który implementuje hook_cron () i okresowo zużywa usługę internetową i przechowuje wyniki jako węzły

Drugi krok można osiągnąć programowo tworząc instancje węzła:

$node = new stdClass();
$node->title = 'title';
$node->my_custom_field['und'][0]['value'] = 'my custom value';
// fill all your other fields
node_save($node);
  • Najlepszym sposobem uniknięcia duplikacji podczas programowego tworzenia węzłów byłoby porównanie identyfikatora (lub znacznika czasu lub dowolnego innego) wyników usługi internetowej z najnowszym wpisem w bazie danych:
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

Powyższy przykład może wydawać się nieco mylący, ale tak naprawdę nie jest: Utworzyłem typ zawartości „picture”, który ma niestandardowe pole „picture_id”. To tylko ręczny sposób na pobranie identyfikatora dla ostatnio utworzonego węzła tego typu.

  • Więc teraz, gdy masz określony typ zawartości, który automatycznie wypełniasz w czasie cron ... zysk! Możesz używać widoków, aby wyświetlać dane w dowolny sposób, ponieważ mają one postać zwykłych węzłów Drupal! :)

Mam nadzieję że to pomoże!

Alex Weber
źródło