twitter api最新事情 - api meetup tokyo #1 #apijp

88
#apijp API Meetup Tokyo #1 Twitter API 最新事情 @yusuke 株式会社サムライズム 山本 裕介

Upload: yusuke-yamamoto

Post on 18-Dec-2014

4.567 views

Category:

Technology


0 download

DESCRIPTION

 

TRANSCRIPT

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

#apijp

API Meetup Tokyo #1

Twitter API最新事情

@yusuke

株式会社サムライズム 山本 裕介

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

• 山本 裕介(@yusuke)!

• 株式会社サムライズム 代表取締役!

• 過去の職場:

自己紹介

2000年~ 新日鉄情報通信システム!

2002年~ BEA Systems!

2006年~ FAST Search & Transfer!

2008年~ RedHat!

2011年~ Twitter, Inc.

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

• 山本 裕介(@yusuke)!

• 株式会社サムライズム 代表取締役!

• 過去の職場:

自己紹介

2000年~ 新日鉄情報通信システム!

2002年~ BEA Systems!

2006年~ FAST Search & Transfer!

2008年~ RedHat!

2011年~ Twitter, Inc.

SOAPに悩まされるSOAPに悩まされるSOAPに悩まされる

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

#apijp

自己紹介• API大好き

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

#apijp

自己紹介• API大好き

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

#apijp

自己紹介

Java用Twitter APIライブラリ

• API大好き

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

http://amzn.to/twtr-ref

Twitter APIポケットリファレンス

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

• 山本 裕介(@yusuke)!

• 株式会社サムライズム 代表取締役!

• 過去の職場:

自己紹介

2000年~ 新日鉄情報通信システム!

2002年~ BEA Systems!

2006年~ FAST Search & Transfer!

2008年~ RedHat!

2011年~ Twitter, Inc.

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

• 開発ツール販売!

• Twitter API導入、運用支援サービス

株式会社サムライズム

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

• 開発ツール販売!

• Twitter API導入、運用支援サービス

株式会社サムライズム

http://samuraism.com/service

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

#apijp

Twitter API最新事情• Twitter APIの概要

• Twitter API設計の歴史

• Twitter API最新事例

• Twitter APIの現在

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

#apijp

Twitter APIの概要

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

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%'

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

Twitter APIの概要• アプリケーションの登録と権限 • OAuth認証

• 認証の種類

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

アプリケーション• Twitterにアクセスする単位

• ユーザーとは異なる • ユーザーはアプリケーションにアクセス権限を委譲する

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

アプリケーションの登録• https://dev.twitter.com/apps/new より

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

Application Type : 重要

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

アクセスタイプ

アクセスタイプ Read, Write, & Access direct messages

Read & Write Read only

タイムラインなどの取得 ○ ○ ○ツイート ○ ○ ×

ダイレクトメッセージ送信 ○ ○ ×ダイレクトメッセージ受信・削除 ○ × ×

デフォルト

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

OAuth

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

Sign in with Twitter

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

XAuth

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

難しいので詳しくは…

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

http://amzn.to/twtr-ref

Twitter APIポケットリファレンス

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

REST API

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

REST API• プル型 ‣ タイムラインの取得 ‣ ユーザーのフォロー ‣ ツイート ‣ ダイレクトメッセージの送受信

等々100近くのエンドポイント

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

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": "山本 裕介", ...} }, ...]

リクエスト

レスポンスヘッダ

レスポンスボディ

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

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 等

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

REST APIのテスト• https://dev.twitter.com/console より

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

REST APIのエンドポイントは たくさんあるので…

Page 30: Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Page 31: Twitter API最新事情 - API Meetup Tokyo #1 #apijp

ストリーミング API• プッシュ型 ‣ 特定のユーザーのアクティビティをリアルタイムに取得

または ‣ 指定したキーワードにマッチするツイートをリアルタイムに取得

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

ストリーミング API• ツイート、DMなどを受信し続けられる

• レートリミットがない • 利用出来る場面ではREST APIより優先的に利用

• 技術 • 普通のHTTP

• レスポンスに終わりがない • cometでもWebSocketでもない

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

デモ$ twitter4j/bin/stream/printSampleStream.sh

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

ストリーミングAPIの接続• 十分に帯域のある環境で利用

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

!

• 再接続アルゴリズムを正しく実装 • アグレッシブに再接続すると一時的に使えなくなる

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

再接続アルゴリズム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

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

ストリーミングAPIの種類• Streamed Tweets

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

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

• Site Stream • 複数ユーザーのタイムライン、イベントを取得

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

Streamed Tweets• sample

• filter

• firehose

• links

• retweet

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

Streamed Tweets• sample

• filter

• firehose

• links

• retweet

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

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

• エンドポイント(GET)

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

• パラメータ ‣ なし • レスポンス ‣ statusオブジェクトのjson (REST APIと同じ)

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

sample• 使いどころ

• ツイート分析 ‣ 言語

‣ クライアント

‣ 流行の固有名詞抽出

• 等々

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

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

• 同じツイートが返るので無意味。1%以上はとれない

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

filter• 指定した条件のツイートを取得 • エンドポイント(POST)

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

• パラメータ ‣ 色々(次ページ)

• レスポンス ‣ statusオブジェクトのjson (REST APIと同じ)

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

filterのパラメータ• follow

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

!

• track • 指定したキーワードを含むツイートを取得 • 1キーワードは60文字まで

• 日本語はトークナイズされない ‣ 日本語ハッシュタグは指定可能

follow=1235,5678

track=%25twtr_hack,%25twtter4j

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

filterのパラメータ(続き)• locations

• 区域を指定してツイートを取得locations=138.927,35.500,139.932,35.795

138.927,35.500

139.932,35.795

南西 北東

経度・緯度順なのに注意

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

FAQ

• 日本全体をカバーする区域を指定すれば・・ • ヒットするツイートが多すぎる場合はその旨が通知される

!

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

• プロテクトアカウントのツイートは? • 取得できない。User StreamかSite Streamを利用

{"limit":{"track":1234}}

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

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

!

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

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

• プロテクトアカウントのツイートも受信可能 • 要OAuth( or XAuth)

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

User Stream• エンドポイント(POST)

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

• レスポンス ‣ statusオブジェクトのjson等

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

Site Stream(beta)• 複数ユーザーのタイムライン、イベントを取得

!

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

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

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

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

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

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

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

!

!

• レスポンス ‣ statusオブジェクトのjson等

follow=1234,5678,91023,45324....

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

Site Streamのコネクション管理• 接続時に指定できるユーザーは100人まで

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

!

• コントロールストリームでユーザーの追加、削除可能 • 1コネクションで最大1000人まで受信可能

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

コントロールストリーム• 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”

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

コントロールストリームのメソッド

• ユーザーの追加 (POST)

!

• パラメータ ‣ user_id: カンマ区切りのユーザーID(100人まで)

https://sitestream.twitter.com/1.1/site/c/****/add_user.json”

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

コントロールストリームのメソッド

• ユーザーの削除(POST)

!

• パラメータ ‣ user_id: カンマ区切りのユーザーID(100人まで)

https://sitestream.twitter.com/1.1/site/c/****/remove_user.json”

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

ベストプラクティス• 可能な限りストリーミング APIを使う

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

• gzipを使う

• 帯域を節約

• 接続ネットワークを確認 • 3G接続での利用は推奨されない。接続が切られることも

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

FAQ• ストリーミングAPIはJavaScriptから使える?

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

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

• http://gnip.com/

• firehoseは?

• 一般に提供はされていない

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

Webサイト向けAPI• サーバサイドの実装不要

• Web Intents

• フォローボタン • Twitterボタン

• ウィジェット

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

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>

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

Twitterボタン

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

ウィジェット

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

情報源• 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

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

APIたくさんあるので詳しくは…

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

http://amzn.to/twtr-ref

Twitter APIポケットリファレンス

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

#apijp

Twitter APIの応用範囲

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

Twitter APIの応用範囲• 認証 • ソーシャルログイン

https://manage.doorkeeper.jp/ より

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

Twitter APIの応用範囲• キュレーション

http://togetter.com より

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

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

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

Twitter APIの応用範囲• 出力系 • 告知

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

Twitter APIの応用範囲

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

#apijp

Twitter API最新事例

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

#apijp

Twitter API最新事例• YAYOI SMART CONNECT

https://www.yayoi-kk.co.jp/smart/index.html より

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

#apijp

Twitter API最新事例

https://www.yayoi-kk.co.jp/smart/index.html より

Page 72: Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Page 73: Twitter API最新事情 - API Meetup Tokyo #1 #apijp

#apijphttps://www.yayoi-kk.co.jp/smart/index.html より

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

#apijp

Twitter API最新事例• YAYOI SMART CONNECT

• Twitterが入力ソースの1つ

Twitter APIが弥生のAPIにもなる

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

#apijp

Twitter API最新事例• #アマゾンポチ

https://blog.twitter.com/node/4502 より

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

#apijp

Twitter API設計の歴史

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

#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化

Page 78: Twitter API最新事情 - API Meetup Tokyo #1 #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化

セキュリティスケーラビリティ

新機能追従

セキュリティ

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

#apijp

人気を支えてきたAPIの設計• シンプルなセキュリティモデル • 全部アクセス可のBASIC認証

• OAuthは読み・書き・DMアクセス可の3種のみ

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

#apijp

Twitter APIの設計• ゆるい設計: スキーマ定義なし

• 実態に応じてフレキシブルに変更 • 不定期に増える属性

• 大きな変更はAPIバージョニングにて対応

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

#apijp

人気を支えてきたAPIの設計• レートリミット • 2007年~ 150回/h

• 2009年~ 350回/h

• 2012年~ 15回/15分:エンドポイント

レスポンスより詳細を取得可

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

#apijp

Twitter APIの現在

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

#apijp

Twitter APIの現在• 2006年~2012年 : 2ヶ月に1回くらい新機能追加

• 2012年9月Twitter API 1.1リリース、安定期突入

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

#apijp

Twitter APIの現在• 今年に入り多くの新機能 • ダイレクトメッセージへの画像添付 • 複数画像添付 • ミュート

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

#apijp

締め

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

#apijp

Twitter APIの今後

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

#apijp

Twitter APIの今後Webの進化

Twitterの進化

Twitter APIの進化

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

#apijp

ありがとうございました

@yusuke