Twitter 研究会2012-1-28 - Twitter APIの紹介

44
Copyright(c) Yusuke Yamamoto All rights reserved. Twitter APIの紹介 2012/01/28 Twitter4J - 山本 裕介

Transcript of Twitter 研究会2012-1-28 - Twitter APIの紹介

Page 1: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

Twitter APIの紹介

2012/01/28

Twitter4J - 山本 裕介

Page 2: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

@yusukey

Page 3: Twitter 研究会2012-1-28 - Twitter APIの紹介

Java用Twitter APIライブラリ

Page 4: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

Twitter APIの種類

Page 5: Twitter 研究会2012-1-28 - 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'

Page 6: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

Twitter APIの基本

Page 7: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

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

• 認証の種類

Page 8: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

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

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

Page 9: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

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

Page 10: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

Application Type : 重要

Page 11: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

アクセスタイプ

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

Read & Write Read only

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

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

デフォルト

Page 12: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

OAuth

Page 13: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

Sign in with Twitter

Page 14: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

XAuth

Page 15: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

REST API

Page 16: Twitter 研究会2012-1-28 - Twitter 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

Page 17: Twitter 研究会2012-1-28 - Twitter APIの紹介

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の紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

検索API

Page 19: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

検索 API• プル型‣ 最近のツイートを検索• https://twitter.com/#!/search-homeとほぼ同じ機能

19

Page 20: Twitter 研究会2012-1-28 - Twitter APIの紹介

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の紹介

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の紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

ストリーミングAPI

Page 23: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

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

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

• 技術• 普通のHTTP

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

Page 24: Twitter 研究会2012-1-28 - Twitter APIの紹介

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の紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

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

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

• User Stream

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

• Site Stream

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

Page 26: Twitter 研究会2012-1-28 - Twitter APIの紹介

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の紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

sample• 使いどころ• ツイート分析‣ 言語

‣ クライアント

‣ 流行の固有名詞抽出

• 等々

Page 28: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

FAQ

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

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

Page 29: Twitter 研究会2012-1-28 - Twitter APIの紹介

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の紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

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

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

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

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

Page 31: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

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

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

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

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

Page 32: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

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

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

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

• 1コネクションで最大1000人まで受信可能

Page 33: Twitter 研究会2012-1-28 - Twitter APIの紹介

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の紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

ベストプラクティス• とにかく使う• 参照系はレートリミット回避のためできるかぎりREST

APIよりもStreaming APIを利用

• gzipを使う

• 帯域を節約

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

Page 35: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

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

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

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

• http://gnip.com/

• firehoseは?

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

Page 36: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

Webサイト向けAPI

Page 37: Twitter 研究会2012-1-28 - Twitter 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>

Page 38: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

@Anywhere• JavaScriptでサーバサイドなしにTwitterと連携

Page 39: Twitter 研究会2012-1-28 - Twitter APIの紹介

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の紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

Twitterボタン

Page 41: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

ウィジェット

Page 42: Twitter 研究会2012-1-28 - Twitter APIの紹介

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の紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

@twj_dev

@twitterapi

Page 44: Twitter 研究会2012-1-28 - Twitter APIの紹介

Copyright(c) Yusuke Yamamoto All rights reserved.

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

• 好評発売中!

http://amzn.to/iUeXjm44