プログラマでありたい

おっさんになっても、プログラマでありつづけたい

Twitter Streaming APIのJSONの構造

 Twitter Streaming APIで、sampleから返ってくるjsonの値。
ぱっと見たらよく解らなかったので、メモがてらにエントリー。

% curl http://stream.twitter.com/1/statuses/sample.json  -uYOUR_TWITTER_USERNAME:YOUR_PASSWORD
{"coordinates"=>nil, "created_at"=>"Wed May 05 11:47:19 +0000 2010", "favorited"=>false, "truncated"=>false, "contributors"=>nil, "text"=>"Today.. I'm happy, but in other side, I'm sad... I don't know why it could happen..", "id"=>13421567803, "geo"=>nil, "user_id"=>63365081, "in_reply_to_user_id"=>nil, "in_reply_to_screen_name"=>nil, "user"=>{"profile_sidebar_fill_color"=>"e0ff92", "name"=>"Noor Ch Promogyasiwi", "profile_background_tile"=>false, "profile_sidebar_border_color"=>"87bc44", "profile_image_url"=>"http://a1.twimg.com/profile_images/798993858/DSC02587_normal.JPG", "location"=>"", "created_at"=>"Thu Aug 06 04:05:20 +0000 2009", "profile_link_color"=>"0000ff", "url"=>nil, "contributors_enabled"=>false, "favourites_count"=>0, "utc_offset"=>-28800, "id"=>63365081, "followers_count"=>8, "protected"=>false, "profile_text_color"=>"000000", "lang"=>"en", "geo_enabled"=>false, "verified"=>false, "notifications"=>nil, "profile_background_color"=>"9ae4e8", "time_zone"=>"Pacific Time (US & Canada)", "description"=>"", "profile_background_image_url"=>"http://s.twimg.com/a/1272410411/images/themes/theme1/bg.png", "statuses_count"=>17, "friends_count"=>6, "following"=>nil, "screen_name"=>"Nooryasiwi"}, "place"=>nil, "source"=>"<a href=\"http://blackberry.com/twitter\" rel=\"nofollow\">Twitter for BlackBerry\302\256</a>", "in_reply_to_status_id"=>nil}


ややこしい(?)ことに、statusとuserの属性がまとめて返ってきます。
理解する為に、一度xmlで取って構造を理解しておくことをお勧めします。

curl http://stream.twitter.com/1/statuses/sample.xml -uYOUR_TWITTER_USERNAME:YOUR_PASSWORD

<?xml version="1.0" encoding="UTF-8"?>
<status>
  <created_at>Wed May 05 11:55:22 +0000 2010</created_at>
  <id>13421898200</id>
  <text>@Curlyminx He's looking much better, despite the new &amp; interesting mottling. It's a relief that all his blood is staying on the inside</text>
  <source>&lt;a href=&quot;http://www.tweetdeck.com&quot; rel=&quot;nofollow&quot;&gt;TweetDeck&lt;/a&gt;</source>
  <truncated>false</truncated>
  <in_reply_to_status_id>13420990957</in_reply_to_status_id>
  <in_reply_to_user_id>19793911</in_reply_to_user_id>
  <favorited>false</favorited>
  <in_reply_to_screen_name>Curlyminx</in_reply_to_screen_name>
  <user_id>16738672</user_id>
  <user>
    <id>16738672</id>
    <name>laurie sage</name>
    <screen_name>lauriepink</screen_name>
    <location>manchestie</location>
    <description>Drawer, but not the kind you keep pants in. Well, not usually anyway. </description>
    <profile_image_url>http://a3.twimg.com/profile_images/523020565/monkabum2_normal.jpg</profile_image_url>
    <url>http://www.flickr.com/photos/laurie_pink</url>
    <protected>false</protected>
    <followers_count>1041</followers_count>
    <profile_background_color>ffffff</profile_background_color>
    <profile_text_color>333333</profile_text_color>
    <profile_link_color>162283</profile_link_color>
    <profile_sidebar_fill_color>ffb8de</profile_sidebar_fill_color>
    <profile_sidebar_border_color>112cac</profile_sidebar_border_color>
    <friends_count>337</friends_count>
    <created_at>Tue Oct 14 14:35:54 +0000 2008</created_at>
    <favourites_count>48</favourites_count>
    <utc_offset>0</utc_offset>
    <time_zone>London</time_zone>
    <profile_background_image_url>http://a3.twimg.com/profile_background_images/6520325/twitbgshortleg.jpg</profile_background_image_url>
    <profile_background_tile>false</profile_background_tile>
    <notifications></notifications>
    <geo_enabled>false</geo_enabled>
    <verified>false</verified>
    <following></following>
    <statuses_count>19958</statuses_count>
    <lang>en</lang>
    <contributors_enabled>false</contributors_enabled>
  </user>
  <geo/>
  <coordinates/>
  <place/>
  <contributors/>
</status>

 割と解りやすくなったと思います。statusの大部分は、userの属性情報で占められています。tweetに当たる部分は、 created_at,id,text,source,truncated,in_reply_to_status_id,in_reply_to_user_id,favorited,in_reply_to_screen_name,user_id,geo,coordinates,place,contributorsのみです。


以下、各項目の意味です。位置関係の属性は、今後整理されるようです。

created_at
 tweetされた時間。
id
 tweetのID。(呟き自体を一意に識別するID)
text
 tweetの本文。
source
 投稿したアプリケーション名。(ブラウザ名や、Twitterクライアントソフト)
truncated
 省略されているか否か
in_reply_to_status_id
 言及(mention)を投稿しようとする時に、その言及先のtweetのステータスID。
in_reply_to_user_id
 言及(mention)を投稿しようとする時に、その言及先のユーザID。
in_reply_to_screen_name
 言及(mention)を投稿しようとする時に、その言及先のユーザ名。
favorited
 (あなたの)お気に入り登録済みか否か
user_id
 投稿者のユーザID
geo
 緯度、経度
coordinates
 緯度、経度
place
contributors 
 複数人で共有しているアカウントの場合、誰が投稿したか


詳しい情報は、Twitter API プログラミングで詳しく書いてあります。なかなか便利な一冊ですよ。


Twitter API プログラミング
辻村 浩
ワークスコーポレーション
売り上げランキング: 1487