Twitter の API
    辻村 浩
    (@tsupo)
Agenda
• 自己紹介
• イントロダクション
  – Twitter の API のうち、基本的なものについて、ざっとおさらい
  – Twitter 以外のマイクロブログの API はどうなっているか
• Twitter API 四方山...
自己紹介
• 仕事ではプログラム書いたり、他人のプログ
  ラムの添削したり。所属部署では社内人力検
  索的なこともやってます。
• 2003年の春ごろ、RSS というものを知り、
  RSS → blog → XML-RPC API → W...
Twitter 関連のアウトプット
            (1/4)
• 「Twitter API 仕様書」日本語訳
 – http://watcher.moe-nifty.com/memo/docs/twitterAPI.txt
 – 20...
Twitter 関連のアウトプット
            (2/4)
• 「Twitter!-Twitter API ガイドブック」 (九
  天社、2007年)
 – 世界初の Twitter本
 – 残念ながら、出版社がなくなって
   ...
Twitter 関連のアウトプット
             (3/4)
• Twitterクライアント Chirrup
  – http://watcher.moe-nifty.com/memo/2007/04/chirrup.html
  ...
Twitter 関連のアウトプット
            (4/4)
• ソーシャルブックマーク管理ツール bookey
 – http://watcher.moe-nifty.com/memo/2005/10/bookey.html
 – ...
イントロダクション

• Twitter の API のうち、基本的なものにつ
  いて、ざっとおさらい
• Twitter 以外のマイクロブログの API はど
  うなっているか
Twitter API の基本
• とりあえず、これだけ知っていれば、クライア
  ントが作れる
 – タイムラインの取得
  • friends_timeline
  • mention
 – 発言(つぶやき、ツイートの投稿)
  • upd...
タイムラインの取得
•   friends_timeline
•   public_timeline
•   user_timeline
•   mention
    – 自分への「言及」を取得
• reply
    – 自分への「返信」を...
発言の投稿
• update
  – 尐し前までは、160文字まで投稿できた
  – 今は、140文字を1文字でも越えると投稿できない
  – 2007年の6月頃までは、発言の末尾に半角スペー
    スをつけて投稿しないと、投稿できなかった
...
Twitter 類似サービスのAPI
           (1/2)
• Twitter 互換 API
  – Identi.ca
     • Twitterクローン (StatusNet という名前でオープンソース化さ
       れて...
Twitter 類似サービスのAPI
            (2/2)
• 独自 API
  – Jaiku (Googleによる買収前、買収後、Oauth対応後の3
    つの時期でAPIが異なるが、以前の API もほぼそのまま使
  ...
Twitter API 四方山話
• 「API 制限」にまつわる話
• Twitter のバッドノウハウあれこれ
• OAuth をめぐる水面下の戦い
API 制限の登場
• まず、GET系のAPIに制限を導入
 – 最初は、70回/1時間 (2008年5月下旬)
 – サーバに余裕が出てきたのか、やがて100回/1時間に
 – 現在は、150回/1時間 (2009年7月2日~)
• 今では、...
バッドノウハウ
• API 制限を回避するため、POSTメソッドを使
  ってタイムラインを取得するという荒業
 – まず、P3 がこの技を採用。他のクライアントにも
   追随するもの出現
 – 現在はこの技は使えない
• 160文字以上の発...
ホワイトリスト
• 大量に API を使うアプリケーションは、申請し
  て認められれば、API をほぼ無制限に使える
  ようになる
 – ホワイトリストに登録してもらう
 – 1口辺り、2万API/日が使える
• タイムラインの取得だけであ...
日時の表現のゆれ
• Twitter で使っているライブラリ関数が複数系統あ
  る (Ruby 標準のと、Rails で用意されているもの、
  Twitter 独自のもの、……)
 – ライブラリ関数によって微妙に仕様が違う
 – 使用する...
from アプリケーション名
• 最初は、Alex にメールでお願いして対応してもらう
  方式
• Web 上に用意された form から申請
• 現在は、OAuth で使用するキー (consumer
  key) を取得する form か...
OAuth をめぐる水面下の戦い
• 2009年2月、現行バージョンの OAuth がク
  ローズドからオープン状態へ
• 2009年3月、OAuth のキーを取得するまつ
  りが勃発
• 2009年4月1日の前後数日間、おかしな現
  象...
OAuth
• 2007年11月に最初の版
 – Webアプリケーションにしか対応していなかった
• 2009年2月に公開された現行バージョン
 – デスクトップアプリケーションにも対応
 – Flickr の認証方法に似ている
 – セッショ...
OAuthライブラリの問題
            (1/2)
• OAuth は引数の名前の辞書順で引数を並べる必要がある
 – 以下のような仕様のライブラリだと、問題がある
    • ライブラリに実行したい API の URL を渡す
 ...
OAuthライブラリの問題
               (2/2)
• OAuth のURLエンコード(パーセントエンコード)
  独自ルール
 – 16進数部分に出現する英字は case sensitive
    • 大文字でなければいけ...
Jaiku の OAuth
• OAuth のキーを取得するときに、ユーザID(スクリ
  ーン名)も一緒に返してくれるので、スクリーン名を取
  得するためのAPIを改めて発行する必要がない
 – Twitter では、認証結果(成功または失...
最近になって追加された API
• search API
• streaming API
• lists関連API
• retweet関連API
• 既存の API の Geo-tagging 拡張
search API
• 公式Twitter検索 (search.twitter.com)
• streaming API バージョンもある
  – track
    • 以前、IM向けに提供されていたキーワード追跡
    • そういえば、...
streaming API
• Twitter のサーバに接続しっ放しの状態に
  し、次々に流れてくる情報を受け取る
 – public_timeline 相当の情報
 – 指定したユーザのタイムライン
  • private 設定しているユ...
Geolocation (位置情報)
• 2009年11月24日版までは Geolocation という
  名前だったのが、29日版では geo-taggingという
  名前に変わった
• GeoJSON では
     “coordina...
WOEID
• WOEID
 – a Yahoo! Where On Earth ID
   • http://developer.yahoo.com/geo/geoplanet/
 – Yahoo! が世界中の都市、観光名所等に割り振っ
  ...
lists 関連 API
• list の作成、変更、削除
• list への登録、list からの削除
• 指定ユーザが作成したlistの一覧取得
• 指定したlistに登録されている人の一覧取得
• 指定したlistを購読している人の一覧取...
retweet
• 今までユーザ主導で行われていた RT に
  対し、Twitter 自身による「公式RT」が
  登場 (2009年11月)
• 事前に公表されていたドラフト段階の仕
  様と、実際に運用が始まった仕様に違い
  がある (...
retweet 関連API
• home_timeline
  – retweet を含むタイムラインの取得
• retweet
  – RTしたい発言のIDを指定してリクエスト発行
• RTの一覧の取得
  – 自分がRTした発言の一覧取得
...
既存のAPIのGeo-tagging拡張
• 発言の投稿 (update)
 – 緯度、経度を指定して投稿することができる
• タイムラインの取得
 – 発言に緯度、経度情報(位置情報)が含まれる
 – ただし、位置情報は、最近2週間以内の発言...
まとめ

• Twitter API の今後
• 行き当たりばったり指向プログラミング
Twitter API の今後
• Twitter API version 2
  – 詳細は不明
  – API は api.twitter.com に統一される?
  – 認証は OAuth に一本化?
  – 早ければ、2010年2月に登場
行き当たりばったり指向プログラミング
• どうも Twitter の API の実装状況を見てい
  ると、行き当たりばったりにやってるように見
  える
 – これからは mention だ、reply は廃止するね、
   といいつつ、しっ...
ご清聴、ありがとうございました
Upcoming SlideShare
Loading in...5
×

Twitter API

14,543

Published on

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

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

No notes for slide

Twitter API

  1. 1. Twitter の API 辻村 浩 (@tsupo)
  2. 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. 3. 自己紹介 • 仕事ではプログラム書いたり、他人のプログ ラムの添削したり。所属部署では社内人力検 索的なこともやってます。 • 2003年の春ごろ、RSS というものを知り、 RSS → blog → XML-RPC API → Web サービスのAPI一般 という感じで興味の対象 が移っていき、Twitter の API にも興味を 持ちました。
  4. 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. 5. Twitter 関連のアウトプット (2/4) • 「Twitter!-Twitter API ガイドブック」 (九 天社、2007年) – 世界初の Twitter本 – 残念ながら、出版社がなくなって しまったので、現在は入手困難 – 最近の Twitter API 情報を反 映した改訂版を出したい – 協力していただける出版社を募 集中。よろしくお願いします
  6. 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. 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. 8. イントロダクション • Twitter の API のうち、基本的なものにつ いて、ざっとおさらい • Twitter 以外のマイクロブログの API はど うなっているか
  9. 9. Twitter API の基本 • とりあえず、これだけ知っていれば、クライア ントが作れる – タイムラインの取得 • friends_timeline • mention – 発言(つぶやき、ツイートの投稿) • update
  10. 10. タイムラインの取得 • friends_timeline • public_timeline • user_timeline • mention – 自分への「言及」を取得 • reply – 自分への「返信」を取得 • home_timeline (新しいAPI) – friends_timeline の内容 + 公式RT を取得 • Get list statuses – list に登録した人たちのタイムライン取得
  11. 11. 発言の投稿 • update – 尐し前までは、160文字まで投稿できた – 今は、140文字を1文字でも越えると投稿できない – 2007年の6月頃までは、発言の末尾に半角スペー スをつけて投稿しないと、投稿できなかった – 全く同一内容の発言を連続投稿しようとすると、最初 の1個のみ投稿成功。残りは反映されない • @kefir が「いいえ、ケフィアです。」を連続投稿できている のはなぜ? → 行末にランダムな個数の全角スペースをつけてるから – 隠し引数 source (BASIC認証使用時のみ)
  12. 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. 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. 14. Twitter API 四方山話 • 「API 制限」にまつわる話 • Twitter のバッドノウハウあれこれ • OAuth をめぐる水面下の戦い
  15. 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. 16. バッドノウハウ • API 制限を回避するため、POSTメソッドを使 ってタイムラインを取得するという荒業 – まず、P3 がこの技を採用。他のクライアントにも 追随するもの出現 – 現在はこの技は使えない • 160文字以上の発言を投稿する技というのも あったが、今は封じられてしまった • 同一内容の発言を連続投稿する技 – @kefir が使ってる
  17. 17. ホワイトリスト • 大量に API を使うアプリケーションは、申請し て認められれば、API をほぼ無制限に使える ようになる – ホワイトリストに登録してもらう – 1口辺り、2万API/日が使える • タイムラインの取得だけであれば、 streaming API を使うという手もある • 逆に、ブラックリストに登録されると、制限され まくりとの噂
  18. 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. 19. from アプリケーション名 • 最初は、Alex にメールでお願いして対応してもらう 方式 • Web 上に用意された form から申請 • 現在は、OAuth で使用するキー (consumer key) を取得する form から申請 – OAuth 未対応のアプリでもこの申請方法を使う – BASIC 認証使用時は、update の source 引数で指定 した文字列が使用される – OAuth 使用時は、申請した文字列が使用される (source 引数は無視される)
  20. 20. OAuth をめぐる水面下の戦い • 2009年2月、現行バージョンの OAuth がク ローズドからオープン状態へ • 2009年3月、OAuth のキーを取得するまつ りが勃発 • 2009年4月1日の前後数日間、おかしな現 象が発生 – 「from アプリケーション名」のアプリケーション名 が自分の申請したものとは違うものになる – なぜか「from 中の人」に化ける人、多数
  21. 21. OAuth • 2007年11月に最初の版 – Webアプリケーションにしか対応していなかった • 2009年2月に公開された現行バージョン – デスクトップアプリケーションにも対応 – Flickr の認証方法に似ている – セッション固定脆弱性が発見され、改訂版が登場 • Twitter としては、現行バージョンの公開後1年で、 正式版にしたいらしい (いわゆる Twitter API version 2) • 半年後(2009年8月)以降にリリースするアプリケー ションは OAuth に対応してね (義務じゃないけど)
  22. 22. OAuthライブラリの問題 (1/2) • OAuth は引数の名前の辞書順で引数を並べる必要がある – 以下のような仕様のライブラリだと、問題がある • ライブラリに実行したい API の URL を渡す – ライブラリに渡たる前の引数はソートされているとは限らない – ライブラリに渡たる前の引数はすでにパーセントエンコードされている • いったんデコードしてから並べ替え。そして再エンコード • 元のエンコードが再現できない場合がある – デコード後の引数に含まれる空白文字は、デコード前は %20 だったのか、+ だったのか – 投稿内容が文字化けする • Twitter側のsignatureと一致しなくなることがある – API の実行失敗 – Google Code で紹介されているC#用のライブラリに、この問題がある ことを確認
  23. 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. 24. Jaiku の OAuth • OAuth のキーを取得するときに、ユーザID(スクリ ーン名)も一緒に返してくれるので、スクリーン名を取 得するためのAPIを改めて発行する必要がない – Twitter では、認証結果(成功または失敗)しか返してくれ ない – Twitter は、OAuth 認証成立後、user_timeline を取 得する等の方法でスクリーン名を入手する必要がある (ス クリーン名を引数に取るAPIを実行するための前準備) – Twitter や Yahoo! の OAuth で見られた脆弱性は Jaiku の OAuth には存在しない(本当か?)ということで、 今も OAuth 1.0 のまま
  25. 25. 最近になって追加された API • search API • streaming API • lists関連API • retweet関連API • 既存の API の Geo-tagging 拡張
  26. 26. search API • 公式Twitter検索 (search.twitter.com) • streaming API バージョンもある – track • 以前、IM向けに提供されていたキーワード追跡 • そういえば、IM はどうなったのでしょうか? • Geo-tagging な情報を使った検索は coming soon – trends/available – trends/location
  27. 27. streaming API • Twitter のサーバに接続しっ放しの状態に し、次々に流れてくる情報を受け取る – public_timeline 相当の情報 – 指定したユーザのタイムライン • private 設定しているユーザの情報は取れない – 指定したキーワードを含む発言 – 誰でも使用できるレベルのものから契約を結 ばないと使えないレベルのものまで • 誰でも使用できるレベルのものは結構抜けがある
  28. 28. Geolocation (位置情報) • 2009年11月24日版までは Geolocation という 名前だったのが、29日版では geo-taggingという 名前に変わった • GeoJSON では “coordinates”:[経度,緯度] であるのに対し、GeoJSON準拠のはずのTwitter では “coordinates”:[緯度,経度] • GeoJSON では、元々は[X座標,Y座標]で、経度 は横方向(東西方向)なのでX座標、緯度は縦方向( 南北方向)なのでY座標という考え方から[経度,緯 度]の順で表現している
  29. 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. 30. lists 関連 API • list の作成、変更、削除 • list への登録、list からの削除 • 指定ユーザが作成したlistの一覧取得 • 指定したlistに登録されている人の一覧取得 • 指定したlistを購読している人の一覧取得 • 指定したlistの購読開始、購読解除 • ……
  31. 31. retweet • 今までユーザ主導で行われていた RT に 対し、Twitter 自身による「公式RT」が 登場 (2009年11月) • 事前に公表されていたドラフト段階の仕 様と、実際に運用が始まった仕様に違い がある (レスポンスの形式が変わった) • まだ、仕様は完全に固定されていないよ うで、ときどき変更されている
  32. 32. retweet 関連API • home_timeline – retweet を含むタイムラインの取得 • retweet – RTしたい発言のIDを指定してリクエスト発行 • RTの一覧の取得 – 自分がRTした発言の一覧取得 – 自分の friends がRTした発言の一覧の取得 – 自分の発言のうち誰かにRTされた発言の一覧 取得
  33. 33. 既存のAPIのGeo-tagging拡張 • 発言の投稿 (update) – 緯度、経度を指定して投稿することができる • タイムラインの取得 – 発言に緯度、経度情報(位置情報)が含まれる – ただし、位置情報は、最近2週間以内の発言 にのみ、付けられる (古い発言からは位置情 報が削除される) • 検索 – 指定した緯度、経度付近で発言されたものを 検索できる
  34. 34. まとめ • Twitter API の今後 • 行き当たりばったり指向プログラミング
  35. 35. Twitter API の今後 • Twitter API version 2 – 詳細は不明 – API は api.twitter.com に統一される? – 認証は OAuth に一本化? – 早ければ、2010年2月に登場
  36. 36. 行き当たりばったり指向プログラミング • どうも Twitter の API の実装状況を見てい ると、行き当たりばったりにやってるように見 える – これからは mention だ、reply は廃止するね、 といいつつ、しっかり reply が残っていたり – GeoJSON 準拠といいながら、経度、緯度の順 番が逆とか – サーバの負荷状況に応じてアドホックに各種制 限(上限値)を何の予告もなくいじってみたり – API によって、引数の名前が違っていたり(同じ 意味の引数なのに)
  37. 37. ご清聴、ありがとうございました
  1. ¿Le ha llamado la atención una diapositiva en particular?

    Recortar diapositivas es una manera útil de recopilar información importante para consultarla más tarde.

×