SlideShare a Scribd company logo
#apijp
API Meetup Tokyo #1
Twitter API最新事情
@yusuke
株式会社サムライズム 山本 裕介
• 山本 裕介(@yusuke)!
• 株式会社サムライズム 代表取締役!
• 過去の職場:
自己紹介
2000年∼ 新日鉄情報通信システム!
2002年∼ BEA Systems!
2006年∼ FAST Search & Transfer!
2008年∼ RedHat!
2011年∼ Twitter, Inc.
• 山本 裕介(@yusuke)!
• 株式会社サムライズム 代表取締役!
• 過去の職場:
自己紹介
2000年∼ 新日鉄情報通信システム!
2002年∼ BEA Systems!
2006年∼ FAST Search & Transfer!
2008年∼ RedHat!
2011年∼ Twitter, Inc.
SOAPに悩まされるSOAPに悩まされるSOAPに悩まされる
#apijp
自己紹介
• API大好き
#apijp
自己紹介
• API大好き
#apijp
自己紹介
Java用Twitter APIライブラリ
• API大好き
http://amzn.to/twtr-ref
Twitter APIポケットリファレンス
• 山本 裕介(@yusuke)!
• 株式会社サムライズム 代表取締役!
• 過去の職場:
自己紹介
2000年∼ 新日鉄情報通信システム!
2002年∼ BEA Systems!
2006年∼ FAST Search & Transfer!
2008年∼ RedHat!
2011年∼ Twitter, Inc.
• 開発ツール販売!
• Twitter API導入、運用支援サービス
株式会社サムライズム
• 開発ツール販売!
• Twitter API導入、運用支援サービス
株式会社サムライズム
http://samuraism.com/service
#apijp
Twitter API最新事情
• Twitter APIの概要	

• Twitter API設計の歴史	

• Twitter API最新事例	

• Twitter APIの現在
#apijp
Twitter APIの概要
Twi$er'API
REST'API'
API
Web 'API
:' '
:'Java,'Objec8ve9C '
:' ,' '
:'Java,'PHP,'Ruby,'.Net,'Objec8ve9C '
:'Web '
:'HTML,'JavaScript'
Streamed'Tweets'
'
'
'
'
'
'
'
'
'
'
'
' '
Twitter APIの概要
• アプリケーションの登録と権限	

• OAuth認証	

• 認証の種類
アプリケーション
• Twitterにアクセスする単位	

• ユーザーとは異なる	

• ユーザーはアプリケーションにアクセ
ス権限を委譲する
アプリケーションの登録
• https://dev.twitter.com/apps/new より
Application Type : 重要
アクセスタイプ
アクセスタイプ
Read,Write, &	

Access direct messages
Read & Write Read only
タイムラインなどの取得
○ ○ ○
ツイート
○ ○ ×
ダイレクトメッセージ送信
○ ○ ×
ダイレクトメッセージ受信・削除
○ × ×
デフォルト
OAuth
Sign in with Twitter
XAuth
難しいので詳しくは…
http://amzn.to/twtr-ref
Twitter APIポケットリファレンス
REST API
REST API
• プル型	

‣ タイムラインの取得	

‣ ユーザーのフォロー	

‣ ツイート	

‣ ダイレクトメッセージの送受信	

等々100近くのエンドポイント
REST API
• REST: REpresentational State Transfer	

• HTTPでAPI呼び出し
GET /1.1/statuses/public_timeline.json HTTP/1.1
Host: api.twitter.com
!
!
HTTP/1.1 200 OK
Date: Tue, 08 Feb 2011 07:52:51 GMT
Server: hi
Status: 200 OK
Content-Type: application/json; charset=utf-8
Vary: Accept-Encoding
Connection: close
!
[{"source": "<a href="http://foursquare.com" rel="nofollow">foursquare</a>",
"text": "I'm at IKEA 新三郷店 (新三郷ららシティ2-2-2, 三郷市) [pic]: http://4sq.com/
eOHZdS", ...
"user": {
"description": "Javaエンジニア山本裕介。rn映画、アーチェリー、Java 好きrn#twitter4j
#samurai", "name": "山本 裕介", ...}
},
...]
リクエスト
レスポンスヘッダ
レスポンスボディ
Twitter のREST API
• 全部で100近くのエンドポイント	

• 15の「リソース」に分類されている	

• リソース毎にパスが異なる(RESTful)
Timelineリソース	

https://api.twitter.com/1.1/statuses/***.json	

Userリソース	

https://api.twitter.com/1.1/users/***.json	

Direct messageリソース	

https://api.twitter.com/1.1/direct_messages/
***.json	

等
REST APIのテスト
• https://dev.twitter.com/console より
REST APIのエンドポイントは	

たくさんあるので…
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
ストリーミング API
• プッシュ型	

‣ 特定のユーザーのアクティビティをリアルタイ
ムに取得	

または	

‣ 指定したキーワードにマッチするツイートをリ
アルタイムに取得
ストリーミング API
• ツイート、DMなどを受信し続けられる	

• レートリミットがない	

• 利用出来る場面ではREST APIより優先的に利用	

• 技術	

• 普通のHTTP	

• レスポンスに終わりがない	

• cometでもWebSocketでもない
デモ
$ twitter4j/bin/stream/printSampleStream.sh
ストリーミングAPIの接続
• 十分に帯域のある環境で利用	

• 3G接続は推奨されない(モバイルアプリ不可)	

!
• 再接続アルゴリズムを正しく実装	

• アグレッシブに再接続すると一時的に使えなく
なる
再接続アルゴリズム
1.最初に接続切れを起こした場合	

• 即座に再接続を試みる。	

2.TCP/IPレベルのネットワークエラーが発生した場合	

• 250ミリ秒から始め、最大16秒までエラー毎に250ミリ秒足して
いくなど線形的に待ち時間を増やしていく。	

3.HTTPエラー(ステータスコードが201以上)が返った場合	

• 10秒から始め、失敗する毎に待ち時間を最大で240秒まで倍ずつ
指数関数的に増やしていく。	

• HTTPエラーは認証情報の間違いやプロキシの不具合などアプリ
ケーションの設定に起因する問題の可能性があるのでユーザー
へ通知することも考慮に入れる。
参考:Twitter APIポケットリファレンス P265	

https://dev.twitter.com/docs/streaming-api/concepts#connecting
ストリーミングAPIの種類
• Streamed Tweets	

• パブリックタイムラインを取得	

• User Stream	

• 単一ユーザーのタイムライン、イベントを取得	

• Site Stream	

• 複数ユーザーのタイムライン、イベントを取得
Streamed Tweets
• sample	

• filter	

• firehose	

• links	

• retweet
Streamed Tweets
• sample	

• filter	

• firehose	

• links	

• retweet
sample
• パブリックなツイートのうち1%を取得	

• エンドポイント(GET)	

‣ https://stream.twitter.com/1.1/statuses/sample.json	

• パラメータ	

‣ なし	

• レスポンス	

‣ statusオブジェクトのjson (REST APIと同じ)
sample
• 使いどころ	

• ツイート分析	

‣ 言語	

‣ クライアント	

‣ 流行の固有名詞抽出	

• 等々
FAQ
• sample.jsonを複数接続すれば・・・・	

• 同じツイートが返るので無意味。1%以上はとれない
filter
• 指定した条件のツイートを取得	

• エンドポイント(POST)	

‣ https://stream.twitter.com/1.1/statuses/filter.json	

• パラメータ	

‣ 色々(次ページ)	

• レスポンス	

‣ statusオブジェクトのjson (REST APIと同じ)
filterのパラメータ
• follow	

• 指定したユーザーIDのツイートを取得	

!
• track	

• 指定したキーワードを含むツイートを取得	

• 1キーワードは60文字まで	

• 日本語はトークナイズされない	

‣ 日本語ハッシュタグは指定可能
follow=1235,5678
track=%25twtr_hack,%25twtter4j
filterのパラメータ(続き)
• locations	

• 区域を指定してツイートを取得
locations=138.927,35.500,139.932,35.795
138.927,35.500
139.932,35.795
南西 北東
経度・緯度順なのに注意
FAQ
• 日本全体をカバーする区域を指定すれば・・	

• ヒットするツイートが多すぎる場合はその旨が通知される	

!
• 大量の区域を指定したい場合は?	

• 要相談	

• プロテクトアカウントのツイートは?	

• 取得できない。User StreamかSite Streamを利用
{"limit":{"track":1234}}
User Stream
• 単一ユーザーのタイムライン、イベントを取得	

!
• 目的: デスクトップの通知ツールなど	

• タイムラインのツイート、DM、fav / follow等を受信	

• プロテクトアカウントのツイートも受信可能	

• 要OAuth( or XAuth)
User Stream
• エンドポイント(POST)	

‣ https://userstream.twitter.com/1.1/user.json	

• レスポンス	

‣ statusオブジェクトのjson等
Site Stream(beta)
• 複数ユーザーのタイムライン、イベントを取得	

!
• 目的: Twitter連携するサービスなど	

• タイムラインのツイート、DM、fav / follow等を受信	

• プロテクトアカウントのツイートも受信可能	

• 要OAuth
Site Stream
• エンドポイント(POST)	

‣ https://sitestream.twitter.com/1.1/site.json	

• パラメータ	

‣ follow: 受信するユーザーIDをカンマ区切りで指定、100人まで	

!
!
• レスポンス	

‣ statusオブジェクトのjson等
follow=1234,5678,91023,45324....
Site Streamのコネクション管理
• 接続時に指定できるユーザーは100人まで	

• 事前にOAuth認証しておく必要がある	

!
• コントロールストリームでユーザーの追加、
削除可能	

• 1コネクションで最大1000人まで受信可能
コントロールストリーム
• Site Stream接続時にコントロール用エンドポ
イントが返る	

!
!
• RESTでコントロール用エンドポイントを操作
https://dev.twitter.com/docs/streaming-api/control-streams
{"control": {
“control_uri":"/1.1/site/c/
1_1_54e345d655ee3e8d"
}}
https://sitestream.twitter.com/1.1/site/c/1_1_54e345d655ee3e8d”
コントロールストリームのメソッド
• ユーザーの追加 (POST)	

!
• パラメータ	

‣ user_id: カンマ区切りのユーザーID(100人まで)
https://sitestream.twitter.com/1.1/site/c/****/add_user.json”
コントロールストリームのメソッド
• ユーザーの削除(POST)	

!
• パラメータ	

‣ user_id: カンマ区切りのユーザーID(100人まで)
https://sitestream.twitter.com/1.1/site/c/****/remove_user.json”
ベストプラクティス
• 可能な限りストリーミング APIを使う	

• 参照系はレートリミット回避のためできるかぎりREST
APIよりもストリーミング APIを利用	

• gzipを使う	

• 帯域を節約	

• 接続ネットワークを確認	

• 3G接続での利用は推奨されない。接続が切られることも
FAQ
• ストリーミングAPIはJavaScriptから使える?	

• 使えない。サーバサイドの仕組みが必要	

• 1%以上のツイートにアクセスしたい	

• http://gnip.com/	

• firehoseは?	

• 一般に提供はされていない
Webサイト向けAPI
• サーバサイドの実装不要	

• Web Intents	

• フォローボタン	

• Twitterボタン	

• ウィジェット
Web Intents
• リンクで簡単にTwitterと連携
http://bit.ly/web-intents
<script type="text/javascript" src="http://
platform.twitter.com/widgets.js"></script>
!
<a href="http://twitter.com/intent/
retweet?tweet_id=163049746431348736">リツイー
ト</a>
Twitterボタン
ウィジェット
情報源
• dev.twitter.com - Discussions	

!
!
• @TwitterDevJP	

!
!
• The Twitter Japan Developer Blog
https://dev.twitter.com/discussions
https://twitter.com/TwitterDevJP
https://blog.twitter.com/ja/developer
APIたくさんあるので詳しくは…
http://amzn.to/twtr-ref
Twitter APIポケットリファレンス
#apijp
Twitter APIの応用範囲
Twitter APIの応用範囲
• 認証	

• ソーシャルログイン
https://manage.doorkeeper.jp/ より
Twitter APIの応用範囲
• キュレーション
http://togetter.com より
Twitter APIの応用範囲
• 出力系	

• 通知 / アラート
Twitter APIの応用範囲
• 出力系	

• 告知
Twitter APIの応用範囲
∞
#apijp
Twitter API最新事例
#apijp
Twitter API最新事例
• YAYOI SMART CONNECT
https://www.yayoi-kk.co.jp/smart/index.html より
#apijp
Twitter API最新事例
https://www.yayoi-kk.co.jp/smart/index.html より
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
#apijp
https://www.yayoi-kk.co.jp/smart/index.html より
#apijp
Twitter API最新事例
• YAYOI SMART CONNECT	

• Twitterが入力ソースの1つ
Twitter APIが弥生のAPIにもなる
#apijp
Twitter API最新事例
• #アマゾンポチ
https://blog.twitter.com/node/4502 より
#apijp
Twitter API設計の歴史
#apijp
Twitter API設計の歴史
• 2006年 Twitter / Twitter APIリリース	

• 2009年3月 OAuth対応	

• 2009年5月 Streaming APIリリース	

• 2009年9月 Twitter Web AJAX化 / 検索APIリリース	

• 2012年9月 Twitter API 1.1リリース	

• 2013年6月 Twitter API 1.0 / Twitter Anywhere 廃止	

• 2014年1月 全面SSL化
Twitter API設計の歴史
• 2006年 Twitter / Twitter APIリリース	

• 2009年3月 OAuth対応	

• 2009年5月 Streaming APIリリース	

• 2009年9月 Twitter Web AJAX化 / 検索APIリリース	

• 2012年9月 Twitter API 1.1リリース	

• 2013年6月 Twitter API 1.0 / Twitter Anywhere 廃止	

• 2014年1月 全面SSL化
セキュリティ
スケーラビリティ
新機能追従
セキュリティ
#apijp
人気を支えてきたAPIの設計
• シンプルなセキュリティモデル	

• 全部アクセス可のBASIC認証	

• OAuthは読み・書き・DMアクセス可の3種のみ
#apijp
Twitter APIの設計
• ゆるい設計: スキーマ定義なし	

• 実態に応じてフレキシブルに変更	

• 不定期に増える属性	

• 大きな変更はAPIバージョニングにて対応
#apijp
人気を支えてきたAPIの設計
• レートリミット	

• 2007年∼ 150回/h	

• 2009年∼ 350回/h	

• 2012年∼ 15回/15分:エンドポイント
レスポンスより詳細を取得可
#apijp
Twitter APIの現在
#apijp
Twitter APIの現在
• 2006年∼2012年 : 2ヶ月に1回くらい新機能追加	

• 2012年9月Twitter API 1.1リリース、安定期突入
#apijp
Twitter APIの現在
• 今年に入り多くの新機能	

• ダイレクトメッセージへの画像添付	

• 複数画像添付	

• ミュート
#apijp
締め
#apijp
Twitter APIの今後
#apijp
Twitter APIの今後
Webの進化
Twitterの進化
Twitter APIの進化
#apijp
ありがとうございました
@yusuke

More Related Content

Twitter API最新事情 - API Meetup Tokyo #1 #apijp