twitter 研究会2012-1-28 - twitter apiの紹介
TRANSCRIPT
![Page 1: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/1.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
Twitter APIの紹介
2012/01/28
Twitter4J - 山本 裕介
![Page 2: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/2.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
@yusukey
![Page 3: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/3.jpg)
Java用Twitter APIライブラリ
![Page 4: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/4.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
Twitter APIの種類
![Page 5: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/5.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved. 5
Twi$er'API�
REST'API'
��API�
�#05*4��API�
Web��#���API�
� :'-%�1�(0'��:'Java,'Objec8ve9C'
"��# (�(0,'�5&�'Java,'Python,'PHP,'Ruby,'Objec8ve9C'
� :'Web��#'��:'HTML,'JavaScript'
Streamed'Tweets'
.5�5�#05+� ��#�#05+�
!�5#)�4'
Web'Intents�
@Anywhere�
��+/�4'
!�5#'
'�35'
���4#'
��2�#, �5�'
0�#'
�����'
#24$'
��'
'�35)�4'
![Page 6: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/6.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
Twitter APIの基本
![Page 7: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/7.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
Twitter APIの基本• アプリケーションの登録と権限• OAuth認証
• 認証の種類
![Page 8: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/8.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
アプリケーション• Twitterにアクセスする単位
• ユーザーとは異なる• ユーザーはアプリケーションにアクセス権限を委譲する
![Page 9: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/9.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
アプリケーションの登録• https://dev.twitter.com/apps/new より
![Page 10: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/10.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
Application Type : 重要
![Page 11: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/11.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
アクセスタイプ
アクセスタイプ Read, Write, &Access direct messages
Read & Write Read only
タイムラインなどの取得 ○ ○ ○ツイート ○ ○ ×
ダイレクトメッセージ送信 ○ ○ ×ダイレクトメッセージ受信・削除 ○ × ×
デフォルト
![Page 12: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/12.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
OAuth
![Page 13: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/13.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
Sign in with Twitter
![Page 14: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/14.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
XAuth
![Page 15: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/15.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
REST API
![Page 16: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/16.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
REST API• REST: REpresentational State Transfer
• HTTPでAPI呼び出しGET /1/statuses/public_timeline.json HTTP/1.1Host: api.twitter.com
HTTP/1.1 200 OKDate: Tue, 08 Feb 2011 07:52:51 GMTServer: hiStatus: 200 OKContent-Type: application/json; charset=utf-8Vary: Accept-EncodingConnection: 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": "山本 裕介", ...} }, ...]
リクエスト
レスポンスヘッダ
レスポンスボディ
16
![Page 17: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/17.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
Twitter のREST API• 全部で100近くのメソッド
• 20の「リソース」に分類されている
• リソース毎にパスが異なるTimelineリソース http://api.twitter.com/statuses/***.jsonUserリソース http://api.twitter.com/users/***.jsonDirect messageリソース http://api.twitter.com/direct_messages/***.json 等
![Page 18: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/18.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
検索API
![Page 19: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/19.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
検索 API• プル型‣ 最近のツイートを検索• https://twitter.com/#!/search-homeとほぼ同じ機能
19
![Page 20: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/20.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
検索 APIの呼び出し• エンドポイント(GET)
‣ http://search.twitter.com/search.json?q=****
• qパラメータq : 検索クエリ
・ #twtr_hackを含むツイート
q=#twtr_hack
・@yusukeyの#twtr_hackを含むツイート
q=#twtr_hack+from:yusukey
20
![Page 21: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/21.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
ページ処理ベストプラクティス
・rppは100まで、pageは15まで
最大1500件までしか取れない→max_idパラメータで回せばok
Twitter4Jを使った例21
Query query = new Query(term); query.rpp(100);do { QueryResult qr = twitter.search(query); tweets = qr.getTweets(); for (Tweet tweet : tweets) { // ... } if (tweets.size() != 0) { query.setMaxId(tweets.get(tweets.size() - 1).getId() - 1); }} while (tweets.size() != 0);
![Page 22: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/22.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
ストリーミングAPI
![Page 23: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/23.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
ストリーミングAPI• ツイート、DMなどを受信し続けられる
• レートリミットがない• 利用出来る場面ではREST APIより優先的に利用
• 技術• 普通のHTTP
• レスポンスに終わりがない• cometでもWebSocketでもない
![Page 24: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/24.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
デモ$ wget --output-document=- --user=*** --password=*** https://stream.twitter.com/1/statuses/sample.json
![Page 25: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/25.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
ストリーミングAPIの種類• Streamed Tweets
• パブリックタイムラインを取得
• User Stream
• 単一ユーザーのタイムライン、イベントを取得
• Site Stream
• 複数ユーザーのタイムライン、イベントを取得
![Page 26: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/26.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
sample• パブリックなツイートのうち1%を取得
• エンドポイント(GET)
‣ https://stream.twitter.com/1/statuses/sample.json
• パラメータ‣ なし• レスポンス‣ statusオブジェクトのjson (REST APIと同じ)
![Page 27: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/27.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
sample• 使いどころ• ツイート分析‣ 言語
‣ クライアント
‣ 流行の固有名詞抽出
• 等々
![Page 28: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/28.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
FAQ
• sample.jsonを複数接続すれば・・・・
• 同じツイートが返るので無意味。1%以上はとれない
![Page 29: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/29.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
filter• 指定した条件のツイートを取得• エンドポイント(POST)
‣ https://stream.twitter.com/1/statuses/filter.json
• パラメータ‣ follow, track, locations
• レスポンス‣ statusオブジェクトのjson (REST APIと同じ)
![Page 30: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/30.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
User Stream• 単一ユーザーのタイムライン、イベントを取得
• 目的: デスクトップの通知ツールなど
• タイムラインのツイート、DM、fav / follow等を受信
• プロテクトアカウントのツイートも受信可能• 要OAuth( or XAuth)
![Page 31: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/31.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
Site Stream(beta)• 複数ユーザーのタイムライン、イベントを取得
• 目的: Twitter連携するサービスなど
• タイムラインのツイート、DM、fav / follow等を受信
• プロテクトアカウントのツイートも受信可能• 要OAuth
![Page 32: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/32.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
Site Streamのコネクション管理• 接続時に指定できるユーザーは100人まで
• 事前にOAuth認証しておく必要がある
• コントロールストリームでユーザーの追加、削除可能
• 1コネクションで最大1000人まで受信可能
![Page 33: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/33.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
コントロールストリーム• Site Stream接続時にコントロール用エンドポイントが返る
• RESTでコントロール用エンドポイントを操作
https://dev.twitter.com/docs/streaming-api/control-streams
{"control": { "control_uri":"/2b/site/c/1_1_54e345d655ee3e8d"}}
https://sitestream.twitter.com/2b/site/c/1_1_54e345d655ee3e8d"
![Page 34: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/34.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
ベストプラクティス• とにかく使う• 参照系はレートリミット回避のためできるかぎりREST
APIよりもStreaming APIを利用
• gzipを使う
• 帯域を節約
• 接続ネットワークを確認• 3G接続での利用は推奨されない。接続が切られることも
![Page 35: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/35.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
FAQ• ストリーミングAPIはJavaScriptから使える?
• 使えない。サーバサイドの仕組みが必要
• 1%以上のツイートにアクセスしたい
• http://gnip.com/
• firehoseは?
• 一般に提供はされていない
![Page 36: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/36.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
Webサイト向けAPI
![Page 37: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/37.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
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 38: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/38.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
@Anywhere• JavaScriptでサーバサイドなしにTwitterと連携
![Page 39: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/39.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
@Anywhere
@yusukey をフォローしましょう<script type="text/javascript"> twttr.anywhere(function (T) { T.hovercards({expanded:true}); });</script>
http://bit.ly/hover-cards
![Page 40: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/40.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
Twitterボタン
![Page 41: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/41.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
ウィジェット
![Page 42: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/42.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
情報源•Twitter development talk-ja
•dev.twitter.com - Discussions
http://bit.ly/tdt-ja
https://dev.twitter.com/discussions
![Page 43: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/43.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
@twj_dev
@twitterapi
![Page 44: Twitter 研究会2012-1-28 - Twitter APIの紹介](https://reader034.vdocuments.mx/reader034/viewer/2022052522/554f9421b4c905435d8b5234/html5/thumbnails/44.jpg)
Copyright(c) Yusuke Yamamoto All rights reserved.
Twitter API ポケットリファレンス
• 好評発売中!
http://amzn.to/iUeXjm44