Google自定义搜索API与分页

我有这种方法将来自Google自定义搜索API的10个结果的链接放入一个数组中:

require 'json' require 'open-uri' def create search = params[:search][:search] base_url = "https://www.googleapis.com/customsearch/v1?" stream = open("#{base_url}key=XXXXXXXXXXXXX&cx=XXXXXXXXXX&q=#{search}&start=#{i}&alt=json") raise 'web service error' if (stream.status.first != '200') result = JSON.parse(stream.read) @new = [] result['items'].each do |r| @new << r['link'] end end 

和我的观点:

  

我无法弄清楚如何添加分页,以便在第二页上返回接下来的10个结果。 我正在使用Kaminarigem进行分页。

我希望当用户点击指向其他网页的链接时,我会从Google的API中获取接下来的10个结果。 您可以使用API​​的start参数执行此操作,该参数指定要开始的第一个结果,我将其作为i传递。 我在考虑做这样的事情:

 i = (params[:page] - 1) * 10 + 1 

其中params[:page]是当前的页码,但由于某种原因它是未定义的。 另外,我不确定如何为不是AR对象的数组设置分页,以及我认为会有什么。 我很感激任何帮助,并随意使用你知道的任何分页gem。

你如何设置params[page] ? 它需要以某种方式传入请求中的其他参数。

也许你需要在控制器中使用这样的东西:

 @page = params[:page] || 1 i = (@page - 1) * PER_PAGE + 1 stream = open("#{base_url}key=XXXXXXXXXXXXX&cx=XXXXXXXXXX&q=#{search}&start=#{i}&alt=json") raise 'web service error' if (stream.status.first != '200') result = JSON.parse(stream.read) @new = result['items'].map{|r| r['link']} 

在您的视图中,您需要确保通过链接中的查询参数传递页面以获取下一组结果。 很可能你想要返回@page + 1

处理非ActiveRecord对象的分页取决于您的分页库。 您可能想看看will_paginate如何处理这个问题 。