twitter api最新事情 - api meetup tokyo #1 #apijp
DESCRIPTION
TRANSCRIPT
#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'
�%38,7��API�
Web��%��'API�
� :'/'�4�*3'��:'Java,'Objec8ve9C'
� :'$��%"*�*3,'�8(�'��:'Java,'PHP,'Ruby,'.Net,'Objec8ve9C'
� :'Web��%'��:'HTML,'JavaScript'
Streamed'Tweets'
18�8�%38-� ��%�%38-�
#�8%+ 7' ����"%�
�-2�7'
#�8%'
)�68'
���7%'
!�5�%."�8�'
3�%'
�����'
%57&'
��'
)�68+ 7'
�' ,08%'
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エンジニア山本裕介。\r\n映画、アーチェリー、Java 好き\r\n#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のエンドポイントは たくさんあるので…
ストリーミング 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 より
#apijphttps://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