SlideShare a Scribd company logo
Yusuke Yamamoto
第2.1回
                  Twitter API勉強会

                    #twtr_hack

                      2011/12/18

Yusuke Yamamoto
質問など

                  #twtr_hack #q


Yusuke Yamamoto
Twitter API勉強会
• 対象
 ‣   Twitter APIに興味がある方であればどなたでも

• 目的
 ‣   技術情報のシェア / 技術者の交流



• 今回は第2.1回目

 Yusuke Yamamoto                   4
Twitter APIハッカソン
• Twitter と連携する何かを開発
 ‣   Webサービス

 ‣   デスクトップアプリケーション/ユーティリティ

 ‣   モバイルアプリ など




 Yusuke Yamamoto              5
第2.1回Twitter API勉強会
• @yusukey
 ‣   Twitter の検索API等



• @knj77
 ‣   Zusaarについて何か



• LT
 ‣   @tkawa / @mike_neck / @ts_3156 / @sue445 / @imaoca


  Yusuke Yamamoto                                    6
今日のタイムテーブル
19:00∼ APIの基本と最新動向について @yusukey
19:40∼ グループに分かれて自己紹介
19:50∼ Zusaarについて何か @knj77
20:20∼ LT
- OAuth Echoについて@tkawa
- GroovyとQuartzとTwitter4Jの甘い生活G @mike_neck
- 認証なしで使えるAPIまとめ @ts_3156
- TDD @sue445
- 放射線を自動計測してTwitterにつぶやくimaocandeの紹介 @imaoca

  Yusuke Yamamoto                        7
Twitter API ポケットリファレンス
• 好評発売中!




           http://amzn.to/twtr-ref
 Yusuke Yamamoto                     8
第2.1回Twitter API勉強会
• 内容
 ‣   Twitter APIの検索API

 ‣   最近のTwitter APIアップデート

 ‣   t.coリンクの対応方法




 Yusuke Yamamoto            9
Twitter の検索API



Yusuke Yamamoto
Twi$er'API
  REST'API'                                              '
                            '                '
                    '                                '
                    '                            '
                        '                   '

                                                                 :'               '
        API
                                                                 :'Java,'Objec8ve9C    '


                    API
        Streamed'Tweets'
                                                                                 ,'        '
                                                             Java,'Python,'PHP,'Ruby,'Objec8ve9C    '



 Web                    API
                                '   Web'Intents
                                                                 :'Web       '
                                '   @Anywhere
                                                                 :'HTML,'JavaScript'


  Yusuke Yamamoto                                                                              11
検索 API
• プル型
 ‣   最近のツイートを検索

• https://twitter.com/#!/search-homeとほぼ同じ機能




  Yusuke Yamamoto                      12
REST APIと検索 API
• 2008年にTwitter検索エンジン-Summize社を買収
• 検索APIも技術的にはREST API
• レスポンスのスキーマが異なる!!!



 https://dev.twitter.com/docs/api/1/get/search
  Yusuke Yamamoto                                13
検索 APIの呼び出し
• エンドポイント(GET)
‣   http://search.twitter.com/search.json?q=****

• qパラメータ
    q : 検索クエリ

    ・ #twtr_hackを含むツイート

    q=#twtr_hack
    ・@yusukeyの#twtr_hackを含むツイート

    q=#twtr_hack+from:yusukey

      Yusuke Yamamoto                              14
検索 APIのレスポンス
{"completed_in": 0.055442, "max_id": 38516581864718336,
"max_id_str": "38516581864718336", "next_page": "?
page=2&max_id=38516581864718336&q=twitterapi", "page": 1,
 "query": "twitterapi", "refresh_url": "?
since_id=38516581864718336&q=twitterapi",
 "results": [
  {"created_at": "Fri, 18 Feb 2011 08:49:25 +0000",
   "from_user": "yusukey", "from_user_id": 10248,
   "from_user_id_str": "10248", "geo": null,
   "id": 38520449856045056, "id_str": "38520449856045056",
   "iso_language_code": "ja", "metadata": {"result_type":
"recent"},
   "profile_image_url": "http://a1.twimg.com/profile_images/
1130177378/b_normal.jpg",
   "source": "<a href="http://sites.google.com/site/yorufukurou/
" rel="nofollow">YoruFukurou</a>",
   "text": "twitterapi今日は安定してるなー", "to_user_id": null,
"to_user_id_str": null},
  ...]}
     Yusuke Yamamoto                                      15
期間を絞る
・sinceオペレータ : 指定した日(UTC)以降のツイート

q=#twtr_hack+since:2011-12-21
・untilオペレータ : 指定した日(UTC)以前のツイート

q=#twtr_hack+until:2011-12-21




  Yusuke Yamamoto                 16
ページ処理
・rpp: 1レスポンス当たりの最大ツイート数(最大100まで指定可)

q=foobar&rpp=100


・page: ページ(初期値は1、最大15まで)

q=foobar&page=2


・max_idパラメータ : 指定したツイートID以前のツイート

q=foobar&max_id=149144352336265217


  Yusuke Yamamoto                    17
ページ処理ベストプラクティス
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);



 ・rppは100まで、pageは15まで

 最大1500件までしか取れない→max_idパラメータで回せばok

 Twitter4Jを使った例
    Yusuke Yamamoto                                       18
最近のTwitter APIアップデート




 Yusuke Yamamoto
ストリーミングAPIの変更
・エンドポイントがSSLのみに(9月末∼)

一般

https://stream.twitter.com/1/
ユーザーストリーム

https://userstream.twitter.com/2/
サイトストリーム

https://sitestream.twitter.com/2b/



  Yusuke Yamamoto                    20
検索APIのスキーマ変更1
・ユーザー名の追加(12月からデフォルト)

→ to_user_name / from_user_name
・in_reply_toの追加(12月からデフォルト)

→ 検索結果から会話を追える




  Yusuke Yamamoto                 21
検索APIのスキーマ変更2
  ・エンティティの追加(include_entities=true を指定)
 "entities": {
  "hashtags": [{"indices": [9, 19], "text": "twitter4j"}],
  "urls": [{
   "display_url": "twitter4j.org/ja/api-supportu2026",
   "expanded_url": "http://twitter4j.org/ja/api-support.html",
   "indices": [35, 54], "url": "http://t.co/b6l2xlU"}],
  "user_mentions": [{
   "id": 4933401, "id_str": "4933401", "indices": [0, 8],
   "name": "山本 裕介", "screen_name": "yusukey"}]},
 "text": "@yusukey #twitter4j のAPIのページ更新しました http://
 t.co/b6l2xlU"


 @yusukey #twitter4j のAPIのページ更新しました http://t.co/b6l2xlU


user_mention          hashtag                     url
    Yusuke Yamamoto                                      22
t.coリンクの対応方法




Yusuke Yamamoto
t.co
• t.co: ティコ
• TwitterのURL短縮サービス
‣   悪質なサイトへの誘導をブロック

‣   リンクのクリックスルー測定

‣   ツイート文字数制限を緩和



     The t.co URL Wrapper
     https://dev.twitter.com/docs/tco-url-wrapper
     Yusuke Yamamoto                                24
本当にあった怖いt.co
• URLのつもりじゃないのにリンクになる
‣   仕様です・・

• 日本語(マルチバイト)を含むURLが・・・
‣   dev.twitter.com またはTwitter development Talkへ報告を

• リンク先のURLがわからない(クライアント依存)


      Yusuke Yamamoto                                 25
t.co FAQ
• t.coバグだらけ!
‣   かなり直ってます

• t.coのクリック数を取得するAPIは?
‣   現在のところ非公開

• 同じURLでも違うt.coリンクになる
‣   そういう仕様



     Yusuke Yamamoto              26
t.co FAQ
• bit.lyのリンクをツイートした場合は?
‣   expanded_url / display_urlはbit.lyになる。2重展開はしない

• include_entities=trueを付け忘れた・・
‣   HEADリクエストでリダイレクト先を確認可能




      Yusuke Yamamoto                               27
情報源
  • Twitter development talk-ja
             http://bit.ly/tdt-ja

  • @twj_dev
            https://twtter.com/twj_dev

  • dev.twitter.com - Discussions
           https://dev.twitter.com/discussions

Yusuke Yamamoto
今後の予定
12月 検索 API

1月 Streaming API

2月 Webサイト向け API

3月 API 利用規約




Yusuke Yamamoto

More Related Content

KEY
第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack
PDF
Twitter4jハンズオン 5/1 #twtr_hack
ODP
TwitterのStreaming APIについて
PDF
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
PDF
Twitter API1.1 #twtr_hack
PDF
Twitter API
PDF
Twitter Cards #twtr_hack
PPTX
Twitter API で学ぶ OAuth
第3回Twitter API勉強会 - ストリーミングAPI #twtr_hack
Twitter4jハンズオン 5/1 #twtr_hack
TwitterのStreaming APIについて
Twitter API最新事情 - API Meetup Tokyo #1 #apijp
Twitter API1.1 #twtr_hack
Twitter API
Twitter Cards #twtr_hack
Twitter API で学ぶ OAuth

What's hot (11)

PDF
Webサイト向けAPI #twtr_hack
PPT
appengine活用事例資料@TDDBC札幌2.1
PDF
WatchKitを実際にさわってみてわかったこと
PDF
広島IT勉強会カレンダー(仮)はRubyを使っています
PDF
Apple Watch 間通信
PDF
Elastic Beanstalk 概要
PDF
Googleアナリティクス ランキング概要
PPTX
Spring bootで学ぶ初めてのwebアプリ開発
PDF
watchOS 2 新機能の細かい話
PDF
Rails環境に最適なVue.js構成を探る
PDF
なじむ Redmine
Webサイト向けAPI #twtr_hack
appengine活用事例資料@TDDBC札幌2.1
WatchKitを実際にさわってみてわかったこと
広島IT勉強会カレンダー(仮)はRubyを使っています
Apple Watch 間通信
Elastic Beanstalk 概要
Googleアナリティクス ランキング概要
Spring bootで学ぶ初めてのwebアプリ開発
watchOS 2 新機能の細かい話
Rails環境に最適なVue.js構成を探る
なじむ Redmine
Ad

Similar to 第2.1回Twitter API勉強会 - 検索API (20)

PDF
仙台 iOS開発者勉強会 2011/11/03 - TwitterAPIについて
PDF
JavaからAkkaハンズオン
KEY
Twitter クライアント開発のすすめ #twtr_hack
PDF
ネットワークAPI のあれこれ (ENOG37)
PDF
ASP.NET WebAPI 体験記 #clrh99
PDF
配布用Dotcloudによるすぐ始めるtwitterwebアプリ開発#twtr hack
PPTX
meguro.rb LT
PPTX
ご注文はRxですか? -RxSwiftを実際に導入してみた件-
PDF
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
PPT
マッシュアップ勉強会
PPT
マッシュアップ勉強会
PDF
python-twitterを用いたTwitterデータ収集
PPTX
JavaScriptテンプレートエンジンで活かすData API
PDF
チャットサービス運用の舞台裏
PDF
Twitter4Jとテスト
PDF
Can we live in a pure Swift world?
PDF
YouTube APIの紹介
PPTX
Getting Started with Graph Database with Python
PDF
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
PDF
Twitter4Rでつくるゆるふわ愛されTwitter bot
仙台 iOS開発者勉強会 2011/11/03 - TwitterAPIについて
JavaからAkkaハンズオン
Twitter クライアント開発のすすめ #twtr_hack
ネットワークAPI のあれこれ (ENOG37)
ASP.NET WebAPI 体験記 #clrh99
配布用Dotcloudによるすぐ始めるtwitterwebアプリ開発#twtr hack
meguro.rb LT
ご注文はRxですか? -RxSwiftを実際に導入してみた件-
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
マッシュアップ勉強会
マッシュアップ勉強会
python-twitterを用いたTwitterデータ収集
JavaScriptテンプレートエンジンで活かすData API
チャットサービス運用の舞台裏
Twitter4Jとテスト
Can we live in a pure Swift world?
YouTube APIの紹介
Getting Started with Graph Database with Python
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
Twitter4Rでつくるゆるふわ愛されTwitter bot
Ad

More from Yusuke Yamamoto (20)

PDF
株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai
PDF
これからはじめるGit、GitHub #stapy
PDF
誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan
PDF
JetBrains IDEハンズオン
PDF
Java Küche 2016 LT 在室状況自動通知ボット #JavaKueche
PDF
Java Küche 2016 #JavaKueche
PDF
JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Ap...
PDF
WebStormから始まる快適Web開発ワークフロー #html5jk
PDF
データクラスから始めるKotlin / JetBrainsに行ってきました #kotlin_kansai #jkug
PDF
Troubleshooting Slowdowns, Freezes, Deadlocks : Introduction to Thread Dump #...
PDF
カジュアルにスレッドダンプ - @yusuke #javacasual
PDF
Excel方眼紙アプリケーションサーバと侍の新機能 #jjug
PDF
株式会社サムライズム@samuraismがcoincheck for ECを使ってビットコイン決済に対応した話 #gbdaitokai
PDF
Botを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjug
PDF
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
PDF
貧乏人のHeroku活用術 #herokujp
PDF
リーンスタートアップ x Java #jjug #jjug_ccc #ccc_h4
PDF
JavaScript時代のJava #kansumiB7 #kansumi
PDF
テンプレートエンジンの話 #jjug
PDF
失敗から学ぶAPI設計 #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring
株式会社サムライズム 新製品発表会 物理イカリングのご紹介 #gbdaitokai
これからはじめるGit、GitHub #stapy
誰も知らない IntelliJ IDEA凄技100選 #kotlin_sansan
JetBrains IDEハンズオン
Java Küche 2016 LT 在室状況自動通知ボット #JavaKueche
Java Küche 2016 #JavaKueche
JavaOne2016 #CON5929 Time-Saving Tips and Tricks for Building Quality Java Ap...
WebStormから始まる快適Web開発ワークフロー #html5jk
データクラスから始めるKotlin / JetBrainsに行ってきました #kotlin_kansai #jkug
Troubleshooting Slowdowns, Freezes, Deadlocks : Introduction to Thread Dump #...
カジュアルにスレッドダンプ - @yusuke #javacasual
Excel方眼紙アプリケーションサーバと侍の新機能 #jjug
株式会社サムライズム@samuraismがcoincheck for ECを使ってビットコイン決済に対応した話 #gbdaitokai
Botを使った業務効率化 / Java8を使ったBot実装効率化 @yusuke #jjug
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
貧乏人のHeroku活用術 #herokujp
リーンスタートアップ x Java #jjug #jjug_ccc #ccc_h4
JavaScript時代のJava #kansumiB7 #kansumi
テンプレートエンジンの話 #jjug
失敗から学ぶAPI設計 #ccc_h4 #jjug #jjug_ccc JJUG CCC 2013 Spring

第2.1回Twitter API勉強会 - 検索API