Copyright(c) Yusuke Yamamoto All rights reserved.
Twitter APIの紹介
2012/01/28
Twitter4J - 山本 裕介
Copyright(c) Yusuke Yamamoto All rights reserved.
@yusukey
Java用Twitter APIライブラリ
Copyright(c) Yusuke Yamamoto All rights reserved.
Twitter APIの種類
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'
Copyright(c) Yusuke Yamamoto All rights reserved.
Twitter APIの基本
Copyright(c) Yusuke Yamamoto All rights reserved.
Twitter APIの基本• アプリケーションの登録と権限• OAuth認証
• 認証の種類
Copyright(c) Yusuke Yamamoto All rights reserved.
アプリケーション• Twitterにアクセスする単位
• ユーザーとは異なる• ユーザーはアプリケーションにアクセス権限を委譲する
Copyright(c) Yusuke Yamamoto All rights reserved.
アプリケーションの登録• https://dev.twitter.com/apps/new より
Copyright(c) Yusuke Yamamoto All rights reserved.
Application Type : 重要
Copyright(c) Yusuke Yamamoto All rights reserved.
アクセスタイプ
アクセスタイプ Read, Write, &Access direct messages
Read & Write Read only
タイムラインなどの取得 ○ ○ ○ツイート ○ ○ ×
ダイレクトメッセージ送信 ○ ○ ×ダイレクトメッセージ受信・削除 ○ × ×
デフォルト
Copyright(c) Yusuke Yamamoto All rights reserved.
OAuth
Copyright(c) Yusuke Yamamoto All rights reserved.
Sign in with Twitter
Copyright(c) Yusuke Yamamoto All rights reserved.
XAuth
Copyright(c) Yusuke Yamamoto All rights reserved.
REST API
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
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 等
Copyright(c) Yusuke Yamamoto All rights reserved.
検索API
Copyright(c) Yusuke Yamamoto All rights reserved.
検索 API• プル型‣ 最近のツイートを検索• https://twitter.com/#!/search-homeとほぼ同じ機能
19
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
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);
Copyright(c) Yusuke Yamamoto All rights reserved.
ストリーミングAPI
Copyright(c) Yusuke Yamamoto All rights reserved.
ストリーミングAPI• ツイート、DMなどを受信し続けられる
• レートリミットがない• 利用出来る場面ではREST APIより優先的に利用
• 技術• 普通のHTTP
• レスポンスに終わりがない• cometでもWebSocketでもない
Copyright(c) Yusuke Yamamoto All rights reserved.
デモ$ wget --output-document=- --user=*** --password=*** https://stream.twitter.com/1/statuses/sample.json
Copyright(c) Yusuke Yamamoto All rights reserved.
ストリーミングAPIの種類• Streamed Tweets
• パブリックタイムラインを取得
• User Stream
• 単一ユーザーのタイムライン、イベントを取得
• Site Stream
• 複数ユーザーのタイムライン、イベントを取得
Copyright(c) Yusuke Yamamoto All rights reserved.
sample• パブリックなツイートのうち1%を取得
• エンドポイント(GET)
‣ https://stream.twitter.com/1/statuses/sample.json
• パラメータ‣ なし• レスポンス‣ statusオブジェクトのjson (REST APIと同じ)
Copyright(c) Yusuke Yamamoto All rights reserved.
sample• 使いどころ• ツイート分析‣ 言語
‣ クライアント
‣ 流行の固有名詞抽出
• 等々
Copyright(c) Yusuke Yamamoto All rights reserved.
FAQ
• sample.jsonを複数接続すれば・・・・
• 同じツイートが返るので無意味。1%以上はとれない
Copyright(c) Yusuke Yamamoto All rights reserved.
filter• 指定した条件のツイートを取得• エンドポイント(POST)
‣ https://stream.twitter.com/1/statuses/filter.json
• パラメータ‣ follow, track, locations
• レスポンス‣ statusオブジェクトのjson (REST APIと同じ)
Copyright(c) Yusuke Yamamoto All rights reserved.
User Stream• 単一ユーザーのタイムライン、イベントを取得
• 目的: デスクトップの通知ツールなど
• タイムラインのツイート、DM、fav / follow等を受信
• プロテクトアカウントのツイートも受信可能• 要OAuth( or XAuth)
Copyright(c) Yusuke Yamamoto All rights reserved.
Site Stream(beta)• 複数ユーザーのタイムライン、イベントを取得
• 目的: Twitter連携するサービスなど
• タイムラインのツイート、DM、fav / follow等を受信
• プロテクトアカウントのツイートも受信可能• 要OAuth
Copyright(c) Yusuke Yamamoto All rights reserved.
Site Streamのコネクション管理• 接続時に指定できるユーザーは100人まで
• 事前にOAuth認証しておく必要がある
• コントロールストリームでユーザーの追加、削除可能
• 1コネクションで最大1000人まで受信可能
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"
Copyright(c) Yusuke Yamamoto All rights reserved.
ベストプラクティス• とにかく使う• 参照系はレートリミット回避のためできるかぎりREST
APIよりもStreaming APIを利用
• gzipを使う
• 帯域を節約
• 接続ネットワークを確認• 3G接続での利用は推奨されない。接続が切られることも
Copyright(c) Yusuke Yamamoto All rights reserved.
FAQ• ストリーミングAPIはJavaScriptから使える?
• 使えない。サーバサイドの仕組みが必要
• 1%以上のツイートにアクセスしたい
• http://gnip.com/
• firehoseは?
• 一般に提供はされていない
Copyright(c) Yusuke Yamamoto All rights reserved.
Webサイト向けAPI
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>
Copyright(c) Yusuke Yamamoto All rights reserved.
@Anywhere• JavaScriptでサーバサイドなしにTwitterと連携
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
Copyright(c) Yusuke Yamamoto All rights reserved.
Twitterボタン
Copyright(c) Yusuke Yamamoto All rights reserved.
ウィジェット
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
Copyright(c) Yusuke Yamamoto All rights reserved.
@twj_dev
@twitterapi
Copyright(c) Yusuke Yamamoto All rights reserved.
Twitter API ポケットリファレンス
• 好評発売中!
http://amzn.to/iUeXjm44
Top Related