如何解决带有分页的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
和我的看法:
<% @new.each do |link| %>
<p><%= link %></p>
<% end %>
我在弄清楚如何添加分页时遇到麻烦,因此在第二页上将返回下一个10个结果。我正在使用Kaminari宝石进行分页。
我想要当用户单击指向另一个页面的链接时,从Google的API中提取接下来的10个结果。您可以使用API的start
参数来执行此操作,该参数指定以第一个结果开头的结果,我将其作为i
传递。我正在考虑做这样的事情:
i = (params[:page] - 1) * 10 + 1
其中params[:page]
是当前的页码,但是由于某种原因它是不确定的。另外,我不确定如何为不是AR对象的数组设置分页,以及我认为会怎样。非常感谢您的帮助,并随时使用您知道的任何分页宝石。
解决方法
您如何设置
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\']}
在您的视图中,您需要确保通过链接中的query参数传递页面以获取下一组结果。您最有可能希望返回@page + 1
。
使用非ActiveRecord对象处理分页取决于您的分页库。您可能想看看will_paginate如何处理这个问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。