it-swarm-id.com

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

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 Tampilan.

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>  
11
Mugunth

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. Checkout http://drupal.org/node/95827 untuk tautan ke backend kustom yang dapat Anda gunakan sebagai contoh untuk menulis milik Anda sendiri (ini tidak banyak pekerjaan)

4
Bojan Zivanovic

Modul Feeds 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.

3
Carolyn

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 dapat 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 biasa 'Drupal node! :)

Semoga ini membantu!

1
Alex Weber