SlideShare a Scribd company logo
1 of 37
Download to read offline
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

What's hot

watchOS 2 新機能の細かい話
watchOS 2 新機能の細かい話watchOS 2 新機能の細かい話
watchOS 2 新機能の細かい話Shuichi Tsutsumi
 
Firefox OSアーキテクチャクイックツアー - FxOSコードリーディングミートアップ#21向け追記版
Firefox OSアーキテクチャクイックツアー - FxOSコードリーディングミートアップ#21向け追記版Firefox OSアーキテクチャクイックツアー - FxOSコードリーディングミートアップ#21向け追記版
Firefox OSアーキテクチャクイックツアー - FxOSコードリーディングミートアップ#21向け追記版Masami Yabushita
 
中国Firefox OS勉強会 3rd 組み込み屋さんから見たFirefox OS
中国Firefox OS勉強会 3rd 組み込み屋さんから見たFirefox OS中国Firefox OS勉強会 3rd 組み込み屋さんから見たFirefox OS
中国Firefox OS勉強会 3rd 組み込み屋さんから見たFirefox OSMasami Yabushita
 
FxOSコードリーディングミートアップ#16 Vibration APIも読んでみた
FxOSコードリーディングミートアップ#16 Vibration APIも読んでみたFxOSコードリーディングミートアップ#16 Vibration APIも読んでみた
FxOSコードリーディングミートアップ#16 Vibration APIも読んでみたMasami Yabushita
 

What's hot (6)

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

Similar to Twitter API

ruby、sinatraで作るfacebookアプリ
ruby、sinatraで作るfacebookアプリruby、sinatraで作るfacebookアプリ
ruby、sinatraで作るfacebookアプリToshiya Kurishima
 
Robotium を使った UI テスト
Robotium を使った UI テストRobotium を使った UI テスト
Robotium を使った UI テスト健一 辰濱
 
Google App EngineでTwitterアプリを作ろう
Google App EngineでTwitterアプリを作ろうGoogle App EngineでTwitterアプリを作ろう
Google App EngineでTwitterアプリを作ろうkenji4569
 
単機能Twitter クライアント試作のための各種方法の検討
単機能Twitter クライアント試作のための各種方法の検討単機能Twitter クライアント試作のための各種方法の検討
単機能Twitter クライアント試作のための各種方法の検討Akira Niiyama
 
ASP.NET WebAPI 体験記 #clrh99
ASP.NET WebAPI 体験記 #clrh99ASP.NET WebAPI 体験記 #clrh99
ASP.NET WebAPI 体験記 #clrh99Katsuya Shimizu
 
SDUG Tokyo Meetup#7 About ReleaseNote
SDUG Tokyo Meetup#7 About ReleaseNoteSDUG Tokyo Meetup#7 About ReleaseNote
SDUG Tokyo Meetup#7 About ReleaseNoteTakahiro Yonei
 
Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)
Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)
Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)Yukinori KITADAI
 
a-blogcsm な寺子屋 2 in Okazaki
a-blogcsm な寺子屋 2 in Okazakia-blogcsm な寺子屋 2 in Okazaki
a-blogcsm な寺子屋 2 in OkazakiEtsushi Ishii
 
Tokyo gas #5_whatsnewinappsscript_公開用
Tokyo gas #5_whatsnewinappsscript_公開用Tokyo gas #5_whatsnewinappsscript_公開用
Tokyo gas #5_whatsnewinappsscript_公開用啓介 大橋
 
Opauthライブラリによるtwitter,facebook認証について
Opauthライブラリによるtwitter,facebook認証についてOpauthライブラリによるtwitter,facebook認証について
Opauthライブラリによるtwitter,facebook認証について松本 雄貴
 
Twitter クライアント開発のすすめ #twtr_hack
Twitter クライアント開発のすすめ #twtr_hackTwitter クライアント開発のすすめ #twtr_hack
Twitter クライアント開発のすすめ #twtr_hackMocel Mocelic
 
Anonymous OAuth Test
Anonymous OAuth TestAnonymous OAuth Test
Anonymous OAuth TestRyo Ito
 
Foss4G 2015 Drupal Hands-on Session
Foss4G 2015 Drupal Hands-on SessionFoss4G 2015 Drupal Hands-on Session
Foss4G 2015 Drupal Hands-on Session惠 紀野
 
Hatena blogdevelopmentflow
Hatena blogdevelopmentflowHatena blogdevelopmentflow
Hatena blogdevelopmentflowYasuhiro Onishi
 
Programming AWS with Python
Programming AWS with Python  Programming AWS with Python
Programming AWS with Python Yasuhiro Matsuo
 
OpenID Connect入門
OpenID Connect入門OpenID Connect入門
OpenID Connect入門土岐 孝平
 
Ember コミュニティとわたし
Ember コミュニティとわたしEmber コミュニティとわたし
Ember コミュニティとわたしRyunosuke SATO
 
Voicepic@FukuiMASeminar
Voicepic@FukuiMASeminarVoicepic@FukuiMASeminar
Voicepic@FukuiMASeminarManabu Shimobe
 

Similar to Twitter API (20)

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

Recently uploaded

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptxsn679259
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsWSO2
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 

Recently uploaded (10)

論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 

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