API пользовательского поиска Google с нумерацией страниц - PullRequest
2 голосов
/ 22 июня 2011

У меня есть этот метод, который помещает ссылки из 10 результатов из API пользовательского поиска Google в массив:

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 для разбивки на страницы.

Я хочу, чтобы, когда пользователь нажимает ссылку на другую страницу, я получал следующие 10 результатов из API Google.Вы можете сделать это с помощью параметра API start, который задает первый результат, с которого я начинаю, и который я передаю как i.Я думал сделать что-то вроде этого:

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

, где params[:page] - номер текущей страницы, но по какой-то причине он не определен.Также я не уверен, как настроить разбиение на страницы для массива, который не является объектом AR, и что будет на мой взгляд.Буду признателен за любую помощь и не стесняйтесь использовать любой драгоценный камень нумерации страниц.

1 Ответ

0 голосов
/ 22 июня 2011

Как вы настраиваете 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 обрабатывает это .

...