Your SlideShare is downloading. ×
0
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Twitter API
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Twitter API

14,459

Published on

This presentation is written for the 1st Twitter Workshop in Japan. …

This presentation is written for the 1st Twitter Workshop in Japan.
History of Twitter API, Bad knowhows, ...
#twitterconf

Published in: Technology
1 Comment
13 Likes
Statistics
Notes
No Downloads
Views
Total Views
14,459
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
83
Comments
1
Likes
13
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Twitter の API 辻村 浩 (@tsupo)
  • 2. Agenda • 自己紹介 • イントロダクション – Twitter の API のうち、基本的なものについて、ざっとおさらい – Twitter 以外のマイクロブログの API はどうなっているか • Twitter API 四方山話 – 「API 制限」にまつわる話 – Twitter のバッドノウハウあれこれ – OAuth をめぐる水面下の戦い • 最近になって追加された API – search API – streaming API – lists関連API – retweet関連API – 既存の API の Geotagging 拡張 • まとめ – Twitter API の今後 – 行き当たりばったり指向プログラミング
  • 3. 自己紹介 • 仕事ではプログラム書いたり、他人のプログ ラムの添削したり。所属部署では社内人力検 索的なこともやってます。 • 2003年の春ごろ、RSS というものを知り、 RSS → blog → XML-RPC API → Web サービスのAPI一般 という感じで興味の対象 が移っていき、Twitter の API にも興味を 持ちました。
  • 4. Twitter 関連のアウトプット (1/4) • 「Twitter API 仕様書」日本語訳 – http://watcher.moe-nifty.com/memo/docs/twitterAPI.txt – 2009年12月3日現在、第41版が最新版 – 実際に API を使ってみて、仕様書の記述と違っ ているところがあれば、追記しています – Github で版数管理しています • http://github.com/tsupo/Twitter-API-Specification--written-in-Japanese- • 直したいところがあったら、勝手に fork して、直して、 pull request してください
  • 5. Twitter 関連のアウトプット (2/4) • 「Twitter!-Twitter API ガイドブック」 (九 天社、2007年) – 世界初の Twitter本 – 残念ながら、出版社がなくなって しまったので、現在は入手困難 – 最近の Twitter API 情報を反 映した改訂版を出したい – 協力していただける出版社を募 集中。よろしくお願いします
  • 6. Twitter 関連のアウトプット (3/4) • Twitterクライアント Chirrup – http://watcher.moe-nifty.com/memo/2007/04/chirrup.html – Windows 用 – Twitter 以外に、Jaiku, Timelog, Wassr, haru.fm, もごもご, はてなハイク に対応 – Flickr, tumblr, はてなFotolife, Gyazo との連携機能 – 2009年12月5日時点の最新版 • 2.11 現行バージョン • 2.99i 次期バージョンのプレビュー (3.0 preview-10) – ダウンロードは以下のページから • http://sites.google.com/site/tsujimura543/chirrup/archives • http://github.com/tsupo/Chirrup/downloads
  • 7. Twitter 関連のアウトプット (4/4) • ソーシャルブックマーク管理ツール bookey – http://watcher.moe-nifty.com/memo/2005/10/bookey.html – Twitter へのブックマーク投稿にも対応 • Webブラウザ tumblen – http://tumblen3.codeplex.com/ – Greasemonkey 相当の機能が最初から組み込まれた ブラウザ – IE コンポーネントを使用しつつ、JavaScript の実行の 一部を自前で処理 – Twitter, Jaiku, Timelog, Wassr, tumblr, LogPi, はてなハイク, もごもご, 等 14のサイトに投稿可能 – bookey 相当の機能も内蔵 (投稿機能のみ)
  • 8. イントロダクション • Twitter の API のうち、基本的なものにつ いて、ざっとおさらい • Twitter 以外のマイクロブログの API はど うなっているか
  • 9. Twitter API の基本 • とりあえず、これだけ知っていれば、クライア ントが作れる – タイムラインの取得 • friends_timeline • mention – 発言(つぶやき、ツイートの投稿) • update
  • 10. タイムラインの取得 • friends_timeline • public_timeline • user_timeline • mention – 自分への「言及」を取得 • reply – 自分への「返信」を取得 • home_timeline (新しいAPI) – friends_timeline の内容 + 公式RT を取得 • Get list statuses – list に登録した人たちのタイムライン取得
  • 11. 発言の投稿 • update – 尐し前までは、160文字まで投稿できた – 今は、140文字を1文字でも越えると投稿できない – 2007年の6月頃までは、発言の末尾に半角スペー スをつけて投稿しないと、投稿できなかった – 全く同一内容の発言を連続投稿しようとすると、最初 の1個のみ投稿成功。残りは反映されない • @kefir が「いいえ、ケフィアです。」を連続投稿できている のはなぜ? → 行末にランダムな個数の全角スペースをつけてるから – 隠し引数 source (BASIC認証使用時のみ)
  • 12. Twitter 類似サービスのAPI (1/2) • Twitter 互換 API – Identi.ca • Twitterクローン (StatusNet という名前でオープンソース化さ れている。以前、Laconica と呼ばれていたもの) • ほぼ全ての Twitter API を再現している – Wassr, はてなハイク • Twitter の API に独自拡張を加えたもの • 発言の投稿、タイムラインの取得など、一部のAPIのみサポート • クローズドベータテスト中の「はてなハイク2」はAPI未実装 – Timelog, haru.fm, もごもご • リクエストは Twitter 互換で、レスポンスが独自形式
  • 13. Twitter 類似サービスのAPI (2/2) • 独自 API – Jaiku (Googleによる買収前、買収後、Oauth対応後の3 つの時期でAPIが異なるが、以前の API もほぼそのまま使 えるようになっている) – Pownce (Six Apart の Motion のベース) • 初期は、API は非公開 • Adobe AIR を使って作成された公式クライアントのみ存在 – どんなAPIを使っているのか、パケットを観測してみたら…… – それは確かに API として公開できないよね • やがて、BASIC認証とFlickr風の認証の2種類のAPIが登場 – Twitter の API と比べるとかなり複雑 – クライアントを作ろうとしていたら、Six Apart に買収され、サービス終了 • Motion になってから API がどうなっているかは未調査
  • 14. Twitter API 四方山話 • 「API 制限」にまつわる話 • Twitter のバッドノウハウあれこれ • OAuth をめぐる水面下の戦い
  • 15. API 制限の登場 • まず、GET系のAPIに制限を導入 – 最初は、70回/1時間 (2008年5月下旬) – サーバに余裕が出てきたのか、やがて100回/1時間に – 現在は、150回/1時間 (2009年7月2日~) • 今では、POST系のAPIにも制限 – POST系(発言の投稿、ダイレクトメッセージの送信)に関し ては、各々1000回/日 – この制限はAPIだけではなく、Web や mobile web から の投稿、送信も対象になる – following にも 2000件/日 という制限 • 同一IPアドレスからのAPI実行回数制限もある – DoS攻撃の可能性ありと判定された時点で、そのIPアドレ スからのリクエストを受け付けなくなる
  • 16. バッドノウハウ • API 制限を回避するため、POSTメソッドを使 ってタイムラインを取得するという荒業 – まず、P3 がこの技を採用。他のクライアントにも 追随するもの出現 – 現在はこの技は使えない • 160文字以上の発言を投稿する技というのも あったが、今は封じられてしまった • 同一内容の発言を連続投稿する技 – @kefir が使ってる
  • 17. ホワイトリスト • 大量に API を使うアプリケーションは、申請し て認められれば、API をほぼ無制限に使える ようになる – ホワイトリストに登録してもらう – 1口辺り、2万API/日が使える • タイムラインの取得だけであれば、 streaming API を使うという手もある • 逆に、ブラックリストに登録されると、制限され まくりとの噂
  • 18. 日時の表現のゆれ • Twitter で使っているライブラリ関数が複数系統あ る (Ruby 標準のと、Rails で用意されているもの、 Twitter 独自のもの、……) – ライブラリ関数によって微妙に仕様が違う – 使用するライブラリ関数の切替のたびに変わる – 現在は Fri Aug 21 08:37:16 +0000 2009 のよう な形式で落ち着いている (が、油断はできない) • Jaiku でもフォーマットに混乱 – 2009-12-03T06:37:53Z (従来) – 2009-12-03T06-37-53Z (現在)
  • 19. from アプリケーション名 • 最初は、Alex にメールでお願いして対応してもらう 方式 • Web 上に用意された form から申請 • 現在は、OAuth で使用するキー (consumer key) を取得する form から申請 – OAuth 未対応のアプリでもこの申請方法を使う – BASIC 認証使用時は、update の source 引数で指定 した文字列が使用される – OAuth 使用時は、申請した文字列が使用される (source 引数は無視される)
  • 20. OAuth をめぐる水面下の戦い • 2009年2月、現行バージョンの OAuth がク ローズドからオープン状態へ • 2009年3月、OAuth のキーを取得するまつ りが勃発 • 2009年4月1日の前後数日間、おかしな現 象が発生 – 「from アプリケーション名」のアプリケーション名 が自分の申請したものとは違うものになる – なぜか「from 中の人」に化ける人、多数
  • 21. OAuth • 2007年11月に最初の版 – Webアプリケーションにしか対応していなかった • 2009年2月に公開された現行バージョン – デスクトップアプリケーションにも対応 – Flickr の認証方法に似ている – セッション固定脆弱性が発見され、改訂版が登場 • Twitter としては、現行バージョンの公開後1年で、 正式版にしたいらしい (いわゆる Twitter API version 2) • 半年後(2009年8月)以降にリリースするアプリケー ションは OAuth に対応してね (義務じゃないけど)
  • 22. OAuthライブラリの問題 (1/2) • OAuth は引数の名前の辞書順で引数を並べる必要がある – 以下のような仕様のライブラリだと、問題がある • ライブラリに実行したい API の URL を渡す – ライブラリに渡たる前の引数はソートされているとは限らない – ライブラリに渡たる前の引数はすでにパーセントエンコードされている • いったんデコードしてから並べ替え。そして再エンコード • 元のエンコードが再現できない場合がある – デコード後の引数に含まれる空白文字は、デコード前は %20 だったのか、+ だったのか – 投稿内容が文字化けする • Twitter側のsignatureと一致しなくなることがある – API の実行失敗 – Google Code で紹介されているC#用のライブラリに、この問題がある ことを確認
  • 23. OAuthライブラリの問題 (2/2) • OAuth のURLエンコード(パーセントエンコード) 独自ルール – 16進数部分に出現する英字は case sensitive • 大文字でなければいけないところ、小文字でなければいけ ないところがある – パーセントエンコードしてはいけない文字がある • 関連記事 – http://watcher.moe-nifty.com/memo/2009/04/c-oauth-c097.html – http://watcher.moe-nifty.com/memo/2009/03/oauth-7aaa.html
  • 24. Jaiku の OAuth • OAuth のキーを取得するときに、ユーザID(スクリ ーン名)も一緒に返してくれるので、スクリーン名を取 得するためのAPIを改めて発行する必要がない – Twitter では、認証結果(成功または失敗)しか返してくれ ない – Twitter は、OAuth 認証成立後、user_timeline を取 得する等の方法でスクリーン名を入手する必要がある (ス クリーン名を引数に取るAPIを実行するための前準備) – Twitter や Yahoo! の OAuth で見られた脆弱性は Jaiku の OAuth には存在しない(本当か?)ということで、 今も OAuth 1.0 のまま
  • 25. 最近になって追加された API • search API • streaming API • lists関連API • retweet関連API • 既存の API の Geo-tagging 拡張
  • 26. search API • 公式Twitter検索 (search.twitter.com) • streaming API バージョンもある – track • 以前、IM向けに提供されていたキーワード追跡 • そういえば、IM はどうなったのでしょうか? • Geo-tagging な情報を使った検索は coming soon – trends/available – trends/location
  • 27. streaming API • Twitter のサーバに接続しっ放しの状態に し、次々に流れてくる情報を受け取る – public_timeline 相当の情報 – 指定したユーザのタイムライン • private 設定しているユーザの情報は取れない – 指定したキーワードを含む発言 – 誰でも使用できるレベルのものから契約を結 ばないと使えないレベルのものまで • 誰でも使用できるレベルのものは結構抜けがある
  • 28. Geolocation (位置情報) • 2009年11月24日版までは Geolocation という 名前だったのが、29日版では geo-taggingという 名前に変わった • GeoJSON では “coordinates”:[経度,緯度] であるのに対し、GeoJSON準拠のはずのTwitter では “coordinates”:[緯度,経度] • GeoJSON では、元々は[X座標,Y座標]で、経度 は横方向(東西方向)なのでX座標、緯度は縦方向( 南北方向)なのでY座標という考え方から[経度,緯 度]の順で表現している
  • 29. WOEID • WOEID – a Yahoo! Where On Earth ID • http://developer.yahoo.com/geo/geoplanet/ – Yahoo! が世界中の都市、観光名所等に割り振っ た ID – trends/location で情報を取得するときに使用 • trends/available で緯度、経度 → WOEID 変換 – 指定した緯度、経度付近の WOEID 割り当て済みスポット (の うち、Twitter でのつぶやきが存在する場所)の一覧
  • 30. lists 関連 API • list の作成、変更、削除 • list への登録、list からの削除 • 指定ユーザが作成したlistの一覧取得 • 指定したlistに登録されている人の一覧取得 • 指定したlistを購読している人の一覧取得 • 指定したlistの購読開始、購読解除 • ……
  • 31. retweet • 今までユーザ主導で行われていた RT に 対し、Twitter 自身による「公式RT」が 登場 (2009年11月) • 事前に公表されていたドラフト段階の仕 様と、実際に運用が始まった仕様に違い がある (レスポンスの形式が変わった) • まだ、仕様は完全に固定されていないよ うで、ときどき変更されている
  • 32. retweet 関連API • home_timeline – retweet を含むタイムラインの取得 • retweet – RTしたい発言のIDを指定してリクエスト発行 • RTの一覧の取得 – 自分がRTした発言の一覧取得 – 自分の friends がRTした発言の一覧の取得 – 自分の発言のうち誰かにRTされた発言の一覧 取得
  • 33. 既存のAPIのGeo-tagging拡張 • 発言の投稿 (update) – 緯度、経度を指定して投稿することができる • タイムラインの取得 – 発言に緯度、経度情報(位置情報)が含まれる – ただし、位置情報は、最近2週間以内の発言 にのみ、付けられる (古い発言からは位置情 報が削除される) • 検索 – 指定した緯度、経度付近で発言されたものを 検索できる
  • 34. まとめ • Twitter API の今後 • 行き当たりばったり指向プログラミング
  • 35. Twitter API の今後 • Twitter API version 2 – 詳細は不明 – API は api.twitter.com に統一される? – 認証は OAuth に一本化? – 早ければ、2010年2月に登場
  • 36. 行き当たりばったり指向プログラミング • どうも Twitter の API の実装状況を見てい ると、行き当たりばったりにやってるように見 える – これからは mention だ、reply は廃止するね、 といいつつ、しっかり reply が残っていたり – GeoJSON 準拠といいながら、経度、緯度の順 番が逆とか – サーバの負荷状況に応じてアドホックに各種制 限(上限値)を何の予告もなくいじってみたり – API によって、引数の名前が違っていたり(同じ 意味の引数なのに)
  • 37. ご清聴、ありがとうございました

×