我正在使用YQL来获取Feed列表,如下所示:
SELECT title, link, pubDate FROM rss
WHERE url IN ('.implode("','", array_values($urls)).')
$urls
包含Feed网址:
$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',
...
);
我得到一个带有title / link / pubdate字段的项目数组。除了“链接”字段,我没有得到任何可能告诉我项目来自何处的信息。
如何在array_keys($urls)
中添加与URL(值)对应的其他字段?基本上我需要一个字段来告诉我该项目来自哪个网站,例如delicious
,lastfm
等。
对于lastfm,我可以strpos
查看$item['url']
中是否存在“last.fm”字符串,但是有了美味的链接,这是不可能的:(
答案 0 :(得分:1)
您不能简单地将URL添加到字段列表中吗?或者您正在寻找解析URL的功能吗?
选择标题,链接,发布日期,URL FROM rss
我错过了为什么以上不起作用?
答案 1 :(得分:1)
由于YQL不是SQL,并且只对其查询使用SQL的语法,因此SELECT
中无法使用url
WHERE
关键字(在您的情况下为SELECT
}条款。 url
只能使用$urls
关键字访问xml文件的字段。 YQL将为您解析它并返回所需的字段。
并且因为有许多不同的rss标准,并不是每个标准都强制Feed包含自己的url,因此无法在feed中选择将在每种情况下返回url的字段。
我认为,您唯一的机会是遍历{{1}}数组并对每个Feed执行一次查询。只有这样,您才能保持Feed-url与此Feed项目之间的关系。
答案 2 :(得分:1)
我得到一个带有title / link / pubdate字段的项目数组。除了“链接”字段,我没有得到任何可能告诉我项目来自何处的信息。
要获取每个项目来源的信息,请添加source
字段:
SELECT title, link, pubDate, source FROM rss
...
结果将在每个条目中包含source
元素,该元素具有url
属性,其中包含从中获取项目的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>
您可以使用*
查找所有字段,这是我发现source
字段的方式:
SELECT * FROM rss
WHERE url IN ('http://feeds.delicious.com/v2/rss/geek', 'http://feeds.delicious.com/v2/rss/foo')
我认为这应该回答你的问题。要减少传输的数据量,您也可以只选择源的url属性,如下所示:
SELECT title, link, pubDate, source.url FROM rss
...
另请参阅Using YQL to load and convert RSS feeds really, really fast和How to use YQL to merge 2 RSS feeds sorted by pubDate?。
以下是对YQL语法的较早评论:
请注意,implode("','", array_values($urls))
会使您的YQL语法无效:
... IN(urlA','urlB','urlC)
您在开头和结尾看到缺少的单引号?添加它们:
"'".implode("','", $urls)."'"
你应该没事。至少你应该少一个错误。