Apakah ada cara untuk mengkonsumsi layanan web eksternal dan menunjukkan hasilnya di Views?

11

Saya memiliki layanan web eksternal, yang dapat diakses menggunakan panggilan HTTP (dengan parameter dilewatkan sebagai string kueri), dan yang mengembalikan hasilnya dalam format XML.

Saya ingin menggunakan Drupal untuk mengakses layanan web itu (dengan parameter yang diinginkan), dan menampilkan hasilnya menggunakan Views.

Ini adalah contoh permintaan dan hasil yang diperoleh dari layanan web yang saya gunakan.

Permintaan: http: //localhost/query.php? Cy = di & q = abcd & cat = 22
Hasil:

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

Jawaban:

4

Solusi yang disarankan didasarkan pada memasukkan data ke dalam basis data terlebih dahulu, kemudian menunjukkannya dalam Views.

Alternatif lain adalah meminta layanan langsung dari Views, dengan menggunakan backend permintaan kustom. Periksa http://drupal.org/node/958270 untuk tautan ke backend khusus yang dapat Anda gunakan sebagai contoh untuk menulis milik Anda sendiri (ini tidak banyak pekerjaan)

Bojan Zivanovic
sumber
Tentu, tetapi keuntungan memasukkan data ke db lebih dari sekadar kesederhanaan, itu juga berarti caching data. Meminta data lokal selalu lebih cepat daripada layanan eksternal.
Alex Weber
Tapi, drupal.org/node/958270 dengan menggunakan Views3.0. Adakah cara untuk tidak menggunakan Views 3.0 dan juga tanpa perlu menyimpan data ke db? Cukup konsumsi layanan web waktu nyata dan tampilkan data di halaman.
Tentu saja, itu tidak perlu dikatakan lagi.
Bojan Zivanovic
Tidak. Tampilan 2 sangat dekat akhir masa pakainya, jadi semua fitur baru ada di Tampilan 3.
Bojan Zivanovic
@Alex: Anda dapat menggunakan Tampilan 3 dengan layanan Web eksternal dan masih menyimpan hasilnya.
s.Daniel
3

The Feed modul dapat menarik konten dan mengubahnya menjadi node. Feeds XPath Parser akan memungkinkan Anda untuk mengurai file xml dan memetakan tag ke bidang. Anda kemudian dapat menggunakan Tampilan untuk menampilkan konten seperti biasa.

Carolyn
sumber
1

Saya yakin ada solusi yang lebih elegan di luar sana, tapi saya pernah melakukan ini dengan feed twitter dan berfungsi dengan baik. Inilah pendapat saya:

  • Buat jenis konten untuk menyimpan hasil Anda dan mengatur bidang yang diperlukan untuk mencocokkan konten yang akan Anda konsumsi
  • Buat modul yang mengimplementasikan hook_cron () dan secara berkala mengkonsumsi layanan web dan menyimpan hasil sebagai node

Langkah kedua dapat dicapai dengan membuat contoh node secara terprogram:

$node = new stdClass();
$node->title = 'title';
$node->my_custom_field['und'][0]['value'] = 'my custom value';
// fill all your other fields
node_save($node);
  • Cara terbaik untuk menghindari duplikasi ketika membuat node secara terprogram adalah dengan membandingkan ID (atau cap waktu, atau apa pun) dari hasil layanan web dengan entri terbaru dalam database:
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

Contoh di atas bisa tampak agak membingungkan tetapi sebenarnya tidak: Saya membuat tipe konten "gambar" yang memiliki bidang khusus "picture_id". Ini hanya cara manual untuk mengambil ID untuk simpul yang baru dibuat dari jenis itu.

  • Jadi sekarang Anda memiliki jenis konten spesifik yang secara otomatis Anda isi pada waktu cron ... untung! Anda dapat menggunakan Tampilan untuk menampilkan data dengan cara apa pun yang Anda inginkan karena ini dalam bentuk node Drupal biasa! :)

Semoga ini membantu!

Alex Weber
sumber