如何在特定时间段内获得所有连接

时间:2013-12-09 05:11:19

标签: ruby-on-rails facebook ruby-on-rails-3 facebook-graph-api

我试图在特定时间段内在Facebook页面上获取所有连接(交互)。我正在使用考拉宝石并使用“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个不是“since:1.month.ago.to_i”。我有一个循环遍历页面,但我不知道在哪里停止,因为它只是不断返回结果给我,无论什么,只要我一直打电话.next_page。

  1. 有更好的方法吗?
  2. 如果没有,检查以确保我在循环中查看的帖子仍然在我想要的时间范围内并且如果没有,那么最好的方法是什么?
  3. 这是我的代码:

      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
    

1 个答案:

答案 0 :(得分:0)

 current  =  @api.get_connections(@fan_page_id, "feed", {since: 1.month.ago.to_i})

 next = current.next_page

 next = next.next_page 

 .....

请尝试这些,我认为它们有效。