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

7,815 views

Published on

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

No Downloads
Views
Total views
7,815
On SlideShare
0
From Embeds
0
Number of Embeds
1,639
Actions
Shares
0
Downloads
54
Comments
0
Likes
33
Embeds 0
No embeds

No notes for slide

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

  1. 1. #apijp API Meetup Tokyo #1 Twitter API最新事情 @yusuke 株式会社サムライズム 山本 裕介
  2. 2. • 山本 裕介(@yusuke)! • 株式会社サムライズム 代表取締役! • 過去の職場: 自己紹介 2000年∼ 新日鉄情報通信システム! 2002年∼ BEA Systems! 2006年∼ FAST Search & Transfer! 2008年∼ RedHat! 2011年∼ Twitter, Inc.
  3. 3. • 山本 裕介(@yusuke)! • 株式会社サムライズム 代表取締役! • 過去の職場: 自己紹介 2000年∼ 新日鉄情報通信システム! 2002年∼ BEA Systems! 2006年∼ FAST Search & Transfer! 2008年∼ RedHat! 2011年∼ Twitter, Inc. SOAPに悩まされるSOAPに悩まされるSOAPに悩まされる
  4. 4. #apijp 自己紹介 • API大好き
  5. 5. #apijp 自己紹介 • API大好き
  6. 6. #apijp 自己紹介 Java用Twitter APIライブラリ • API大好き
  7. 7. http://amzn.to/twtr-ref Twitter APIポケットリファレンス
  8. 8. • 山本 裕介(@yusuke)! • 株式会社サムライズム 代表取締役! • 過去の職場: 自己紹介 2000年∼ 新日鉄情報通信システム! 2002年∼ BEA Systems! 2006年∼ FAST Search & Transfer! 2008年∼ RedHat! 2011年∼ Twitter, Inc.
  9. 9. • 開発ツール販売! • Twitter API導入、運用支援サービス 株式会社サムライズム
  10. 10. • 開発ツール販売! • Twitter API導入、運用支援サービス 株式会社サムライズム http://samuraism.com/service
  11. 11. #apijp Twitter API最新事情 • Twitter APIの概要 • Twitter API設計の歴史 • Twitter API最新事例 • Twitter APIの現在
  12. 12. #apijp Twitter APIの概要
  13. 13. Twi$er'API REST'API' API Web 'API :' ' :'Java,'Objec8ve9C ' :' ,' ' :'Java,'PHP,'Ruby,'.Net,'Objec8ve9C ' :'Web ' :'HTML,'JavaScript' Streamed'Tweets' ' ' ' ' ' ' ' ' ' ' ' ' '
  14. 14. Twitter APIの概要 • アプリケーションの登録と権限 • OAuth認証 • 認証の種類
  15. 15. アプリケーション • Twitterにアクセスする単位 • ユーザーとは異なる • ユーザーはアプリケーションにアクセ ス権限を委譲する
  16. 16. アプリケーションの登録 • https://dev.twitter.com/apps/new より
  17. 17. Application Type : 重要
  18. 18. アクセスタイプ アクセスタイプ Read,Write, & Access direct messages Read & Write Read only タイムラインなどの取得 ○ ○ ○ ツイート ○ ○ × ダイレクトメッセージ送信 ○ ○ × ダイレクトメッセージ受信・削除 ○ × × デフォルト
  19. 19. OAuth
  20. 20. Sign in with Twitter
  21. 21. XAuth
  22. 22. 難しいので詳しくは…
  23. 23. http://amzn.to/twtr-ref Twitter APIポケットリファレンス
  24. 24. REST API
  25. 25. REST API • プル型 ‣ タイムラインの取得 ‣ ユーザーのフォロー ‣ ツイート ‣ ダイレクトメッセージの送受信 等々100近くのエンドポイント
  26. 26. 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": "山本 裕介", ...} }, ...] リクエスト レスポンスヘッダ レスポンスボディ
  27. 27. 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 等
  28. 28. REST APIのテスト • https://dev.twitter.com/console より
  29. 29. REST APIのエンドポイントは たくさんあるので…
  30. 30. ストリーミング API • プッシュ型 ‣ 特定のユーザーのアクティビティをリアルタイ ムに取得 または ‣ 指定したキーワードにマッチするツイートをリ アルタイムに取得
  31. 31. ストリーミング API • ツイート、DMなどを受信し続けられる • レートリミットがない • 利用出来る場面ではREST APIより優先的に利用 • 技術 • 普通のHTTP • レスポンスに終わりがない • cometでもWebSocketでもない
  32. 32. デモ $ twitter4j/bin/stream/printSampleStream.sh
  33. 33. ストリーミングAPIの接続 • 十分に帯域のある環境で利用 • 3G接続は推奨されない(モバイルアプリ不可) ! • 再接続アルゴリズムを正しく実装 • アグレッシブに再接続すると一時的に使えなく なる
  34. 34. 再接続アルゴリズム 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
  35. 35. ストリーミングAPIの種類 • Streamed Tweets • パブリックタイムラインを取得 • User Stream • 単一ユーザーのタイムライン、イベントを取得 • Site Stream • 複数ユーザーのタイムライン、イベントを取得
  36. 36. Streamed Tweets • sample • filter • firehose • links • retweet
  37. 37. Streamed Tweets • sample • filter • firehose • links • retweet
  38. 38. sample • パブリックなツイートのうち1%を取得 • エンドポイント(GET) ‣ https://stream.twitter.com/1.1/statuses/sample.json • パラメータ ‣ なし • レスポンス ‣ statusオブジェクトのjson (REST APIと同じ)
  39. 39. sample • 使いどころ • ツイート分析 ‣ 言語 ‣ クライアント ‣ 流行の固有名詞抽出 • 等々
  40. 40. FAQ • sample.jsonを複数接続すれば・・・・ • 同じツイートが返るので無意味。1%以上はとれない
  41. 41. filter • 指定した条件のツイートを取得 • エンドポイント(POST) ‣ https://stream.twitter.com/1.1/statuses/filter.json • パラメータ ‣ 色々(次ページ) • レスポンス ‣ statusオブジェクトのjson (REST APIと同じ)
  42. 42. filterのパラメータ • follow • 指定したユーザーIDのツイートを取得 ! • track • 指定したキーワードを含むツイートを取得 • 1キーワードは60文字まで • 日本語はトークナイズされない ‣ 日本語ハッシュタグは指定可能 follow=1235,5678 track=%25twtr_hack,%25twtter4j
  43. 43. filterのパラメータ(続き) • locations • 区域を指定してツイートを取得 locations=138.927,35.500,139.932,35.795 138.927,35.500 139.932,35.795 南西 北東 経度・緯度順なのに注意
  44. 44. FAQ • 日本全体をカバーする区域を指定すれば・・ • ヒットするツイートが多すぎる場合はその旨が通知される ! • 大量の区域を指定したい場合は? • 要相談 • プロテクトアカウントのツイートは? • 取得できない。User StreamかSite Streamを利用 {"limit":{"track":1234}}
  45. 45. User Stream • 単一ユーザーのタイムライン、イベントを取得 ! • 目的: デスクトップの通知ツールなど • タイムラインのツイート、DM、fav / follow等を受信 • プロテクトアカウントのツイートも受信可能 • 要OAuth( or XAuth)
  46. 46. User Stream • エンドポイント(POST) ‣ https://userstream.twitter.com/1.1/user.json • レスポンス ‣ statusオブジェクトのjson等
  47. 47. Site Stream(beta) • 複数ユーザーのタイムライン、イベントを取得 ! • 目的: Twitter連携するサービスなど • タイムラインのツイート、DM、fav / follow等を受信 • プロテクトアカウントのツイートも受信可能 • 要OAuth
  48. 48. Site Stream • エンドポイント(POST) ‣ https://sitestream.twitter.com/1.1/site.json • パラメータ ‣ follow: 受信するユーザーIDをカンマ区切りで指定、100人まで ! ! • レスポンス ‣ statusオブジェクトのjson等 follow=1234,5678,91023,45324....
  49. 49. Site Streamのコネクション管理 • 接続時に指定できるユーザーは100人まで • 事前にOAuth認証しておく必要がある ! • コントロールストリームでユーザーの追加、 削除可能 • 1コネクションで最大1000人まで受信可能
  50. 50. コントロールストリーム • 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”
  51. 51. コントロールストリームのメソッド • ユーザーの追加 (POST) ! • パラメータ ‣ user_id: カンマ区切りのユーザーID(100人まで) https://sitestream.twitter.com/1.1/site/c/****/add_user.json”
  52. 52. コントロールストリームのメソッド • ユーザーの削除(POST) ! • パラメータ ‣ user_id: カンマ区切りのユーザーID(100人まで) https://sitestream.twitter.com/1.1/site/c/****/remove_user.json”
  53. 53. ベストプラクティス • 可能な限りストリーミング APIを使う • 参照系はレートリミット回避のためできるかぎりREST APIよりもストリーミング APIを利用 • gzipを使う • 帯域を節約 • 接続ネットワークを確認 • 3G接続での利用は推奨されない。接続が切られることも
  54. 54. FAQ • ストリーミングAPIはJavaScriptから使える? • 使えない。サーバサイドの仕組みが必要 • 1%以上のツイートにアクセスしたい • http://gnip.com/ • firehoseは? • 一般に提供はされていない
  55. 55. Webサイト向けAPI • サーバサイドの実装不要 • Web Intents • フォローボタン • Twitterボタン • ウィジェット
  56. 56. 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>
  57. 57. Twitterボタン
  58. 58. ウィジェット
  59. 59. 情報源 • 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
  60. 60. APIたくさんあるので詳しくは…
  61. 61. http://amzn.to/twtr-ref Twitter APIポケットリファレンス
  62. 62. #apijp Twitter APIの応用範囲
  63. 63. Twitter APIの応用範囲 • 認証 • ソーシャルログイン https://manage.doorkeeper.jp/ より
  64. 64. Twitter APIの応用範囲 • キュレーション http://togetter.com より
  65. 65. Twitter APIの応用範囲 • 出力系 • 通知 / アラート
  66. 66. Twitter APIの応用範囲 • 出力系 • 告知
  67. 67. Twitter APIの応用範囲 ∞
  68. 68. #apijp Twitter API最新事例
  69. 69. #apijp Twitter API最新事例 • YAYOI SMART CONNECT https://www.yayoi-kk.co.jp/smart/index.html より
  70. 70. #apijp Twitter API最新事例 https://www.yayoi-kk.co.jp/smart/index.html より
  71. 71. #apijp https://www.yayoi-kk.co.jp/smart/index.html より
  72. 72. #apijp Twitter API最新事例 • YAYOI SMART CONNECT • Twitterが入力ソースの1つ Twitter APIが弥生のAPIにもなる
  73. 73. #apijp Twitter API最新事例 • #アマゾンポチ https://blog.twitter.com/node/4502 より
  74. 74. #apijp Twitter API設計の歴史
  75. 75. #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化
  76. 76. 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化 セキュリティ スケーラビリティ 新機能追従 セキュリティ
  77. 77. #apijp 人気を支えてきたAPIの設計 • シンプルなセキュリティモデル • 全部アクセス可のBASIC認証 • OAuthは読み・書き・DMアクセス可の3種のみ
  78. 78. #apijp Twitter APIの設計 • ゆるい設計: スキーマ定義なし • 実態に応じてフレキシブルに変更 • 不定期に増える属性 • 大きな変更はAPIバージョニングにて対応
  79. 79. #apijp 人気を支えてきたAPIの設計 • レートリミット • 2007年∼ 150回/h • 2009年∼ 350回/h • 2012年∼ 15回/15分:エンドポイント レスポンスより詳細を取得可
  80. 80. #apijp Twitter APIの現在
  81. 81. #apijp Twitter APIの現在 • 2006年∼2012年 : 2ヶ月に1回くらい新機能追加 • 2012年9月Twitter API 1.1リリース、安定期突入
  82. 82. #apijp Twitter APIの現在 • 今年に入り多くの新機能 • ダイレクトメッセージへの画像添付 • 複数画像添付 • ミュート
  83. 83. #apijp 締め
  84. 84. #apijp Twitter APIの今後
  85. 85. #apijp Twitter APIの今後 Webの進化 Twitterの進化 Twitter APIの進化
  86. 86. #apijp ありがとうございました @yusuke

×