Я пытаюсь получить все соединения (взаимодействия) на странице facebook с определенного периода времени. Я использую жемчужину koala и фильтрую запрос с «since: 1.month.ago.to_i», который, кажется, работает нормально. Однако это дает мне 25 результатов за раз. Если я изменю предел до 446 (максимум, кажется), который работает лучше. Но ... если я использую .next_page, чтобы дать мне следующий набор результатов в пределах заданного временного диапазона, вместо этого он просто дает мне следующий набор результатов, не подчиняясь временному диапазону.Как получить все соединения с определенного периода времени
Например, допустим, что я не увеличиваю лимит, и у меня есть 25 результатов за запрос. Я делаю что-то вроде:
@api.get_connections(@fan_page_id, "feed", {since: 1.month.ago.to_i})
давайте предположим, что для этого есть 30 результатов, и первый запрос получает меня 25 (предел по умолчанию). затем, если я это сделать:
@api.get_connections(@fan_page_id, "feed", {since: 1.month.ago.to_i}).next_page
вместо возвращения 5 последних результатов, она возвращает более 25, 20 из которых не являются «так: 1.month.ago.to_i». У меня есть цикл цикла, проходящий через страницы, но я не знаю, где остановиться, так как он просто возвращает результаты мне независимо от того, сколько я продолжаю звонить .next_page.
- есть ли лучший способ сделать это?
- Если нет, то какой лучший способ проверить, чтобы сообщение, которое я просматриваю в цикле, все еще находится в пределах диапазона времени, который я хочу, и чтобы вырваться, если нет?
вот мой код:
def perform(fan_page_id, pagination_options = {})
@since_date = pagination_options[:since_date] if pagination_options[:since_date]
@limit = pagination_options[:limit] if pagination_options[:limit]
@oauth = Koala::Facebook::OAuth.new
@api = Koala::Facebook::API.new @oauth.get_app_access_token
fb_page = @api.get_object(fan_page_id)
@fan_page_id = fb_page["id"]
# Collect all the users who liked, commented, or liked *and* commented on a post
process_posts(@api.get_connections(@fan_page_id, "feed", {since: @since_date})) do |post|
## do stuff based on each post
end
end
private
# Take each post from the specified feed and perform the provided
# code on each post in that feed.
#
# @param [Koala::Facebook::API::GraphCollection] feed An API response containing a page's feed
def process_posts(feed, options = {})
raise ArgumentError unless block_given?
current_feed = feed
begin
current_feed.each { |post| yield(post) }
current_feed = current_feed.next_page
end while current_feed.any?
end