2011-06-22 69 views
2

自定義搜索API我有這樣的方法把來自谷歌定製搜索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對象的數組設置分頁,以及我認爲會發生什麼。我會很感激任何幫助,並隨時使用您認識的任何分頁寶石。

回答

0

你是如何設定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 handles this