it-swarm-eu.dev

Existuje způsob, jak spotřebovat externí webové služby a zobrazit výsledky v zobrazeních?

Mám externí webovou službu, ke které lze přistupovat pomocí volání HTTP (s parametry předanými jako řetězec dotazu) a který vrací výsledek ve formátu XML.

Chtěl bych použít Drupal) pro přístup k webové službě (s požadovanými parametry) a zobrazit výsledek pomocí Zobrazení.

Jedná se o ukázkový dotaz a výsledek získaný z webové služby, kterou používám.

Dotaz: http: //localhost/query.php? Cy = in & q = abcd & cat = 22
Výsledek:

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

Doporučená řešení jsou založena na prvním získání dat do databáze a poté na zobrazení v Zobrazení.

Alternativou je dotazování služby přímo z Zobrazení pomocí vlastního backendu dotazu. Pokladna http://drupal.org/node/95827 za odkazy na vlastní backendy, které můžete použít jako příklad pro psaní vlastních (není to spousta práce)

4
Bojan Zivanovic

Modul Feeds může načíst obsah a změnit jej na uzly. Feeds XPath Parser vám umožní analyzovat xml soubor a mapovat značky do polí. Poté můžete pomocí Zobrazení zobrazit obsah jako obvykle.

3
Carolyn

Jsem si jistý, že existuje elegantnější řešení, ale v minulosti jsem to udělal pomocí Twitteru a funguje to dobře. Tady je můj pohled na to:

  • Vytvořte typ obsahu k uložení výsledků a podle potřeby nastavte pole tak, aby odpovídaly obsahu, který budete konzumovat
  • Vytvořte modul, který implementuje hook_cron () a pravidelně spotřebovává webovou službu a ukládá výsledky jako uzly

Druhý krok lze dosáhnout programovým vytvořením instancí uzlů:

$node = new stdClass();
$node->title = 'title';
$node->my_custom_field['und'][0]['value'] = 'my custom value';
// fill all your other fields
node_save($node);
  • Nejlepší způsob, jak se vyhnout duplicitě při programovém vytváření uzlů, by bylo porovnat ID (nebo časové razítko nebo cokoli) výsledků webové služby s nejnovějším záznamem v databázi:
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

Výše uvedený příklad se může zdát trochu matoucí, ale není to tak: Vytvořil jsem typ obsahu „obrázek“, který má vlastní pole „picture_id“. Jde pouze o ruční způsob načtení ID pro naposledy vytvořený uzel tohoto typu.

  • Takže nyní, když máte konkrétní typ obsahu, který se automaticky naplní časem cronu ... zisk! Pomocí Zobrazení můžete zobrazit data libovolným způsobem, protože je ve formě pravidelných ol 'Drupal uzly! :)

Snad to pomůže!

1
Alex Weber