SlideShare a Scribd company logo
Twitter の API
    辻村 浩
    (@tsupo)
Agenda
• 自己紹介
• イントロダクション
  – Twitter の API のうち、基本的なものについて、ざっとおさらい
  – Twitter 以外のマイクロブログの API はどうなっているか
• Twitter API 四方山話
  – 「API 制限」にまつわる話
  – Twitter のバッドノウハウあれこれ
  – OAuth をめぐる水面下の戦い
• 最近になって追加された API
  –   search API
  –   streaming API
  –   lists関連API
  –   retweet関連API
  –   既存の API の Geotagging 拡張
• まとめ
  – Twitter API の今後
  – 行き当たりばったり指向プログラミング
自己紹介
• 仕事ではプログラム書いたり、他人のプログ
  ラムの添削したり。所属部署では社内人力検
  索的なこともやってます。
• 2003年の春ごろ、RSS というものを知り、
  RSS → blog → XML-RPC API → Web
  サービスのAPI一般 という感じで興味の対象
  が移っていき、Twitter の API にも興味を
  持ちました。
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 してください
Twitter 関連のアウトプット
            (2/4)
• 「Twitter!-Twitter API ガイドブック」 (九
  天社、2007年)
 – 世界初の Twitter本
 – 残念ながら、出版社がなくなって
   しまったので、現在は入手困難
 – 最近の Twitter API 情報を反
   映した改訂版を出したい
 – 協力していただける出版社を募
   集中。よろしくお願いします
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
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 相当の機能も内蔵 (投稿機能のみ)
イントロダクション

• Twitter の API のうち、基本的なものにつ
  いて、ざっとおさらい
• Twitter 以外のマイクロブログの API はど
  うなっているか
Twitter API の基本
• とりあえず、これだけ知っていれば、クライア
  ントが作れる
 – タイムラインの取得
  • friends_timeline
  • mention
 – 発言(つぶやき、ツイートの投稿)
  • update
タイムラインの取得
•   friends_timeline
•   public_timeline
•   user_timeline
•   mention
    – 自分への「言及」を取得
• reply
    – 自分への「返信」を取得
• home_timeline (新しいAPI)
    – friends_timeline の内容 + 公式RT を取得
• Get list statuses
    – list に登録した人たちのタイムライン取得
発言の投稿
• update
  – 尐し前までは、160文字まで投稿できた
  – 今は、140文字を1文字でも越えると投稿できない
  – 2007年の6月頃までは、発言の末尾に半角スペー
    スをつけて投稿しないと、投稿できなかった
  – 全く同一内容の発言を連続投稿しようとすると、最初
    の1個のみ投稿成功。残りは反映されない
    • @kefir が「いいえ、ケフィアです。」を連続投稿できている
      のはなぜ?
      → 行末にランダムな個数の全角スペースをつけてるから
  – 隠し引数 source (BASIC認証使用時のみ)
Twitter 類似サービスのAPI
           (1/2)
• Twitter 互換 API
  – Identi.ca
     • Twitterクローン (StatusNet という名前でオープンソース化さ
       れている。以前、Laconica と呼ばれていたもの)
     • ほぼ全ての Twitter API を再現している
  – Wassr, はてなハイク
     • Twitter の API に独自拡張を加えたもの
     • 発言の投稿、タイムラインの取得など、一部のAPIのみサポート
     • クローズドベータテスト中の「はてなハイク2」はAPI未実装
  – Timelog, haru.fm, もごもご
     • リクエストは Twitter 互換で、レスポンスが独自形式
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 がどうなっているかは未調査
Twitter API 四方山話
• 「API 制限」にまつわる話
• Twitter のバッドノウハウあれこれ
• OAuth をめぐる水面下の戦い
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アドレ
   スからのリクエストを受け付けなくなる
バッドノウハウ
• API 制限を回避するため、POSTメソッドを使
  ってタイムラインを取得するという荒業
 – まず、P3 がこの技を採用。他のクライアントにも
   追随するもの出現
 – 現在はこの技は使えない
• 160文字以上の発言を投稿する技というのも
  あったが、今は封じられてしまった
• 同一内容の発言を連続投稿する技
 – @kefir が使ってる
ホワイトリスト
• 大量に API を使うアプリケーションは、申請し
  て認められれば、API をほぼ無制限に使える
  ようになる
 – ホワイトリストに登録してもらう
 – 1口辺り、2万API/日が使える
• タイムラインの取得だけであれば、
  streaming API を使うという手もある
• 逆に、ブラックリストに登録されると、制限され
  まくりとの噂
日時の表現のゆれ
• Twitter で使っているライブラリ関数が複数系統あ
  る (Ruby 標準のと、Rails で用意されているもの、
  Twitter 独自のもの、……)
 – ライブラリ関数によって微妙に仕様が違う
 – 使用するライブラリ関数の切替のたびに変わる
 – 現在は Fri Aug 21 08:37:16 +0000 2009 のよう
   な形式で落ち着いている (が、油断はできない)
• Jaiku でもフォーマットに混乱
 – 2009-12-03T06:37:53Z (従来)
 – 2009-12-03T06-37-53Z (現在)
from アプリケーション名
• 最初は、Alex にメールでお願いして対応してもらう
  方式
• Web 上に用意された form から申請
• 現在は、OAuth で使用するキー (consumer
  key) を取得する form から申請
 – OAuth 未対応のアプリでもこの申請方法を使う
 – BASIC 認証使用時は、update の source 引数で指定
   した文字列が使用される
 – OAuth 使用時は、申請した文字列が使用される
   (source 引数は無視される)
OAuth をめぐる水面下の戦い
• 2009年2月、現行バージョンの OAuth がク
  ローズドからオープン状態へ
• 2009年3月、OAuth のキーを取得するまつ
  りが勃発
• 2009年4月1日の前後数日間、おかしな現
  象が発生
 – 「from アプリケーション名」のアプリケーション名
   が自分の申請したものとは違うものになる
 – なぜか「from 中の人」に化ける人、多数
OAuth
• 2007年11月に最初の版
 – Webアプリケーションにしか対応していなかった
• 2009年2月に公開された現行バージョン
 – デスクトップアプリケーションにも対応
 – Flickr の認証方法に似ている
 – セッション固定脆弱性が発見され、改訂版が登場
• Twitter としては、現行バージョンの公開後1年で、
  正式版にしたいらしい (いわゆる Twitter API
  version 2)
• 半年後(2009年8月)以降にリリースするアプリケー
  ションは OAuth に対応してね (義務じゃないけど)
OAuthライブラリの問題
            (1/2)
• OAuth は引数の名前の辞書順で引数を並べる必要がある
 – 以下のような仕様のライブラリだと、問題がある
    • ライブラリに実行したい API の URL を渡す
      – ライブラリに渡たる前の引数はソートされているとは限らない
      – ライブラリに渡たる前の引数はすでにパーセントエンコードされている
    • いったんデコードしてから並べ替え。そして再エンコード
    • 元のエンコードが再現できない場合がある
       – デコード後の引数に含まれる空白文字は、デコード前は %20
         だったのか、+ だったのか
       – 投稿内容が文字化けする
    • Twitter側のsignatureと一致しなくなることがある
       – API の実行失敗
 – Google Code で紹介されているC#用のライブラリに、この問題がある
   ことを確認
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
Jaiku の OAuth
• OAuth のキーを取得するときに、ユーザID(スクリ
  ーン名)も一緒に返してくれるので、スクリーン名を取
  得するためのAPIを改めて発行する必要がない
 – Twitter では、認証結果(成功または失敗)しか返してくれ
   ない
 – Twitter は、OAuth 認証成立後、user_timeline を取
   得する等の方法でスクリーン名を入手する必要がある (ス
   クリーン名を引数に取るAPIを実行するための前準備)
 – Twitter や Yahoo! の OAuth で見られた脆弱性は
   Jaiku の OAuth には存在しない(本当か?)ということで、
   今も OAuth 1.0 のまま
最近になって追加された API
• search API
• streaming API
• lists関連API
• retweet関連API
• 既存の API の Geo-tagging 拡張
search API
• 公式Twitter検索 (search.twitter.com)
• streaming API バージョンもある
  – track
    • 以前、IM向けに提供されていたキーワード追跡
    • そういえば、IM はどうなったのでしょうか?
• Geo-tagging な情報を使った検索は
  coming soon
  – trends/available
  – trends/location
streaming API
• Twitter のサーバに接続しっ放しの状態に
  し、次々に流れてくる情報を受け取る
 – public_timeline 相当の情報
 – 指定したユーザのタイムライン
  • private 設定しているユーザの情報は取れない
 – 指定したキーワードを含む発言
 – 誰でも使用できるレベルのものから契約を結
   ばないと使えないレベルのものまで
  • 誰でも使用できるレベルのものは結構抜けがある
Geolocation (位置情報)
• 2009年11月24日版までは Geolocation という
  名前だったのが、29日版では geo-taggingという
  名前に変わった
• GeoJSON では
     “coordinates”:[経度,緯度]
  であるのに対し、GeoJSON準拠のはずのTwitter
  では
      “coordinates”:[緯度,経度]
• GeoJSON では、元々は[X座標,Y座標]で、経度
  は横方向(東西方向)なのでX座標、緯度は縦方向(
  南北方向)なのでY座標という考え方から[経度,緯
  度]の順で表現している
WOEID
• WOEID
 – a Yahoo! Where On Earth ID
   • http://developer.yahoo.com/geo/geoplanet/
 – Yahoo! が世界中の都市、観光名所等に割り振っ
   た ID
 – trends/location で情報を取得するときに使用
   • trends/available で緯度、経度 → WOEID 変換
     – 指定した緯度、経度付近の WOEID 割り当て済みスポット (の
       うち、Twitter でのつぶやきが存在する場所)の一覧
lists 関連 API
• list の作成、変更、削除
• list への登録、list からの削除
• 指定ユーザが作成したlistの一覧取得
• 指定したlistに登録されている人の一覧取得
• 指定したlistを購読している人の一覧取得
• 指定したlistの購読開始、購読解除
• ……
retweet
• 今までユーザ主導で行われていた RT に
  対し、Twitter 自身による「公式RT」が
  登場 (2009年11月)
• 事前に公表されていたドラフト段階の仕
  様と、実際に運用が始まった仕様に違い
  がある (レスポンスの形式が変わった)
• まだ、仕様は完全に固定されていないよ
  うで、ときどき変更されている
retweet 関連API
• home_timeline
  – retweet を含むタイムラインの取得
• retweet
  – RTしたい発言のIDを指定してリクエスト発行
• RTの一覧の取得
  – 自分がRTした発言の一覧取得
  – 自分の friends が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 は廃止するね、
   といいつつ、しっかり reply が残っていたり
 – GeoJSON 準拠といいながら、経度、緯度の順
   番が逆とか
 – サーバの負荷状況に応じてアドホックに各種制
   限(上限値)を何の予告もなくいじってみたり
 – API によって、引数の名前が違っていたり(同じ
   意味の引数なのに)
ご清聴、ありがとうございました

More Related Content

PPTX
Twitter API で学ぶ OAuth
PDF
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
PDF
Twitter4jハンズオン 5/1 #twtr_hack
KEY
第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack
PDF
第2.1回Twitter API勉強会 - 検索API
ODP
TwitterのStreaming APIについて
PDF
Twitter API1.1 #twtr_hack
PDF
WatchKitを実際にさわってみてわかったこと
Twitter API で学ぶ OAuth
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Twitter4jハンズオン 5/1 #twtr_hack
第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack
第2.1回Twitter API勉強会 - 検索API
TwitterのStreaming APIについて
Twitter API1.1 #twtr_hack
WatchKitを実際にさわってみてわかったこと

What's hot (6)

PDF
watchOS 2 新機能の細かい話
PDF
Apple Watch 間通信
PPTX
Firefox OSアーキテクチャクイックツアー - FxOSコードリーディングミートアップ#21向け追記版
PPTX
中国Firefox OS勉強会 3rd 組み込み屋さんから見たFirefox OS
PPTX
FxOSコードリーディングミートアップ#16 Vibration APIも読んでみた
PPT
appengine活用事例資料@TDDBC札幌2.1
watchOS 2 新機能の細かい話
Apple Watch 間通信
Firefox OSアーキテクチャクイックツアー - FxOSコードリーディングミートアップ#21向け追記版
中国Firefox OS勉強会 3rd 組み込み屋さんから見たFirefox OS
FxOSコードリーディングミートアップ#16 Vibration APIも読んでみた
appengine活用事例資料@TDDBC札幌2.1
Ad

Similar to Twitter API (20)

PDF
ruby、sinatraで作るfacebookアプリ
PPTX
Robotium を使った UI テスト
PPT
Google App EngineでTwitterアプリを作ろう
PPT
単機能Twitter クライアント試作のための各種方法の検討
PDF
ASP.NET WebAPI 体験記 #clrh99
PDF
SDUG Tokyo Meetup#7 About ReleaseNote
KEY
Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)
PDF
a-blogcsm な寺子屋 2 in Okazaki
PPTX
Tokyo gas #5_whatsnewinappsscript_公開用
PPTX
Opauthライブラリによるtwitter,facebook認証について
KEY
Twitter クライアント開発のすすめ #twtr_hack
PDF
Anonymous OAuth Test
PDF
APIMeetup 20170329_ichimura
PDF
Foss4G 2015 Drupal Hands-on Session
PDF
Hatena blogdevelopmentflow
PPTX
Programming AWS with Python
PDF
Enumerate
PDF
OpenID Connect入門
PDF
Ember コミュニティとわたし
PDF
Voicepic@FukuiMASeminar
ruby、sinatraで作るfacebookアプリ
Robotium を使った UI テスト
Google App EngineでTwitterアプリを作ろう
単機能Twitter クライアント試作のための各種方法の検討
ASP.NET WebAPI 体験記 #clrh99
SDUG Tokyo Meetup#7 About ReleaseNote
Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)
a-blogcsm な寺子屋 2 in Okazaki
Tokyo gas #5_whatsnewinappsscript_公開用
Opauthライブラリによるtwitter,facebook認証について
Twitter クライアント開発のすすめ #twtr_hack
Anonymous OAuth Test
APIMeetup 20170329_ichimura
Foss4G 2015 Drupal Hands-on Session
Hatena blogdevelopmentflow
Programming AWS with Python
Enumerate
OpenID Connect入門
Ember コミュニティとわたし
Voicepic@FukuiMASeminar
Ad

Twitter API

  • 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 によって、引数の名前が違っていたり(同じ 意味の引数なのに)