มีวิธีใช้บริการเว็บภายนอกและแสดงผลลัพธ์ใน Views หรือไม่


11

ฉันมีบริการเว็บภายนอกซึ่งสามารถเข้าถึงได้โดยใช้การโทร HTTP (ด้วยพารามิเตอร์ที่ส่งผ่านเป็นสตริงการสืบค้น) และที่ส่งคืนผลลัพธ์ในรูปแบบ XML

ฉันต้องการใช้ Drupal เพื่อเข้าถึงบริการเว็บนั้น (พร้อมพารามิเตอร์ที่ต้องการ) และแสดงผลลัพธ์โดยใช้ Views

นี่คือแบบสอบถามตัวอย่างและผลลัพธ์ที่ได้จากบริการเว็บที่ฉันใช้

ข้อความค้นหา: http: //localhost/query.php? cy = ใน & 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สำหรับลิงก์ไปยังแบ็กเอนด์ที่กำหนดเองซึ่งคุณสามารถใช้เป็นตัวอย่างสำหรับการเขียนของคุณเอง (มันไม่ทำงานมาก)


แน่นอนว่า แต่ข้อดีของการรับข้อมูลลงในฐานข้อมูลก่อนเป็นมากกว่าความเรียบง่ายมันยังหมายถึงการแคชข้อมูล การสอบถามที่เก็บข้อมูลในเครื่องจะเร็วกว่าบริการภายนอกเสมอ
Alex Weber

แต่drupal.org/node/958270อยู่กับการใช้ Views3.0 วิธีใดที่จะไม่ใช้ Views 3.0 และไม่จำเป็นต้องบันทึกข้อมูลลงใน db? เพียงใช้เว็บเซอร์เรียลไทม์และแสดงข้อมูลบนหน้าเว็บ

แน่นอนว่าไม่ต้องพูดอะไร
Bojan Zivanovic

ไม่ Views 2 นั้นใกล้จะถึงจุดสิ้นสุดของชีวิตดังนั้นฟีเจอร์ใหม่ทั้งหมดจึงอยู่ใน Views 3
Bojan Zivanovic

@Alex: คุณสามารถใช้ Views 3 กับ Webservice ภายนอกและยังคงแคชผลลัพธ์
s.Daniel

3

ฟีดโมดูลสามารถดึงในเนื้อหาและทำให้มันกลายเป็นโหนด ฟีด XPath Parserจะช่วยให้คุณสามารถแยกวิเคราะห์ไฟล์ xml และแม็พแท็กกับฟิลด์ จากนั้นคุณสามารถใช้ Views เพื่อแสดงเนื้อหาตามปกติ


1

ฉันแน่ใจว่ามีทางออกที่หรูหรากว่านั้น แต่ฉันเคยทำสิ่งนี้ในอดีตด้วยตัวสั่นด้วยความตื่นเต้นและมันใช้ได้ดี นี่คือสิ่งที่ฉันจะทำ:

  • สร้างประเภทเนื้อหาเพื่อเก็บผลลัพธ์ของคุณและตั้งค่าฟิลด์ตามความจำเป็นเพื่อให้ตรงกับเนื้อหาที่คุณจะใช้งาน
  • สร้างโมดูลที่ใช้hook_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);
  • วิธีที่ดีที่สุดในการหลีกเลี่ยงการทำซ้ำเมื่อสร้างโหนดโดยทางโปรแกรมคือการเปรียบเทียบ ID (หรือเวลาประทับหรืออะไรก็ตาม) ของผลลัพธ์ของบริการเว็บกับรายการล่าสุดในฐานข้อมูล:
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" มันเป็นเพียงวิธีการในการดึงข้อมูล ID สำหรับโหนดที่สร้างขึ้นล่าสุดของประเภทนั้น

  • ดังนั้นตอนนี้คุณมีประเภทเนื้อหาเฉพาะที่คุณเติมโดยอัตโนมัติในเวลา cron ... กำไร! คุณสามารถใช้ Views เพื่อแสดงข้อมูลใด ๆ ตามที่คุณต้องการเพราะมันอยู่ในรูปแบบของโหนด ol 'Drupal ปกติ! :)

หวังว่านี่จะช่วยได้!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.