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:

  1. 它在找到的元素中查找任何名为 content 的元素。
  2. 如果未找到名为 content 的元素,该语句将查找名为 content.
  3. 的属性
  4. 如果既没有找到名为 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 指南