YQL学习笔记

简介

YQL是雅虎提供的一种类似SQL的数据查询服务。
设计出发点是把整个Web当成一个巨大的数据库供开发者使用。

YQL语法

1.select语句
select 字段名 from 表名 where 过滤条件 [| 方法]
字段名:对应于后台服务返回结果中的XML元素或是JSON对象中的属性。
“*”表示选择全部的字段;多个字段名用逗号分隔
表名:后台服务的名称
过滤条件:声明结果中的记录应该满足的条件
方法:用来对结果进行附加的处理,如排序和去重等

关于select的上限:
最大返回数量上限为5000,最长执行时间为30秒
对于大部分表格,默认的返回数量为10,除非在select语句中指定limit

2.子select语句
举例:
select * from flickr.photos.info
where photo_id in (select id from flickr.photos.recent)

3.分页
YQL服务的返回结果的记录总数往往比较大。为了提高性能,YQL服务提供了分页功能
可以限制每次查询返回的记录数
举例:
//仅获取前20个结果
SELECT FROM flickr.photos.search(0, 20) WHERE text=”beijing”
//返回整个结果集的第11到20条记录
SELECT
FROM flickr.photos.search WHERE text=”bei” LIMIT 10 OFFSET 10

4.排序和其它方法
可以用类似linux管道的思路来理解这些方法
//sort title
SELECT * FROM flickr.photos.search WHERE text=”bei” | sort(field=”title”)
其它方法可以查看手册

5.使用功能:抽取HTML文件
虽然YQL服务访问的后台Web服务返回的一般是XML和JSON等结构化数据
YQL服务也可以用来从HTML文档中抽取数据。
只需要指定 HTML 页面的URL以及抽取数据所用的XPath语句YQL服务就可以完成抽取。
这其实就相当于能完成网页抽取的工作,不用自己写代码去获取了。 Cheers!
如果需要抽取的html5网页文件,则加入兼容选项,如:
select * from html where url=”http://groups.yahoo.com/search?query=surfing&sort=relevance“ and compat=”html5”

使用YQL访问开方数据表格

YQL 服务已经提供了许多内置的开放数据表格,可以直接使用。
通过在 YQL 控制台输入 show tables就可以查看所有内置数据表格的列表。
对于其它 Web 服务,如果想在 YQL 中使用,只需要提供一个描述文件即可。
该描述文件用来告诉 YQL 如何对该 Web 服务进行操作。

创建自己的YQL开方表格

更多YQL

1.使用上限
YQL endpoint /v1/public/ /v1/yql/
Hourly Cap 2,000 per IP 20,000 per IP
Daily Cap None 100,000 per day per API key

2.YQL语句总结
select: //retrieves data from the specified table
select from social.profile where guid=xyz
insert: //insert data into specified table
insert into table (key1, key2) values (‘value1’, ‘value2’)
update: //updates data in the specified table
update (table) set field1=value where filter
delete: //deletes data in the specified table
delete from (table) where filter
show tables: //gets a list of the tables available in YQL
show tables
desc: //gets a description of the table
desc social.connections
use: //maps a table name to the url of an open data table
use “http://myserver.com/mytable.xml“ as mytable; select
from mytable where …
set: //allows you to set up key values for use within open data tables
set (name)=(value); select * from mytable where …

3.条件查询where
条件查询分为远端条件过滤和本地条件过滤
远端条件过滤指的是条件被back-end的Web-Service执行,远端条件查询支持:”=”和 IN 操作符
语法类似:input_key IN [list of one or more literals]
本地条件查询的过程是先从back-end的Wev-Service获取数据,然后执行条件匹配判断
语法类似:field comparison_operator literal

举例:
//单条件选择
select from flickr.photos.info where photo_id=’2323453235’
//单条件,多匹配条件
select
from geo.palces where text in (“asss”, “dfdfd”)
//多条件选择
select from local.search where zip=’94085’ and query=’pizza’
select
from local.search where zip=’94085’ or query=’pizza’
//模糊查询,返回以Chinese或CHINESE开头的结果
select from flickr.photos.interestingness where title like ‘Chinese%’
//正则表达式
select
from flickr.photos.interestingness where title matches ‘.blue.

xpath学习

XPath是一门在XML文档中查找信息的语言。XPath用于在XML文档中通过元素和属性进行导航。

1.XPath节点
在 XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档(根)节点。
XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。

基本值:无父或无子的节点
项目:基本值或者节点

节点关系包括:父节点、子节点、同胞节点、先辈节点和后代节点。这些概念类似图论中的概念。

2.XPath语法
XPath 使用路径表达式来选取 XML 文档中的节点或节点集。节点是通过沿着路径 (path) 或者步 (steps) 来选取的。

常用路径表达式:
nodename 选取此节点的所有子节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性

谓语(Predicates)
谓语用来查找某个特定的节点或者包含某个指定的值的节点。
谓语被嵌套在方括号中

语法支持以下通配符:

*        匹配任何元素节点
@*        匹配任何属性的节点
node()    匹配任何类型的节点

选取若干路径
通过在路径表达式中使用”|”运算符,可以选取多个路径

3.XPath轴
轴可以用于选取特定的节点集,具体用法可以查手册

YQL练习

这里有几个YQL使用的实例
建议使用chrome浏览器查看源码并调试输出结果

小注:

YQL服务有时候会无法正常返回查询结果,等一会再刷新就好了

参考资料

YQL - 将 Web 作为数据库来使用的查询语言
Yahoo YQL console
XPath 教程
XPath、XQuery 以及 XSLT 函数
OAuth:如果对授权机制不熟悉