2011-12-26 63 views
5

我使用YQL获取提要列表,像这样:包括在选择查询产生额外的场

SELECT title, link, pubDate FROM rss 
    WHERE url IN ('.implode("','", array_values($urls)).') 

$urls包含供稿网址:

$urls = array(
    'delicious' => 'http://feeds.delicious.com/v2/rss/foo', 
    'delicious' => 'http://feeds.delicious.com/v2/rss/anotherfoo', 
    'lastfm' => 'http://ws.audioscrobbler.com/1.0/user/foo/recenttracks.rss', 
    ... 
); 

而且我得到的数组具有标题/链接/ pubdate字段的项目。除了“链接”字段外,我没有收到任何可能告诉我该项目来自何处的信息。

如何包含与URL(值)对应的array_keys($urls)的其他字段?基本上,我需要告诉我是从哪个网站某个字段的项目从何而来,像deliciouslastfm

对于LastFM等我可以strpos检查“last.fm”字符串出现在$item['url'],但美味链接这是不可能的:(


+0

我认为您需要更改YQL查询,以便结果行具有显示请求的URL的字段。所以你有没有试图将URL添加到SELECT字段?在YQL中不是很有名,但可能有一种方法。 – hakre 2011-12-26 01:18:45

回答

1

而我得到一个标题/链接/ pubdate字段的项目数组。除了“链接”字段外,我没有收到任何可能告诉我该项目来自何处的信息。

要想从每个项目来自于信息,添加source领域:

SELECT title, link, pubDate, source FROM rss 
    ... 

结果随后将包含在每个条目source元素,其中有一个url属性包含的网址该物品已取自:

<results> 
    <item> 
     <title>Git Immersion - Brought to you by EdgeCase</title> 
     <pubDate>Wed, 21 Dec 2011 22:15:44 +0000</pubDate> 
     <link>http://gitimmersion.com/</link> 
     <source url="http://feeds.delicious.com/v2/rss/geek">geek's links</source> 
    </item> 

YQL Demo

您可以通过使用*寻找各个领域,这是我发现了关于source领域:

SELECT * FROM rss 
    WHERE url IN ('http://feeds.delicious.com/v2/rss/geek', 'http://feeds.delicious.com/v2/rss/foo') 

YQL Query Demo

我想这应该回答你的问题。为了减少传输的数据量,你也只能选择源的URL属性,像这样:

SELECT title, link, pubDate, source.url FROM rss 
    ... 

见以及Using YQL to load and convert RSS feeds really, really fastHow to use YQL to merge 2 RSS feeds sorted by pubDate?


以下是对YQL语法较早的评论:

请大家注意,implode("','", array_values($urls))将离开你的YQL在无效的语法:

... IN(乌拉 '' urlB','urlC)

您在开头和结尾看到缺少的单引号?添加它们:

"'".implode("','", $urls)."'" 

你应该没问题。至少你应该少一点错误。

+0

好吧,这只是我的问题中的一个错字:)我仍然需要找出如何添加我的领域... – Alex 2011-12-26 01:15:50

+0

@Alex:我已经添加了如何让你的领域回归,但我不确定这是你要求的,让我知道。 – hakre 2011-12-26 11:29:15

1

不能只需添加到URL字段列表中?或者,你在找一个函数来解析URL?

SELECT标题,链接,出版日期, URL FROM rss

我错过了为什么上述不会工作?

+0

它只是不起作用,RSS源没有URL字段,所以不会返回。 – hakre 2011-12-26 11:31:02

1

由于YQL不是SQL,并且只对其查询使用SQL的语法,因此WHERE子句中使用的关键字(在您的情况中为url)没有机会使用SELECTSELECT只能访问使用url关键字给出的xml文件的字段。 YQL会为你解析并返回想要的字段。 因为有很多不同的rss标准,并且不是每个标准强制feed都包含它自己的url,所以无法在feed中选择一个字段,每个字段都会返回url。

我认为,您唯一的机会是遍历$urls数组,并为每个feed执行一个查询。只有这样,您才能保持feed-url和此订阅源项目之间的关系。

+0

但我如何在我的选择查询中添加该字段?这是我不知道该怎么办... – Alex 2011-12-26 00:56:15

+0

SELECT title, link, pubDate, url FROM [...] Corubba 2011-12-26 01:01:01

+0

它不起作用,我仍然只得到我提到的3个领域 – Alex 2011-12-26 01:02:03