YQL 结果中 SELECT 语句的正确语法是什么?
What's correct syntax to SELECT statement in YQL results?
我正在使用 boss.search
table 提取 XML 中的数据,但我想检索特定字段。
标准语法是:
SELECT * from boss.search WHERE q="Whosebug" AND ck = 'ConsumerKey' AND secret = 'ConsumerSecret';
有效。
但是当我尝试 select 像 "/title"
或 "/results/result/title"
这样的字段时,我遇到了语法错误:
Query syntax error(s) [line 1:7 expecting fields_or_star got '/result/title']
检索字段的正确语法是什么(例如title
)?
REST 响应如下所示:
<results>
<bossresponse>
<web>
<results>
<result>
<date/>
<clickurl>https://example.com/</clickurl>
<url>https://example.com/</url>
<dispurl type="default">https://example.com/</dispurl>
<title type="default">Example</title>
<abstract type="default">Example</abstract>
</result>
<result>
您可以在“Syntax of SELECT - Specifying the Elements Returned' (cached) Yahoo 查询语言文档中查看。
如果结果集中的字段包含子字段,您可以使用句点(点)作为分隔符来指示子字段。
自定义tables
例如,对于 social.profile
table,从以下示例中仅获取 image
字段的 imageUrl
子字段:
. . .
<results>
<profile xmlns="http://social.yahooapis.com/v1/schema.rng">
<image>
<imageUrl>http://l.yimg.com/us.yimg.com/i/identity/nopic_192.gif</imageUrl>
</image>
</profile>
</results>
输入以下内容:
select image.imageUrl from social.profile where guid=me
BOSSAPI
BOSS的反应有点不同。要从 boss.search table 获取 title,您需要将字段命名为:web.results.result.title
,例如
SELECT web.results.result.title FROM boss.search WHERE q="Whosebug"
HTML
要仅从 HTML 页面获取内容,您可以在单词 SELECT
之后指定 content
关键字。带有 content
关键字的语句按以下顺序处理 HTML:
- 它在找到的元素中查找任何名为
content
的元素。
- 如果未找到名为
content
的元素,该语句将查找名为 content
. 的属性
- 如果既没有找到名为
content
的元素也没有找到属性,语句 returns 元素的 textContent
.
例如,以下语句仅提取 Yahoo Groups 的 HTML 链接(href
标签):
SELECT href FROM html WHERE url="http://groups.yahoo.com/search?query=surfing&sort=relevance" and compat="html5" AND xpath='//li[contains(@class,"hbox groupsSearch-result-entry")]/h4/a'
下面的语句,例如returns通过XPath表达式检索到的每个锚a
标签的textContent:
SELECT content FROM html WHERE url="http://groups.yahoo.com/search?query=surfing&sort=relevance" AND compat="html5" AND xpath='//li[contains(@class,"hbox groupsSearch-result-entry")]/h4/a'
来源:Extracting HTML - Using YQL and Open Data Tables 在 YQL 指南
我正在使用 boss.search
table 提取 XML 中的数据,但我想检索特定字段。
标准语法是:
SELECT * from boss.search WHERE q="Whosebug" AND ck = 'ConsumerKey' AND secret = 'ConsumerSecret';
有效。
但是当我尝试 select 像 "/title"
或 "/results/result/title"
这样的字段时,我遇到了语法错误:
Query syntax error(s) [line 1:7 expecting fields_or_star got '/result/title']
检索字段的正确语法是什么(例如title
)?
REST 响应如下所示:
<results>
<bossresponse>
<web>
<results>
<result>
<date/>
<clickurl>https://example.com/</clickurl>
<url>https://example.com/</url>
<dispurl type="default">https://example.com/</dispurl>
<title type="default">Example</title>
<abstract type="default">Example</abstract>
</result>
<result>
您可以在“Syntax of SELECT - Specifying the Elements Returned' (cached) Yahoo 查询语言文档中查看。
如果结果集中的字段包含子字段,您可以使用句点(点)作为分隔符来指示子字段。
自定义tables
例如,对于 social.profile
table,从以下示例中仅获取 image
字段的 imageUrl
子字段:
. . .
<results>
<profile xmlns="http://social.yahooapis.com/v1/schema.rng">
<image>
<imageUrl>http://l.yimg.com/us.yimg.com/i/identity/nopic_192.gif</imageUrl>
</image>
</profile>
</results>
输入以下内容:
select image.imageUrl from social.profile where guid=me
BOSSAPI
BOSS的反应有点不同。要从 boss.search table 获取 title,您需要将字段命名为:web.results.result.title
,例如
SELECT web.results.result.title FROM boss.search WHERE q="Whosebug"
HTML
要仅从 HTML 页面获取内容,您可以在单词 SELECT
之后指定 content
关键字。带有 content
关键字的语句按以下顺序处理 HTML:
- 它在找到的元素中查找任何名为
content
的元素。 - 如果未找到名为
content
的元素,该语句将查找名为content
. 的属性
- 如果既没有找到名为
content
的元素也没有找到属性,语句 returns 元素的textContent
.
例如,以下语句仅提取 Yahoo Groups 的 HTML 链接(href
标签):
SELECT href FROM html WHERE url="http://groups.yahoo.com/search?query=surfing&sort=relevance" and compat="html5" AND xpath='//li[contains(@class,"hbox groupsSearch-result-entry")]/h4/a'
下面的语句,例如returns通过XPath表达式检索到的每个锚a
标签的textContent:
SELECT content FROM html WHERE url="http://groups.yahoo.com/search?query=surfing&sort=relevance" AND compat="html5" AND xpath='//li[contains(@class,"hbox groupsSearch-result-entry")]/h4/a'
来源:Extracting HTML - Using YQL and Open Data Tables 在 YQL 指南