क्या बाहरी वेब सेवाओं का उपभोग करने और दृश्य में परिणाम दिखाने का कोई तरीका है?


11

मेरे पास एक बाहरी वेब सेवा है, जिसे एक HTTP कॉल (क्वेरी स्ट्रिंग के रूप में पारित मापदंडों के साथ) का उपयोग करके पहुँचा जा सकता है, और जो XML प्रारूप में परिणाम लौटाता है।

मैं उस वेब सेवा (वांछित मापदंडों के साथ) का उपयोग करने के लिए Drupal का उपयोग करना चाहूंगा, और दृश्य का उपयोग करके परिणाम प्रदर्शित करूंगा।

ये एक नमूना प्रश्न हैं और मेरे द्वारा उपयोग की जा रही वेब सेवा से प्राप्त परिणाम हैं।

प्रश्न: http: //localhost/query.php? साइबर = इन & 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

सुझाए गए समाधान पहले डेटाबेस में डेटा प्राप्त करने पर आधारित होते हैं, फिर इसे दृश्य में दिखाया जाता है।

एक विकल्प कस्टम क्वेरी बैकएंड का उपयोग करके, दृश्य से सीधे सेवा को क्वेरी कर रहा है। कस्टम बैकेंड के लिंक के लिए चेकआउट http://drupal.org/node/958270 जो आप अपने खुद के लिखने के लिए एक उदाहरण के रूप में उपयोग कर सकते हैं (यह बहुत काम नहीं है)


निश्चित रूप से, लेकिन पहले db में डेटा प्राप्त करने के फायदे केवल सादगी से अधिक हैं, इसका मतलब डेटा को कैशिंग करना भी है। एक स्थानीय डेटास्टोर को छोड़ना हमेशा बाहरी सेवा की तुलना में तेज़ होता है।
एलेक्स वेबर

लेकिन, drupal.org/node/958270 Views3.0 का उपयोग करने के साथ है। दृश्य 3.0 का उपयोग नहीं करने का कोई तरीका और डेटा को डीबी में सहेजने की आवश्यकता के बिना भी? बस वेबसर्वर रियलटाइम का उपभोग करें और पृष्ठ पर डेटा प्रदर्शित करें।

बेशक, यह कहे बिना जाता है।
बोजान ज़िवानोविक 23

नंबर 2 जीवन के अंत के बहुत करीब है, इसलिए सभी नई सुविधाएँ दृश्य 3 में हैं
Bojan Zivanovic

@ एलेक्स: आप एक्सटर्नल वेब्स सर्विस के साथ व्यू 3 का उपयोग कर सकते हैं और फिर भी परिणाम कैश कर सकते हैं।
s। डैनियल

3

फ़ीड मॉड्यूल सामग्री में खींच सकते हैं और यह नोड्स में बदल सकते हैं। फ़ीड्स XPath पार्सर आपको xml फ़ाइल को पार्स करने और फ़ील्ड्स को मैप करने की अनुमति देगा। फिर आप सामग्री को सामान्य दिखाने के लिए दृश्यों का उपयोग कर सकते हैं।


1

मुझे यकीन है कि वहाँ एक और अधिक सुंदर समाधान है, लेकिन मैंने अतीत में ट्विटर फीड के साथ ऐसा किया है और यह ठीक काम करता है। यहाँ पर इसे ले रहा हूँ:

  • अपने परिणामों को संग्रहीत करने के लिए एक सामग्री प्रकार बनाएं और आपके द्वारा उपभोग की जाने वाली सामग्री से मेल खाने के लिए आवश्यक फ़ील्ड सेट करें
  • एक मॉड्यूल बनाएं जो हुक_क्रॉन () को लागू करता है और समय-समय पर वेब सेवा का उपभोग करता है और परिणाम नोड्स के रूप में संग्रहीत करता है

दूसरा चरण नोड इंस्टेंस को प्रोग्राम बनाकर प्राप्त किया जा सकता है:

$node = new stdClass();
$node->title = 'title';
$node->my_custom_field['und'][0]['value'] = 'my custom value';
// fill all your other fields
node_save($node);
  • प्रोग्राम को सबसे हाल ही में दर्ज करने के लिए वेब सेवा के परिणामों के आईडी (या टाइमस्टैम्प, या जो भी) की तुलना करने के लिए प्रोग्राम को नोड्स बनाते समय दोहराव से बचने का सबसे अच्छा तरीका है:
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

उपरोक्त उदाहरण थोड़े भ्रामक लग सकते हैं लेकिन इसका वास्तव में नहीं: मैंने एक कंटेंट टाइप "पिक्चर" बनाया है जिसमें एक कस्टम फील्ड "पिक्चर_ड" है। उस प्रकार के सबसे हाल ही में बनाए गए नोड के लिए आईडी को पुनः प्राप्त करने के लिए इसका सिर्फ एक मैनुअल तरीका है।

  • तो अब जब आपके पास एक विशिष्ट सामग्री प्रकार है जो आप स्वचालित रूप से क्रॉन समय पर लाभ उठाते हैं ... लाभ! आप किसी भी तरह से कृपया डेटा प्रदर्शित करने के लिए व्यूज़ का उपयोग कर सकते हैं क्योंकि इसका नियमित ओएल 'ड्रुपल नोड्स के रूप में है! :)

उम्मीद है की यह मदद करेगा!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.