Harici web hizmetlerini tüketmenin ve sonuçları Views'da göstermenin bir yolu var mı?


11

Bir HTTP çağrısı (sorgu dizesi olarak geçirilen parametreleri ile) kullanılarak erişilebilen ve XML biçiminde sonuç döndüren harici bir web hizmeti var.

Bu web hizmetine (istenen parametrelerle) erişmek ve Views'u kullanarak sonucu görüntülemek için Drupal'ı kullanmak istiyorum.

Bunlar örnek bir sorgu ve kullandığım web hizmetinden elde edilen sonuçtur.

Sorgu: http: //localhost/query.php? Cy = in & q = abcd & cat = 22
Sonuç:

<?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>  

Yanıtlar:


4

Tavsiye edilen çözümler, önce veri tabanına veri alınmasına, daha sonra Views'da gösterilmesine dayanır.

Alternatif olarak, hizmeti özel bir sorgu arka ucu kullanarak doğrudan Views'dan sorgulamak mümkündür. Ödeme http://drupal.org/node/958270 Kendi yazmak için bir örnek olarak kullanabileceğiniz özel backendleri bağlantılar için (o bir sürü iş değil)


Tabii, ancak ilk önce db içine veri almanın avantajları basitlikten daha fazlasıdır, aynı zamanda verilerin önbelleğe alınması anlamına gelir. Yerel bir veri deposunu sorgulamak her zaman harici bir hizmetten daha hızlıdır.
Alex Weber

Ancak, drupal.org/node/958270 Views3.0 kullanıyor. Views 3.0 kullanmamak için herhangi bir yol ve ayrıca db içine veri kaydetmek gerekmeden? Sadece web hizmeti gerçek zamanlı tüketmek ve sayfadaki verileri görüntülemek.

Tabii ki, söylemeye gerek yok.
Bojan Zivanovic

Hayır. Views 2 kullanım ömrünün sonuna çok yakın, bu nedenle tüm yeni özellikler Views 3'te.
Bojan Zivanovic

@Alex: Views 3'ü harici bir Webservice ile kullanabilir ve sonuçları yine de önbelleğe alabilirsiniz.
s.Daniel

3

Yemler modülü içeriği alması ve düğümler haline getirebilirsin. Beslemeler XPath Ayrıştırıcı , xml dosyasını ayrıştırmanıza ve etiketleri alanlarla eşlemenize olanak tanır. Ardından, içeriği normal şekilde görüntülemek için Görünümler'i kullanabilirsiniz.


1

Eminim orada daha zarif bir çözüm var, ama geçmişte twitter beslemeleri ile yaptım ve gayet iyi çalışıyor. İşte benim almam:

  • Sonuçlarınızı saklamak için bir içerik türü oluşturun ve tüketeceğiniz içerikle eşleşecek şekilde alanları ayarlayın
  • Hook_cron () uygulayan ve periyodik olarak web servisini tüketen ve sonuçları düğüm olarak saklayan bir modül oluşturun

İkinci adım, düğüm örneklerini programlı olarak oluşturarak gerçekleştirilebilir:

$node = new stdClass();
$node->title = 'title';
$node->my_custom_field['und'][0]['value'] = 'my custom value';
// fill all your other fields
node_save($node);
  • Düğümleri programlı olarak oluştururken çoğaltmayı önlemenin en iyi yolu, web hizmeti sonuçlarının kimliğini (veya zaman damgasını veya herhangi bir şeyi) veritabanındaki en son girdiyle karşılaştırmaktır:
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

Yukarıdaki örnek biraz kafa karıştırıcı görünebilir ama gerçekten değil: Ben özel bir alanı "picture_id" olan bir içerik türü "picture" oluşturdum. Bu türün en son oluşturulan düğümünün kimliğini almanın sadece manuel bir yoludur.

  • Artık cron zamanında otomatik olarak doldurduğunuz belirli bir içerik türüne sahip olduğunuza göre ... kâr! Verileri istediğiniz herhangi bir şekilde görüntülemek için Görünümleri kullanabilirsiniz, çünkü düzenli ol 'Drupal düğümleri şeklinde! :)

Bu yardımcı olur umarım!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.