2013年03月04日

TwitterのStreamingAPIで得られる情報から判定できるイベントあれこれ

最近夢中になっているのが、自作のTwitterクライアント作りなのですが、その中核となるのがStreamingAPIです。

SiteAPIに関しては、私のようなパンピーには無縁のAPIです。
が、UserStreamに関しては使えるようにならないと、今後TwitterAPI1.1オンリーの世界では生き残れません。

そんなわけで(?)今日はUserStreamでやってくる情報を元に、判定できるイベントについて考えてみようと思います。まあまずはIdeoneにアップロードしておいた、実装のソースコードを読んでもらいたい。

Ideoneなソースコード

なんで外部にアップロードしたかっていう時点でお察しなんですが、超絶長くて読みづらくてクソなソースコードです

とはいえ、このソースコードで注目して欲しいのは、335行目から始まる
private EventType GetEventType(Auth auth,dynamic json)
このメソッド。

こいつが、今日話すメインの処理をする関数(とか言ったら怒られるのでメソッド)です。



さて、このメソッドですが、OAuth認証したときのデータ(ユーザIDやスクリーンネームも入ってる単なる文字列)と、Twitter社からやってきたUserStreamの中身(JSON形式の単なる文字列)を使って、UserStreamの中身を判定させる。というものです。

とはいえ、単なる文字列のまま処理すると面倒なので、前処理としてDynamicJsonというライブラリや、自前のStringパーサをかまして扱いやすい形にしています。(ここら辺はお察しください)


@やってくるデータには、eventというものが含まれているものとそうでないものがあるぞっ
実際のデータを例に挙げましょう。以下のものはふつーのツイートデータです。



created_at : Mon Mar 04 04:54:42 +0000 2013
id : 3.0844034220886E+17
id_str : 308440342208860160
text : かなしみ
source : fuyutiger
truncated : False
in_reply_to_status_id : null
in_reply_to_status_id_str : null
in_reply_to_user_id : null
in_reply_to_user_id_str : null
in_reply_to_screen_name : null
user : [
id : 279120513
id_str : 279120513
name : がお
screen_name : gaogao_9
location : えいえんのじゅうはっさい
url : null
description : えいえんのじゅうはっさいです。わかい。
{最近やってること:[C#,VerilogHDL,BOTのお世話,ギャルゲー(星メモFD),おえかき,PSO2],たまにやってること:[ポケモン,TW,東方STG,麻雀]}

アナイスbot―「@AnaisBot」
protected : False
followers_count : 216
friends_count : 256
listed_count : 18
created_at : Fri Apr 08 16:40:11 +0000 2011
favourites_count : 4762
utc_offset : 32400
time_zone : Tokyo
geo_enabled : False
verified : False
statuses_count : 24233
lang : ja
contributors_enabled : False
is_translator : False
profile_background_color : 0099B9
profile_background_image_url : http://a0.twimg.com/images/themes/theme4/bg.gif
profile_background_image_url_https : https://si0.twimg.com/images/themes/theme4/bg.gif
profile_background_tile : False
profile_image_url : http://a0.twimg.com/profile_images/2251665994/_____normal.png
profile_image_url_https : https://si0.twimg.com/profile_images/2251665994/_____normal.png
profile_link_color : 0099B9
profile_sidebar_border_color : 5ED4DC
profile_sidebar_fill_color : 95E8EC
profile_text_color : 3C3940
profile_use_background_image : True
default_profile : False
default_profile_image : False
following : null
follow_request_sent : null
notifications : null
]
geo : null
coordinates : null
place : null
contributors : null
retweet_count : 0
entities : [
hashtags : [
]
urls : [
]
user_mentions : [
]
]
favorited : False
retweeted : False
filter_level : medium




な、ながいっ
次は↑のものを自演ふぁぼふぁぼしたときの反応です




event : favorite
target_object : [
entities : [
hashtags : [
]
urls : [
]
user_mentions : [
]
]
coordinates : null
user : [
id : 279120513
followers_count : 216
profile_background_tile : False
profile_sidebar_fill_color : 95E8EC
statuses_count : 24233
utc_offset : 32400
default_profile_image : False
profile_image_url_https : https://twimg0-a.akamaihd.net/profile_images/2251665994/_____normal.png
name : がお
lang : ja
profile_background_color : 0099B9
favourites_count : 4762
friends_count : 256
contributors_enabled : False
protected : False
profile_image_url : http://a0.twimg.com/profile_images/2251665994/_____normal.png
time_zone : Tokyo
profile_background_image_url : http://a0.twimg.com/images/themes/theme4/bg.gif
created_at : Fri Apr 08 16:40:11 +0000 2011
profile_link_color : 0099B9
geo_enabled : False
url :
following : False
default_profile : False
screen_name : gaogao_9
notifications : False
profile_use_background_image : True
profile_text_color : 3C3940
id_str : 279120513
follow_request_sent : False
verified : False
is_translator : False
listed_count : 18
profile_background_image_url_https : https://twimg0-a.akamaihd.net/images/themes/theme4/bg.gif
profile_sidebar_border_color : 5ED4DC
description : えいえんのじゅうはっさいです。わかい。
{最近やってること:[C#,VerilogHDL,BOTのお世話,ギャルゲー(星メモFD),おえかき,PSO2],たまにやってること:[ポケモン,TW,東方STG,麻雀]}

アナイスbot―「@AnaisBot」
location : えいえんのじゅうはっさい
]
id_str : 308440342208860160
place : null
truncated : False
in_reply_to_status_id_str : null
in_reply_to_user_id : null
retweeted : False
in_reply_to_user_id_str : null
created_at : Mon Mar 04 04:54:42 +0000 2013
retweet_count : 0
in_reply_to_status_id : null
text : かなしみ
source : fuyutiger
geo : null
id : 3.0844034220886E+17
contributors : null
in_reply_to_screen_name : null
favorited : True
]
target : [
id : 279120513
followers_count : 216
profile_background_tile : False
profile_sidebar_fill_color : 95E8EC
statuses_count : 24233
utc_offset : 32400
default_profile_image : False
profile_image_url_https : https://twimg0-a.akamaihd.net/profile_images/2251665994/_____normal.png
name : がお
lang : ja
profile_background_color : 0099B9
favourites_count : 4762
friends_count : 256
contributors_enabled : False
protected : False
profile_image_url : http://a0.twimg.com/profile_images/2251665994/_____normal.png
time_zone : Tokyo
profile_background_image_url : http://a0.twimg.com/images/themes/theme4/bg.gif
created_at : Fri Apr 08 16:40:11 +0000 2011
profile_link_color : 0099B9
geo_enabled : False
url :
following : False
default_profile : False
screen_name : gaogao_9
notifications : False
profile_use_background_image : True
profile_text_color : 3C3940
id_str : 279120513
follow_request_sent : False
verified : False
is_translator : False
listed_count : 18
profile_background_image_url_https : https://twimg0-a.akamaihd.net/images/themes/theme4/bg.gif
profile_sidebar_border_color : 5ED4DC
description : えいえんのじゅうはっさいです。わかい。
{最近やってること:[C#,VerilogHDL,BOTのお世話,ギャルゲー(星メモFD),おえかき,PSO2],たまにやってること:[ポケモン,TW,東方STG,麻雀]}

アナイスbot―「@AnaisBot」
location : えいえんのじゅうはっさい
]
created_at : Mon Mar 04 04:54:47 +0000 2013
source : [
id : 279120513
followers_count : 216
profile_background_tile : False
profile_sidebar_fill_color : 95E8EC
statuses_count : 24233
utc_offset : 32400
default_profile_image : False
profile_image_url_https : https://twimg0-a.akamaihd.net/profile_images/2251665994/_____normal.png
name : がお
lang : ja
profile_background_color : 0099B9
favourites_count : 4762
friends_count : 256
contributors_enabled : False
protected : False
profile_image_url : http://a0.twimg.com/profile_images/2251665994/_____normal.png
time_zone : Tokyo
profile_background_image_url : http://a0.twimg.com/images/themes/theme4/bg.gif
created_at : Fri Apr 08 16:40:11 +0000 2011
profile_link_color : 0099B9
geo_enabled : False
url :
following : False
default_profile : False
screen_name : gaogao_9
notifications : False
profile_use_background_image : True
profile_text_color : 3C3940
id_str : 279120513
follow_request_sent : False
verified : False
is_translator : False
listed_count : 18
profile_background_image_url_https : https://twimg0-a.akamaihd.net/images/themes/theme4/bg.gif
profile_sidebar_border_color : 5ED4DC
description : えいえんのじゅうはっさいです。わかい。
{最近やってること:[C#,VerilogHDL,BOTのお世話,ギャルゲー(星メモFD),おえかき,PSO2],たまにやってること:[ポケモン,TW,東方STG,麻雀]}

アナイスbot―「@AnaisBot」
location : えいえんのじゅうはっさい
]



見ての通り「event」なるものがあります。しかもご丁寧に中身は「favorite」という文字列です。テラ親切。
なお、ふぁぼのほうの説明をすると、

「target_object」のツイートを「source」さんが「target」さんに対して「event」しました。

こんな感じの意味合いです。今回は、自分が呟いたツイートを自分でふぁぼしたので、自分の情報しかないです(かなしみ)


Aeventの無いものにも、多少の特徴点はあるぞっ
userstreamには多種多様なものがやってきます。例えば↑のツイートをついけしすると以下のようなものがきます。



delete : [
status : [
id : 3.0844034220886E+17
user_id : 279120513
id_str : 308440342208860160
user_id_str : 279120513
]
]



はい、deleteのなかにstatusがあって、その中にユーザIDと、ツイートIDが表示されていますね。
つまり、deleteがきたら「何かが消えたんだな・・・」って判定して、かつstatusがあったら「このパターンはツイ消しかリプ消しかRT消しやな・・・」って判断させます。

そのあたりは、先ほどのIdeoneの613行目から書かれています。ごり押し感がすごいですね。

deleteに関しては情報が少なすぎて、これ以上の判別が不可能なのですが(Twitter社なんとかしてくれ)、ふぁぼなんかに関してはかなり細かく絞れます。(何故かふぁぼはeventで、RTは非eventですし)


あとは、ソースコード嫁(投げた)
posted by がお at 14:22| Comment(0) | C# | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。