ようへい

2012年5月15日火曜日

Twitter APIで レスポンスコード 400 が返る場合の対処

400 Bad Requestが返される

このブログにもTwitterのWidgetを配置していますが、このWidgetの中ではTwitterのAPIが呼ばれています。
しかし、このAPIには、リクエストの制限が施されており、未認証状態でAPIをリクエストする場合は1時間あたり150リクエストまで、認証状態でリクエストする場合は、1時間あたり350リクエストまでとなっている。
Rate Limiting | Twitter Developers
https://dev.twitter.com/docs/rate-limiting たまたまFirebugのコンソールを眺めていたら、400 Bad RequestというエラーがTwitter APIで発生していた。
Twitter APIを利用している部分はtry/catchで囲んでいたのだが、どうやらエラーハンドリングができていないらしい。
使用していたコードは以下。
try{
  $(document).ready(function() {
    new TWTR.Widget({
      //必要に合わせパラメタを指定
    }).render().setUser('TwitterのID').start();
  });
} catch (e){}
エラーが発生したことで、Javascriptが中断され、後続の処理が実行されていない。
という事で解決策を調べてみた。

リクエスト可能な残数を調べる

Twitter APIのページを眺めていたら、APIをリクエスト可能な残数を調べることができるという事がわかった。
GET account/rate_limit_status | Twitter Developers
https://dev.twitter.com/docs/api/1/get/account/rate_limit_status これによると、http://api.twitter.com/1/account/rate_limit_status.format (formatはjson/xmlのいずれかを指定)をリクエストする事により、リクエスト可能な残数を取得できるとの事。
以下のリンクをクリックすると、リクエスト可能な残数(remaining_hits)を含めたJSONを参照できます。
https://api.twitter.com/1/account/rate_limit_status.json
という事で、Twitter APIによるウィジェットをリクエストする前に、あらかじめ上記のURLからJSONを取得し、リクエスト可能な残数を調べ、リクエスト可能であればウィジェットをリクエストするという処理にすれば良さそう。

対処したコード

前提条件
  • jQuery (1.5以上のバージョン) を読み込んでいる事
  • http://widgets.twimg.com/j/2/widget.jsを読み込んでいる事
try{
  $(document).ready(function() {
    $.getJSON('http://api.twitter.com/1/account/rate_limit_status.json?callback=?', {}, function(json){
      if(json.remaining_hits != "0"){
        new TWTR.Widget({
          //必要に合わせパラメタを指定
        }).render().setUser('TwitterのID').start();
      }
    });
  });
} catch (e){}

TWTR.Widgetのパラメタ

基本的には以下で自動生成できるので、それを使う。
Twitter / プロフィールウィジェット
http://twitter.com/about/resources/widgets/widget_profile
Twitter / 検索ウィジェット
https://twitter.com/about/resources/widgets/widget_search
Twitter / お気に入りウィジェット
https://twitter.com/about/resources/widgets/widget_faves
Twitter / リストウィジェット
https://twitter.com/about/resources/widgets/widget_list パラメタについて自分で調べてみた。
パラメタ 説明
id Widgetを挿入するエレメントのID
version Widgetのバージョン
type Widgetの種類
プロフィール/検索/お気に入り/一覧 のいずれかを指定
(profile|search|faves|favs|list|lists)
search 検索キーワード
typeにsearchを指定した場合必須
rpp 表示するツイート数
subject ウィジェットに表示するキャプション
typeにsearch,faves,favs,list,listsを指定した場合のみ有効
title ウィジェットに表示するタイトル
typeにsearch,faves,favs,list,listsを指定した場合のみ有効
footer フッタに表示するタイトル
creator 開発者モード(true|false)
trueにした場合、/stylesheets/widgets/widget.cssのCSSがリクエストされます。
このCSSはあらかじめ用意しておく必要があります。
interval ツイートを更新する間隔(msec)
features/loopをtrueにしている場合は、ループ間隔
width ウィジェットの幅(px)
height ウィジェットの高さ(px)
theme Widgetのスタイル
theme/shell Widget外側のスタイル
theme/tweets Widget内側(Tweet部分)のスタイル
features Widgetの機能を指定
features/scrollbar スクロールバーの表示/非表示(true|false)
features/loop ループ表示するか(true|false)
features/live 最新のデータを読み込むか(true|false)
features/behavior すべてのツイートを読み込むか(default|all)
関連記事

0 件のコメント:

コメントを投稿