Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

8,334 views

Published on

Published in: Technology
  • Be the first to comment

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

×