2016-11-01 6 views
0

私はRailsにあり、Facebookのすべてのコメントをインポートするには、cronジョブでKoalaを使用します。API要求を含むループにコールバックが必要ですか?

requestを作成し、responseを保存するたびにforループを使用してもよろしいですか?または、私がFacebookからresponseを手に入れる前に、forが再起動する危険性があります。

他の言葉:ループが応答を待つか、コールバック関数が必要ですか?ここで

はループです:

def self.import_comments 
    # Access Facebook API 
    facebook = Feed.get_facebook_access 

    # Run 190 queries per cron job 
    for i in 1..190 

     id_of_latest_feed   = Feed.get_latest['fb_id'] 
     id_of_latest_feed_checked = Option.get_feed_needle 

     # Check if there are more recent feeds than the latest checked 
     if id_of_latest_feed != id_of_latest_feed_checked 
      # Get the facebook id of the feed which comes after the latest checked 
      latest_feed_checked = Feed.where(fb_id: id_of_latest_feed_checked).first 
      this_date   = latest_feed_checked['fb_updated_time'] 
      feed_to_check  = Feed.get_older_than(this_date) 

      unless feed_to_check.nil? 
       # Get the ID of the feed to check 
       fb_id = feed_to_check['fb_id'] 
       # Update needle 
       Option.update_feed_needle_to(fb_id) 

       # -------- REQUEST! --------- # 
       # Get comments from Facebook 
       @comments = facebook.get_object("#{ fb_id }/comments?filter=stream") 

       # Save each comment 
       @comments.each do |comment| 
        if Comment.exists?(fb_id: comment['id']) 
         # don't do anyhting 
        else 
         # save the comment 
        end 
       end 
      end 
     end 
    end 
end 

答えて

0

コアラのget_object呼び出しが同期しているので、実行が一時停止し、結果の準備ができるまで、あなたのコードに戻りません。 (失敗しない限り、コアラはエラーを発生させます)。

はい、このように使用すると安全です! forループは、前の呼び出しの結果が準備完了するまで続行されません。コールバックは必要ありません!

(これは、Koala wikiの例に基づいています)。

+0

私はコードを実行していて、これまでのところ問題はなかったので、あなたが正しいと思います –

関連する問題