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 件のコメント:
コメントを投稿