Help us understand the problem. What is going on with this article?

FacebookApiへのアクセス数を1/50に削減する方法

More than 5 years have passed since last update.

facebookのapiを調べてたら、graph apiへのアクセスを1/50に減らせる方法があることが分かったので共有しま〜す!!

api仕様

facebookのdeveloperサイトの以下のページに詳細が記載されています。
https://developers.facebook.com/docs/graph-api/making-multiple-requests/

rbファイルで書いてみる

今回はシンプルにurlのlike数を返してくれるapiを使って、
一気に50個のurlをapiに投げてみます。

引数にurlの配列urlsを渡す場合を書いてみます。

get_like_count.rb
  def self.get_like_counts(urls)
    batch_data = []
    urls.each do |url|
      batch_data << { 'method' => 'GET', 'relative_url' => "?ids=#{url}" }
    end
    uri = URI(#{FACEBOOK_GRAPH_API_URL})
    timeout = 60
    https = Net::HTTP.new(uri.hostname, uri.port)
    https.use_ssl = true

    res = https.start do |h|
      h.open_timeout = timeout
      h.read_timeout = timeout
      req = Net::HTTP::Post.new(uri)
      req.form_data = {
        'access_token' => #{APP_ACCESS_TOKEN}, ※なくてもいい
        'batch'        => batch_data.to_json
      }
      h.request req
    end
  end

※このbatch_dataの配列に入れるmethodとrelative_urlの組み合わせで、どんなapiも50回までまとめて送れます。

実際に実行してみます。

  urls = [
    "http://job-share.net/",
    "http://atrae.co.jp/"
  ]
  GetLikeCount.get_like_counts(urls)

と実行すればOKです。

50個分のデータが配列として一回で返ってくる

ActiveSupport::JSON.decode(res.body).each_with_index do |content,index|
    p content
end

===
"body" : [{
   "http://job-share.net": {
      "id": "http://job-share.net",
      "shares": 1083
   },
   "http://atrae.co.jp": {
      "id": "http://atrae.co.jp",
      "shares": 259
   },
   …(50個分が配列で返ってくる)
   ]
}

感想

ちょ〜便利〜!!
オーバーヘッドが1/50になって早ぇ〜
APIのアクセス数が制限されて拒否られる可能性も減る〜

ということで、facebook app developerの方で知らなかった〜って方は即導入してみてください!

okappy
アトラエ取締役CTO兼yenta開発責任者やってます。 エンジニアの横の繋がりを大事にしたいので、何かあればfacebookで気軽にメッセージください。Qiitaの投稿に関することとかしないこととか、なんでもOKです。 http://www.facebook.com/toshi.oka.831
https://yenta.talentbase.io/yenta/?cn=qiita
atrae
People Techカンパニーとして、転職サイトGreen, ビジネスマッチングアプリyenta, 組織改善プラットフォームwevoxなどのサービスを運営。全ての社員が誇りを持てる組織と事業の創造にこだわり、関わる人々がファンとして応援したくなるような魅力ある会社であり続けることを目指しています。
https://atrae.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away