Twitter API

  • 14,330 views
Uploaded 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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
14,330
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
80
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. ご清聴、ありがとうございました