如何实现YQL分页?

时间:2010-03-22 00:44:51

标签: javascript yql

我已经阅读了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个结果。

问题:

  • 列表项
  • 我应该使用或?
    • 如何指定指示页面的查询参数?在这种情况下,它是'page'查询参数。
  • 我假设我应该使用:<urls><url>http://jetpackgallery.mozillalabs.com/jetpacks</url></urls>这是正确的吗?
  • 在execute元素中,我需要提取页面上每个jetpack的详细信息?如果是这样,我将如何组织响应.object?

有人可以提供一些帮助吗?或者指向一个我可以看作参考的数据表?关于分页如何运作的更好的文档?

1 个答案:

答案 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}
       );