it-swarm.asia

هل هناك طريقة لاستهلاك خدمات الويب الخارجية وعرض النتائج في طرق العرض؟

لدي خدمة ويب خارجية ، يمكن الوصول إليها باستخدام مكالمة HTTP (مع تمرير المعلمات كسلسلة استعلام) ، والتي تُرجع النتيجة بتنسيق XML.

أود استخدام Drupal للوصول إلى خدمة الويب تلك (مع المعلمات المطلوبة) ، وعرض النتيجة باستخدام طرق العرض.

هذه عينة استعلام والنتيجة التي تم الحصول عليها من خدمة الويب التي أستخدمها.

الاستعلام: http: //localhost/query.php؟ cy = in & 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>  
11
Mugunth

تستند الحلول الموصى بها على إدخال البيانات إلى قاعدة البيانات أولاً ، ثم عرضها في طرق العرض.

البديل هو الاستعلام عن الخدمة مباشرة من طرق العرض ، باستخدام خلفية الاستعلام المخصص. Checkout http://drupal.org/node/95827 للروابط إلى الواجهات الخلفية المخصصة التي يمكنك استخدامها كمثال لكتابة خاصتك (ليس هناك الكثير من العمل)

4
Bojan Zivanovic

يمكن للوحدة الخلاصات سحب المحتوى وتحويله إلى عقد. Feeds XPath Parser سيسمح لك بتحليل ملف xml وتعيين العلامات إلى الحقول. يمكنك بعد ذلك استخدام طرق العرض لعرض المحتوى كالمعتاد.

3
Carolyn

أنا متأكد من وجود حل أكثر أناقة ، لكنني فعلت ذلك في الماضي باستخدام خلاصات Twitter ويعمل بشكل جيد. إليك ما أقوم به:

  • قم بإنشاء نوع محتوى لتخزين نتائجك وإعداد الحقول حسب الضرورة لمطابقة المحتوى الذي ستستهلكه
  • إنشاء وحدة نمطية تنفذ 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);
  • تتمثل أفضل طريقة لتجنب التكرار عند إنشاء العقد برمجياً في مقارنة معرّف (أو الطابع الزمني ، أو أيا كان) نتائج خدمة الويب بأحدث إدخال في قاعدة البيانات:
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". إنها مجرد طريقة يدوية لاسترداد المعرف للعقدة التي تم إنشاؤها مؤخرًا من هذا النوع.

  • حتى الآن لديك نوع محتوى معين تقوم بتعبئته تلقائيًا في وقت cron ... ربح! يمكنك استخدام طرق العرض لعرض البيانات بالطريقة التي تريدها لأنها في شكل رأ عادي 'Drupal العقد! :)

أتمنى أن يساعدك هذا!

1
Alex Weber