Twitter_AS2_2.0 の改造(やりたいことのリスト)
- ブラウザのリロードできちんと最新の発言が表示されるようにする
- 3秒ごとに過去の発言へと遡って表示して行くようにする
- 時刻の表示を日本時間に変換する
まず1つ目。
FireFox の Live HTTP headers で確認すると、こうなっている。
http://www.twitter.com/statuses/user_timeline/8440992.json GET /statuses/user_timeline/8440992.json HTTP/1.1 Host: www.twitter.com User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; ja-JP-mac; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: ja,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: __utma=43838368.401563204.1178289831.1192520917.1192545078.5; __utmv=43838368.Logged%20In; __utmz=43838368.1192520917.4.2.utmccn=(referral)|utmcsr=d.hatena.ne.jp|utmcct=/minorio/|utmcmd=referral; _twitter_session=c5b25ff71d67fb16f8aaa2ff2a07236f If-None-Match: "2792b7b3bb8b94415cf41a12193e647d" HTTP/1.x 304 Not Modified Date: Wed, 17 Oct 2007 13:10:42 GMT Server: hi Connection: close Etag: "2792b7b3bb8b94415cf41a12193e647d" Expires: Wed, 17 Oct 2007 13:15:42 GMT Cache-Control: private, max-age=0, must-revalidate, max-age=300 Set-Cookie: _twitter_session=c5b25ff71d67fb16f8aaa2ff2a07236f; domain=.twitter.com; path=/
最後のところで、5分間(300sec)の寿命のクッキーをセットしている。5分待たずにリロードするとその時点でまた5分のクッキーがセットされるのでいつまでたっても更新されないのかなと考えて5分以上待ってからリロードしてみたが、それでも 304 Not Modified が返って来た。(^_^;
クッキーを無効にして試したところ、最新の内容が取得できた。そのときの HTTP ヘッダーはこうなっていた。セッション ID が変更されているみたいだ。
http://www.twitter.com/statuses/user_timeline/8440992.json GET /statuses/user_timeline/8440992.json HTTP/1.1 Host: www.twitter.com User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; ja-JP-mac; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: ja,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive If-None-Match: "2792b7b3bb8b94415cf41a12193e647d" HTTP/1.x 200 OK Date: Wed, 17 Oct 2007 13:23:38 GMT Server: hi Status: 200 OK X-Runtime: 0.27348 Etag: "2aae6ece7679ae4c48423a13ad21f577" Cache-Control: private, max-age=0, must-revalidate, max-age=300 Content-Type: application/json; charset=utf-8 Content-Length: 13269 Set-Cookie: _twitter_session=267fad0f080c517dda1ad06446c52651; domain=.twitter.com; path=/ Via: 1.1 louie.twitter.com Expires: Wed, 17 Oct 2007 13:28:38 GMT Connection: close
さらに、もう一度クッキーを有効にして試してみた。すると、セッション ID が以前のものに戻り、取得された内容も古いものに逆戻りしてしまった!
http://www.twitter.com/statuses/user_timeline/8440992.json GET /statuses/user_timeline/8440992.json HTTP/1.1 Host: www.twitter.com User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; ja-JP-mac; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: ja,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: __utma=43838368.401563204.1178289831.1192520917.1192545078.5; __utmv=43838368.Logged%20In; __utmz=43838368.1192520917.4.2.utmccn=(referral)|utmcsr=d.hatena.ne.jp|utmcct=/minorio/|utmcmd=referral; _twitter_session=c5b25ff71d67fb16f8aaa2ff2a07236f If-None-Match: "2aae6ece7679ae4c48423a13ad21f577" HTTP/1.x 200 OK Date: Wed, 17 Oct 2007 13:27:29 GMT Server: hi Status: 200 OK X-Runtime: 0.04170 Etag: "2792b7b3bb8b94415cf41a12193e647d" Cache-Control: private, max-age=0, must-revalidate, max-age=300 Content-Type: application/json; charset=utf-8 Content-Length: 13261 Set-Cookie: _twitter_session=c5b25ff71d67fb16f8aaa2ff2a07236f; domain=.twitter.com; path=/ Via: 1.1 alkonost.twitter.com Expires: Wed, 17 Oct 2007 13:32:29 GMT Connection: close
ブラウザを一旦終了してから再び試してみると、場合によっては最新のものが表示されるし、古いままのときもある。セッション ID が変わっていても 304 Not Modified となって古い情報しか取得できない場合もあるため、クッキーのせいと断定することはできない。(>_<)
では、JSON API を叩くときに、count=20 や since=(現在より1分前の時刻)のようなオプションをつけたらどうだろうか?
http://www.twitter.com/statuses/user_timeline/8440992.json?count=20 GET /statuses/user_timeline/8440992.json?count=20 HTTP/1.1 Host: www.twitter.com User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; ja-JP-mac; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: ja,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: __utmz=43838368.1192520917.4.2.utmccn=(referral)|utmcsr=d.hatena.ne.jp|utmcct=/minorio/|utmcmd=referral; __utmv=43838368.Logged%20In; __utma=43838368.401563204.1178289831.1192520917.1192545078.5; _twitter_session=1165a27283cc3fa71c8304976eca860a HTTP/1.x 200 OK Date: Wed, 17 Oct 2007 14:10:36 GMT Server: hi Status: 200 OK X-Runtime: 1.25959 Etag: "0346352e6101019a58a572c236decac1" Cache-Control: private, max-age=0, must-revalidate, max-age=300 Content-Type: application/json; charset=utf-8 Content-Length: 13063 Set-Cookie: _twitter_session=1165a27283cc3fa71c8304976eca860a; domain=.twitter.com; path=/ Via: 1.1 sphinx.twitter.com Expires: Wed, 17 Oct 2007 14:15:36 GMT Connection: close
count=20 を付けてみたらセッション ID が同じでもちゃんと最新の情報を取って来れてる感じ。
http://www.twitter.com/statuses/user_timeline/8440992.json?count=20 GET /statuses/user_timeline/8440992.json?count=20 HTTP/1.1 Host: www.twitter.com User-Agent: Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; ja-JP-mac; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7 Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Accept-Language: ja,en-us;q=0.7,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Cookie: __utmz=43838368.1192520917.4.2.utmccn=(referral)|utmcsr=d.hatena.ne.jp|utmcct=/minorio/|utmcmd=referral; __utmv=43838368.Logged%20In; __utma=43838368.401563204.1178289831.1192545078.1192630496.6; _twitter_session=1165a27283cc3fa71c8304976eca860a; __utmb=43838368; __utmc=43838368 If-None-Match: "0346352e6101019a58a572c236decac1" HTTP/1.x 200 OK Date: Wed, 17 Oct 2007 14:17:13 GMT Server: hi Status: 200 OK X-Runtime: 0.35251 Etag: "0bc005fde766a7b4c96fdcc12ac58574" Cache-Control: private, max-age=0, must-revalidate, max-age=300 Content-Type: application/json; charset=utf-8 Content-Length: 12837 Set-Cookie: _twitter_session=1165a27283cc3fa71c8304976eca860a; domain=.twitter.com; path=/ Via: 1.1 alkonost.twitter.com Expires: Wed, 17 Oct 2007 14:22:13 GMT Connection: close
うむ。このやり方(count=20 を付けるだけだが)だと Twitterrific よりも早く更新情報をゲットできてるようだ。ひとまずこれで行くことにしよう。(^_^
では、2つ目。
これは for ループで行けそうだけど、「3秒ごとに」の部分がちょっと面倒。というのも、FLASH には setTimeout 関数がなく、setInterval でやらなきゃいけないようなのだ。
が、検索してみると Flash8 になって setTimeout() 関数が追加されたという情報があった(参考:setTimeoutが便利です。)。スバラシす!
さっそくやってみる。と、ここで問題発生。
画面にテキストが表示されるのはループを抜けたあとになるようで、3秒ごとにメッセージが変わるのではなく、最後のメッセージのみが表示されるという結果に終わった。(>_<、
タイムライン上でループさせたらいいかも知れない。その場合、ループのカウンターをグローバル変数として保持する必要がある。グローバル変数は、どうやら _global.variableName = value; のように書くらしい。
グローバル変数に twitter JSON API から取得したオブジェクトを格納して、順に表示させたらうまく行ったが、その後いじってるうちに動かなくなってしまった。ん〜明日見直そう。