編集長ブログ―安田英久

FacebookのGraph APIで、いいね!数取得やOGPキャッシュクリアがエラー4で失敗する場合の対策

Graph APIルートノードへのリクエストでも、APIにアクセストークンを付けてリクエストできます

今日は、かなり技術的なトピックです。Facebookの「いいね!数データ取得」や「OGPキャッシュクリア」が失敗することはありませんか? そのときは、APIにアクセストークンを付けてリクエストしましょう。

※今回の記事は、頭から最後まで技術的な解説です。この記事で解説している問題が発生している場合、開発担当の人にこれを教えて「これで解決できないかな?」と聞いてみてください。

FacebookのGraph APIが「Application request limit reached」で失敗

Facebookの「いいね!」数を取得したり、OGPのキャッシュをクリアしたりという動作を、CMSの内部で自動的に行っている人は多いのではないでしょうか。

その場合、Facebookの「Graph API」という仕組みを使います。次のようなリクエストですね。

  • いいね!数の取得
    https://graph.facebook.com/?id=対象ページのurl
  • OGPキャッシュのクリア
    https://graph.facebook.com/?id=対象ページのurl&scrape=true

しかし、特にAPIリクエストの数が多くないのに、次のようなエラーが返ってしまうことはないでしょうか。

  • エラー内容
    (#4) Application request limit reached
  • HTTPレスポンスコード
    403(Forbidden)

FacebookのRate Limiting解説では、1時間あたり200コールまで大丈夫とあるのに、それ以下のアクセス数でも「リクエスト制限」がかかるというのは、どういうことでしょうか。

おそらく、Graph APIのコールにアクセストークンを指定していないのではないでしょうか。

その場合、リクエスト数がIPアドレス単位で判断されます。そのため、同じレンタルサーバーや同じ出口IPアドレスを使っている他のサイトのせいで、ほとんどAPIを使っていないあなたのサイトもリクエスト数制限がかかってしまうのです。

「以前は問題なかったのに、最近失敗するようになった」という場合は、同じIPアドレスを共有している他のシステムが最近動きを変えたのかもしれません。

解決策:APIコールにアクセストークンを指定する

結論としては、この場合の解決策は「アクセストークンを指定してAPIを呼び出す」です。

OGPのキャッシュクリアなどの、Graph APIのURLエンドポイントへのリクエストにもアクセストークンを指定できることは、リファレンスにも記載されています。

書式は次のとおりです。

  • いいね!数の取得
    https://graph.facebook.com/?id=対象ページのurl&access_token=アクセストークン
  • OGPキャッシュのクリア
    https://graph.facebook.com/?id=対象ページのurl&scrape=true&access_token=アクセストークン

このアクセストークンを取得するのも簡単です。

  1. 開発者向けFacebookでFacebookアプリを作る(ウェブサイトアプリとして作成)。

  2. そのアプリの「アプリID」と「app secret」を確認する(開発者向けFacebookで確認できます)。

  3. 次のリクエストでアクセストークンを取得します。

    https://graph.facebook.com/oauth/access_token?client_id=アプリID&client_secret=app secret&grant_type=client_credentials

JSONレスポンスからアクセストークンを取得できます。

このアクセストークン値を保存しておいて、いいね!数の取得やOGPキャッシュのクリアをするときに、access_tokenパラメータとして指定してリクエストを作ります。

これで、同じIPアドレスを使っている他のシステムが無茶をしているせいで、ちゃんと設計している自分のサイトのAPIリクエストが制限されるということはなくなります。

ただし、アクセストークンを取得するリクエストもRate Limitの対象です。そのため、アクセストークン取得のリクエストを投げすぎると、やはり制限されてしまいます。

アクセストークンはサーバー側で保存しておいて再利用するようにしましょう(ただし期限が切れたら再取得する必要があるので注意)。

◇◇◇

かなり技術的な内容なので、ほとんどのWeb担読者さんには何のことやらだと思います。

でも、大企業さんほど自社データセンターで同居している他部署が行儀悪い動きをしていて巻き添えで「(#4) Application request limit reached」をくらっていることがあるのではないかと思い、記事にしました。

何人かの方のお役に立てればと。

この記事が役に立ったらシェア!
tweet20はてなブックマークに追加
みんなが読んでるWeb担メルマガで、あなたも最新情報をチェック
  • SEOやアクセス解析のなどノウハウをゲット
  • 事例やインタビューも見逃さない
  • 要チェックのセミナー情報も届く
  • 編集長コラムを一足先に読める
日本赤十字社 東日本大震災 義援金募集
みんなが読んでるWeb担メルマガで、あなたも最新情報をチェック
  • SEOやアクセス解析のなどノウハウをゲット
  • 事例やインタビューも見逃さない
  • 要チェックのセミナー情報も届く
  • 編集長コラムを一足先に読める

Web業界の転職情報

もっと見る
Sponsored by

人気記事トップ10(過去7日間)

今日の用語

広告代理店
広告を出したい者(広告主)と広告を掲載する者(媒体)の間にたつ存在。 媒体 ... →用語集へ

連載/特集コーナーから探す

インフォメーション

Web担のメルマガを購読しませんか?
Web担の記事がコンパクトに毎週届くメールマガジン「Web担ウィークリー」は、10万人が読んでいる人気メルマガ。忙しいあなたの情報収集力をアップさせる強い味方で、お得な情報もいち早く入手できます。

Web担に広告を掲載しませんか?
購読者数10万人のメールマガジン広告をはじめとする広告サービスで、御社の認知向上やセミナー集客を強力にお手伝いいたします。

サイトマップ
RSSフィード


Web担を応援して支えてくださっている企業さま [各サービス/製品の紹介はこちらから]