有没有办法使用外部Web服务并在View中显示结果?


11

我有一个外部Web服务,可以使用HTTP调用(带有作为查询字符串传递的参数)进行访问,该服务以XML格式返回结果。

我想使用Drupal访问该Web服务(具有所需的参数),并使用Views显示结果。

这些是示例查询,是从我正在使用的Web服务获得的结果。

查询: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>  

Answers:


4

建议的解决方案基于首先将数据放入数据库,然后在视图中显示数据。

一种替代方法是使用自定义查询后端直接从Views查询服务。在http://drupal.org/node/958270上查找指向自定义后端的链接,您可以将其用作编写自己的示例(这不是很多工作)


当然,但是首先将数据放入db的好处不仅是简单,还意味着缓存数据。查询本地数据存储区总是比外部服务快。
Alex Weber

但是,drupal.org/ node/958270正在使用Views3.0。有什么方法可以不使用Views 3.0,又不需要将数据保存到db中吗?只需实时使用Web服务并在页面上显示数据即可。

当然,这不用说。
Bojan Zivanovic

第2次是非常接近结束时的生活,让所有新功能都在浏览3
博贾恩·齐万维奇

@Alex:您可以将Views 3与外部Web服务结合使用,并且仍然缓存结果。
s.Daniel

3

饲料模块可拉的内容并把它变成节点。Feed XPath Parser将允许您解析xml文件并将标签映射到字段。然后,您可以使用“视图”正常显示内容。


1

我敢肯定那里有一个更优雅的解决方案,但是我过去使用Twitter feed做到了这一点,并且效果很好。这是我的看法:

  • 创建内容类型以存储结果,并根据需要设置字段以匹配将要使用的内容
  • 创建一个实现hook_cron()并定期使用Web服务并将结果存储为节点的模块

第二步可以通过以编程方式创建节点实例来实现:

$node = new stdClass();
$node->title = 'title';
$node->my_custom_field['und'][0]['value'] = 'my custom value';
// fill all your other fields
node_save($node);
  • 以编程方式创建节点时,避免重复的最佳方法是将Web服务结果的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”的内容类型“ picture”。它只是检索该类型的最新创建节点的ID的手动方法。

  • 因此,现在您有了一种特定的内容类型,可以在cron时间自动填充该内容类型...赚钱!您可以使用Views随意显示数据,因为它采用常规ol'Drupal节点的形式!:)

希望这可以帮助!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.