当前位置: 首页 > 工具软件 > YQL > 使用案例 >

雅虎 YQL 接口

胥宏义
2023-12-01

统一优雅的接口

闲逛发现了YQL,它是雅虎的web service,允许你使用像SQL一样请求互联网数据:

    select * from table where xxx = yyy

它把互联网服务、公共数据、网页都看作一个一个的table,你可以从里面读出数据。
有些资源(服务)还可以update delete insert


YQL支持哪些table呢,进入这里 http://developer.yahoo.com/yql/console/

敲入show tables,点击【测试】,下面便会出现一堆table,
很多我目前都用不上,如果能指定返回数据的语言,就更实用了。


抓取网页数据

我们先拿html来玩玩吧,query的格式如下:

    select * from html where url="www.site.com/page.html" and xpath="..."

忘了说YQL的接口地址,下面是PHP代码

$url = 'http://www.site.com';
$xpath = '//*[@id="xx"]';
$query = "select * from html where url = '{$url}' and xpath='{$xpath}'";

$url = "http://query.yahooapis.com/v1/public/yql?q=".urlencode($query);

$session = curl_init($url);
curl_setopt($session, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($session);
echo $res;

OK,搞定。你可以选选择返回的是xml还是json,  只要在请求地址后面加上参数 format=json

如果是json格式,还可以指定callback, jsonp回调函数。


jsonp ? 是否突然发现js也可以轻松跨域了,不用自己在服务器再弄个代理,YQL已经帮你做了。


要注意的地方

不过还是得冷静下来,连接YQL的速度并不快,随便测试了拿网页的数据,都要等8秒以上,这就是硬伤了。下次做外国项目的时候看看是否速度有改善。

其次,如果对方网站在robots.txt设置了限制,YQL是取不回数据的。

公共接口每个IP每小时的请求限制在2000次。授权接口则可以2w次,一般是够用了,照这样的网络速度,3600/8 才450次每小时。不好意思,没算上并行的情况。


称赞

尽管如此,这样的接口还是要大赞一下的,

它使web service的接口非常简化并统一,无需花多时间去学各种API
除了web service,html, csv xml 也是可以抓下来的,还支持嵌套查询,你可以将分散在网络各处的资源,整合在一起,过滤,排序等。

什么时候国内也有这样的接口呢?

 类似资料: