Your SlideShare is downloading. ×
Twitter4jハンズオン 5/1 #twtr_hack
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Twitter4jハンズオン 5/1 #twtr_hack

137

Published on

Twitter4J ハンズオン

Twitter4J ハンズオン

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
137
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Twitter4Jハンズオン 5/1
  • 2. Twitter4Jハンズオン • Twitter APIの概要 • プロジェクトの作成 • アプリケーションの登録 • ツイート • 検索 • レートリミット • ログイン
  • 3. Twitter botのコツ • Botの種類とAPI • API • レートリミット
  • 4. Twitter APIの種類 Twi$er'API REST'API' API Web 'API :' ' :'Java,'Objec8ve9C ' :' ,' ' :'Java,'PHP,'Ruby,'.Net,'Objec8ve9C ' :'Web ' :'HTML,'JavaScript' Streamed'Tweets' ' ' ' ' ' ' ' ' ' ' ' ' '
  • 5. アプリケーション • Twitterにアクセスする単位 • ユーザーとは異なる • ユーザーはアプリケーションにアクセス権限を委譲する
  • 6. アプリケーションの登録 • https://dev.twitter.com/apps/new より
  • 7. Application Type : 重要
  • 8. アクセスタイプ アクセスタイプ Read,Write, & Access direct messages Read & Write Read only タイムラインなどの取得 ○ ○ ○ ツイート ○ ○ × ダイレクトメッセージ送信 ○ ○ × ダイレクトメッセージ受信・削除 ○ × × デフォルト
  • 9. 演習 • https://dev.twitter.com/apps/new よりアプリケーションを登録 • http://twitter4j.org/ よりtwitter4j-4.0.2.zip をダウンロード • twitter4j.propertiesのoauth.consumerKeyとoauth.consumerSecretを 設定 • getAccessToken.sh/cmdを実行してアクセストークンを取得
  • 10. REST API
  • 11. REST API • プル型 ‣ タイムラインの取得 ‣ ユーザーのフォロー ‣ ツイート ‣ ダイレクトメッセージの送受信 等々100近くのエンドポイント
  • 12. 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エンジニア山本裕介。rn映画、アーチェリー、Java 好きrn#twitter4j #samurai", "name": "山本 裕介", ...} }, ...] リクエスト レスポンスヘッダ レスポンスボディ
  • 13. 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 等
  • 14. REST APIのテスト • https://dev.twitter.com/console より
  • 15. Twitter4Jの概要 • 主要クラス • TwitterFactory: Twitterオブジェクトのファクトリクラス • Twitter: 各種APIを呼び出すための • User / Status : ユーザー、ツイートを表すインターフェース
  • 16. Twitter4Jの使い方 • twitter4j.properties: 各種キー、設定を記載。classes/以下に配置 • TwitterFactoryよりTwitterインスタンスを取得 • Twitterインスタンスのメソッド呼び出し
  • 17. 演習: Twitter4Jのインスタンス化 public static void main(String… args[]) throws TwitterException { Twitter twitter = TwitterFactory.getSingleton(); } <dependencies> <dependency> <groupId>org.twitter4j</groupId> <artifactId>twitter4j-core</artifactId> <version>[4.0,)</version> </dependency> </dependencies> 必要に応じてmaven依存追加
  • 18. 演習: twitter4j.propertiesの設定 oauth.consumerKey=**** oauth.consumerSecret=**** oauth.accessToken=**** oauth.accessTokenSecret=**** resources/twitter4j.properties
  • 19. Userオブジェクト • Twitterのユーザーを表す • 取得できるもの: • スクリーン名(@yusuke等) : User#getScreenName() • ユーザーID(API上の識別ID): User#getId() • プロフィールテキスト: User#getDescription(); • 等
  • 20. 演習: 自分のユーザーオブジェクトを取得 public static void main(String… args[]) throws TwitterException { Twitter twitter = TwitterFactory.getSingleton(); User user = twitter.showUser(“yusuke”); System.out.println(user.getScreenName()); System.out.println(user.getId()); System.out.println(user.getDescription()); }
  • 21. Statusオブジェクト • ツイートを表す • 取得できるもの: • ツイートテキスト : Status#getText() • ツイートID: Status#getId() • 埋込メディア: Status#getMediaEntities() • 等
  • 22. 演習: Statusオブジェクトを取得 public static void main(String… args[]) throws TwitterException { Twitter twitter = TwitterFactory.getSingleton(); Status status = twitter.showStatus(20); System.out.println(status.getText()); System.out.println(status.getUser().getScreenName()); }
  • 23. ツイート • updateStatusメソッド • Twitter#updateStatus(text)
  • 24. @ツイート • updateStatusメソッド • Twitter#updateStatus(“@スクリーン名” + text)
  • 25. 演習: @yusuke宛ての@ツイート public static void main(String… args[]) throws TwitterException { Twitter twitter = TwitterFactory.getSingleton(); Status status = twitter.updateStatus(“@yusuke Hello!”); System.out.println(status.getText()); System.out.println(status.getUser().getScreenName()); }
  • 26. ストリーミング API • プッシュ型 ‣ 特定のユーザーのアクティビティをリアルタイムに取得 または ‣ 指定したキーワードにマッチするツイートをリアルタイムに取得
  • 27. ストリーミング API • ツイート、DMなどを受信し続けられる • レートリミットがない • 利用出来る場面ではREST APIより優先的に利用 • 技術 • 普通のHTTP • レスポンスに終わりがない • cometでもWebSocketでもない
  • 28. 演習 • printSampleStream.sh/cmdを実行
  • 29. ストリーミングAPIの接続 • 十分に帯域のある環境で利用 • 3G接続は推奨されない(モバイルアプリ不可) • 再接続アルゴリズムを正しく実装 • アグレッシブに再接続すると一時的に使えなくなる
  • 30. 再接続アルゴリズム •最初に接続切れを起こした場合 即座に再接続を試みる。 •TCP/IPレベルのネットワークエラーが発生した場合 250ミリ秒から始め、最大16秒までエラー毎に250ミリ秒足していくなど線形的に 待ち時間を増やしていく。 •HTTPエラー(ステータスコードが201以上)が返った場合 10秒から始め、失敗する毎に待ち時間を最大で240秒まで倍ずつ指数関数的に増 やしていく。 HTTPエラーは認証情報の間違いやプロキシの不具合などアプリケーションの設定 に起因する問題の可能性があるのでユーザーへ通知することも考慮に入れる。 参考:Twitter APIポケットリファレンス P265 https://dev.twitter.com/docs/streaming-api/concepts#connecting
  • 31. ストリーミングAPIの種類 • Streamed Tweets • パブリックタイムラインを取得 • User Stream • 単一ユーザーのタイムライン、イベントを取得 • Site Stream • 複数ユーザーのタイムライン、イベントを取得
  • 32. Streamed Tweets • sample • filter • firehose • links • retweet
  • 33. Streamed Tweets • sample • filter • firehose • links • retweet
  • 34. sample • パブリックなツイートのうち1%を取得 • エンドポイント(GET) ‣ https://stream.twitter.com/1.1/statuses/sample.json • パラメータ ‣ なし • レスポンス ‣ statusオブジェクトのjson (REST APIと同じ)
  • 35. sample • 使いどころ • ツイート分析 • 言語 • クライアント • 流行の固有名詞抽出 • 等々
  • 36. FAQ • sample.jsonを複数接続すれば・・・・ • 同じツイートが返るので無意味。1%以上はとれない
  • 37. filter • 指定した条件のツイートを取得 • エンドポイント(POST) ‣ https://stream.twitter.com/1.1/statuses/filter.json • パラメータ ‣ 色々(次ページ) • レスポンス ‣ statusオブジェクトのjson (REST APIと同じ)
  • 38. filterのパラメータ • follow • 指定したユーザーIDのツイートを取得 • track • 指定したキーワードを含むツイートを取得 • 1キーワードは60文字まで • 日本語はトークナイズされない • 日本語ハッシュタグは指定可能 follow=1235,5678 track=%25twtr_hack,%25twtter4j
  • 39. filterのパラメータ(続き) • locations • 区域を指定してツイートを取得 locations=138.927,35.500,139.932,35.795 138.927,35.500 139.932,35.795 南西 北東 経度・緯度順なのに注意
  • 40. FAQ • 日本全体をカバーする区域を指定すれば・・ • ヒットするツイートが多すぎる場合はその旨が通知される • 大量の区域を指定したい場合は? • 要相談 • プロテクトアカウントのツイートは? • 取得できない。User StreamかSite Streamを利用 {"limit":{"track":1234}}
  • 41. User Stream • 単一ユーザーのタイムライン、イベントを取得 • 目的: デスクトップの通知ツールなど • タイムラインのツイート、DM、fav / follow等を受信 • プロテクトアカウントのツイートも受信可能 • 要OAuth( or XAuth)
  • 42. User Stream • エンドポイント(POST) ‣ https://userstream.twitter.com/1.1/user.json • レスポンス ‣ statusオブジェクトのjson等
  • 43. 演習 • printUserStream.sh/cmdを実行
  • 44. Site Stream(beta) • 複数ユーザーのタイムライン、イベントを取得 • 目的: Twitter連携するサービスなど • タイムラインのツイート、DM、fav / follow等を受信 • プロテクトアカウントのツイートも受信可能 • 要OAuth
  • 45. Site Stream • エンドポイント(POST) ‣ https://sitestream.twitter.com/1.1/site.json • パラメータ ‣ follow: 受信するユーザーIDをカンマ区切りで指定、100人まで • レスポンス ‣ statusオブジェクトのjson等 follow=1234,5678,91023,45324....
  • 46. Site Streamのコネクション管理 • 接続時に指定できるユーザーは100人まで • 事前にOAuth認証しておく必要がある • コントロールストリームでユーザーの追加、削除可能 • 1コネクションで最大1000人まで受信可能
  • 47. コントロールストリーム • 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”
  • 48. コントロールストリームのメソッド • ユーザーの追加 (POST) • パラメータ • user_id: カンマ区切りのユーザーID(100人まで) https://sitestream.twitter.com/1.1/site/c/****/add_user.json”
  • 49. コントロールストリームのメソッド • ユーザーの削除(POST) • パラメータ • user_id: カンマ区切りのユーザーID(100人まで) https://sitestream.twitter.com/1.1/site/c/****/remove_user.json”
  • 50. ベストプラクティス • 可能な限りストリーミング APIを使う • 参照系はレートリミット回避のためできるかぎりREST APIよりもストリーミン グ APIを利用 • gzipを使う • 帯域を節約 • 接続ネットワークを確認 • 3G接続での利用は推奨されない。接続が切られることも
  • 51. FAQ • ストリーミングAPIはJavaScriptから使える? • 使えない。サーバサイドの仕組みが必要 • 1%以上のツイートにアクセスしたい • http://gnip.com/ • firehoseは? • 一般に提供はされていない

×