LoginSignup
18
18

More than 5 years have passed since last update.

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

Posted at

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の方で知らなかった〜って方は即導入してみてください!

18
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
18