Upload
yusuke-yamamoto
View
6.004
Download
3
Embed Size (px)
DESCRIPTION
Citation preview
Yusuke Yamamoto
Yusuke Yamamoto
第2.1回Twitter API勉強会
#twtr_hack
2011/12/18
Yusuke Yamamoto
質問など
#twtr_hack #q
Yusuke Yamamoto
Twitter API勉強会• 対象‣ Twitter APIに興味がある方であればどなたでも
• 目的‣ 技術情報のシェア / 技術者の交流
• 今回は第2.1回目
4
Yusuke Yamamoto
Twitter APIハッカソン• Twitter と連携する何かを開発
‣ Webサービス
‣ デスクトップアプリケーション/ユーティリティ
‣ モバイルアプリ など
5
Yusuke Yamamoto
第2.1回Twitter API勉強会• @yusukey
‣ Twitter の検索API等
• @knj77
‣ Zusaarについて何か
• LT
‣ @tkawa / @mike_neck / @ts_3156 / @sue445 / @imaoca
6
Yusuke Yamamoto
今日のタイムテーブル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
7
Yusuke Yamamoto
Twitter API ポケットリファレンス
• 好評発売中!
http://amzn.to/twtr-ref8
Yusuke Yamamoto
第2.1回Twitter API勉強会• 内容‣ Twitter APIの検索API
‣ 最近のTwitter APIアップデート
‣ t.coリンクの対応方法
9
Yusuke Yamamoto
Twitter の検索API
Yusuke Yamamoto 11
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'
Yusuke Yamamoto
検索 API• プル型‣ 最近のツイートを検索
• https://twitter.com/#!/search-homeとほぼ同じ機能
12
Yusuke Yamamoto
REST APIと検索 API• 2008年にTwitter検索エンジン-Summize社を買収
• 検索APIも技術的にはREST API
• レスポンスのスキーマが異なる!!!
13
https://dev.twitter.com/docs/api/1/get/search
Yusuke Yamamoto
検索 APIの呼び出し• エンドポイント(GET)
‣ http://search.twitter.com/search.json?q=****
• qパラメータq : 検索クエリ
・ #twtr_hackを含むツイート
q=#twtr_hack
・@yusukeyの#twtr_hackを含むツイート
q=#twtr_hack+from:yusukey
14
Yusuke Yamamoto
検索 APIのレスポンス
15
{"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
期間を絞る・sinceオペレータ : 指定した日(UTC)以降のツイート
q=#twtr_hack+since:2011-12-21
・untilオペレータ : 指定した日(UTC)以前のツイート
q=#twtr_hack+until:2011-12-21
16
Yusuke Yamamoto
ページ処理・rpp: 1レスポンス当たりの最大ツイート数(最大100まで指定可)
q=foobar&rpp=100
・page: ページ(初期値は1、最大15まで)
q=foobar&page=2
・max_idパラメータ : 指定したツイートID以前のツイート
q=foobar&max_id=149144352336265217
17
Yusuke Yamamoto
ページ処理ベストプラクティス
・rppは100まで、pageは15まで
最大1500件までしか取れない→max_idパラメータで回せばok
Twitter4Jを使った例18
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);
Yusuke Yamamoto
最近のTwitter APIアップデート
Yusuke Yamamoto
ストリーミングAPIの変更・エンドポイントがSSLのみに(9月末~)
一般
https://stream.twitter.com/1/
ユーザーストリーム
https://userstream.twitter.com/2/
サイトストリーム
https://sitestream.twitter.com/2b/
20
Yusuke Yamamoto
検索APIのスキーマ変更1・ユーザー名の追加(12月からデフォルト)
→ to_user_name / from_user_name
・in_reply_toの追加(12月からデフォルト)
→ 検索結果から会話を追える
21
Yusuke Yamamoto
検索APIのスキーマ変更2・エンティティの追加(include_entities=true を指定)
22
"entities": { "hashtags": [{"indices": [9, 19], "text": "twitter4j"}], "urls": [{ "display_url": "twitter4j.org/ja/api-support\u2026", "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
t.coリンクの対応方法
Yusuke Yamamoto
t.co• t.co: ティコ
• TwitterのURL短縮サービス
‣ 悪質なサイトへの誘導をブロック‣ リンクのクリックスルー測定‣ ツイート文字数制限を緩和
24
The t.co URL Wrapperhttps://dev.twitter.com/docs/tco-url-wrapper
Yusuke Yamamoto
本当にあった怖いt.co• URLのつもりじゃないのにリンクになる
‣ 仕様です・・• 日本語(マルチバイト)を含むURLが・・・
‣ dev.twitter.com またはTwitter development Talkへ報告を
• リンク先のURLがわからない(クライアント依存)
25
Yusuke Yamamoto
t.co FAQ• t.coバグだらけ!
‣ かなり直ってます• t.coのクリック数を取得するAPIは?
‣ 現在のところ非公開• 同じURLでも違うt.coリンクになる
‣ そういう仕様
26
Yusuke Yamamoto
t.co FAQ• bit.lyのリンクをツイートした場合は?
‣ expanded_url / display_urlはbit.lyになる。2重展開はしない
• include_entities=trueを付け忘れた・・
‣ HEADリクエストでリダイレクト先を確認可能
27
Yusuke Yamamoto
情報源• Twitter development talk-ja
• @twj_dev
• dev.twitter.com - Discussions
http://bit.ly/tdt-ja
https://dev.twitter.com/discussions
https://twtter.com/twj_dev
Yusuke Yamamoto
今後の予定12月 検索 API
1月 Streaming API
2月 Webサイト向け API
3月 API 利用規約