我已经阅读了YQL指南,并且我一直在查看http://developer.yahoo.com/yql/guide/yql-o...entables-paging并且我一直在查看一些示例,但我仍然对YQL分页的工作方式感到困惑。
我正在努力解决的问题是为Mozilla实验室Jetpack Gallery的jetpacks页面创建一个YQL开放数据表http://jetpackgallery.mozillalabs.com/jetpacks
您使用?页面查询变量翻阅jetpack页面,并且有一个order_by查询变量。每页只能看到10个结果。
问题:
<urls><url>http://jetpackgallery.mozillalabs.com/jetpacks</url></urls>
这是正确的吗?有人可以提供一些帮助吗?或者指向一个我可以看作参考的数据表?关于分页如何运作的更好的文档?
答案 0 :(得分:1)
首先,您应该查看paging model(您的链接已在上面压缩,所以我只是把它放在这里。
当您使用未指定<execute></execute>
块的分页时,它将在查询字符串中使用<url></url>
中指定的URL。只需使用Flickr Photo Search Example,您必须在已启用诊断的控制台中运行它,以查看URL中的更改。 id
属性用于在查询中插入数字。这里只是为了说明,分页部分如下所示:
<paging model="page">
<start id="page" default="0" />
<pagesize id="per_page" max="250" />
<total default="10" />
</paging>
例如,查询
select * from flickr.photos.search(10,20) where has_geo="true"`
使用的网址是http://api.flickr.com/services/rest/?method=flickr.photos.search&has_geo=true&page=1&per_page=30
。正如您所看到的,它实际上需要page=1
,但要求per_page=30
并在内部截断前10个结果,以便获得10的偏移量和总共20个结果。
YQL之所以这样做是因为所选模型是page
。
另一个例子,如果您尝试这样做:
select * from flickr.photos.search(249,2) where has_geo="true"
YQL会检索...&page=1&per_page=250
和...&page=2&per_page=250
(我已经缩短了插图的网址),以获得结果。
如果您在<execute></execute>
部分中使用JavaScript,则还会在全局范围内定义分页变量。您可以在flickr.photos.astro OpenData Table中看到这一点。
我想这应该为你回答这个问题,因为我看到on GitHub,你一直在研究如何使用XPath提取页面。
对于你的情况,你应该有类似的东西:
<paging model="page">
<start id="page" default="1" />
<pagesize id="per_page" max="10" />
<total default="10" />
</paging>
per_page
将在您的内部查询中,但它用于YQL以确定所需的查询。然后在您的JavaScript中可能会执行以下操作:
y.query(
"select * from html where url=@url",
{url: "http://jetpackgallery.mozillalabs.com/jetpacks?page=" + page}
);