モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

Twitter API謎仕様。取得したtweetの時刻のフォーマットがAPIによって違う

以前、Twitterのユーザ毎TLやハッシュタグ等で検索した結果のTLを表示するjavascriptを書きました。


ハッシュタグなどでtwitter検索した結果を表示して自動更新するjavascript
http://d.hatena.ne.jp/stealthinu/20100531/p2


PukiWikiTwitterプラグイン
http://d.hatena.ne.jp/stealthinu/20100607/p2



実はこれには、tweetしたのが今から何分前とか何時間前、という表示がうまく動かないバグがあって、それにこちらの方がパッチ書かれていたので、今回ちょっといろいろやってるのを機にリファクタリングバグフィックスをしていました。


最新ポストプラグインについて - ツイッタラwiki
http://twitterer-wiki.com/index.php?%E6%9C%80%E6%96%B0%E3%83%9D%E3%82%B9%E3%83%88%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6



んでまあ上手く動いて良かった良かった、と思っていたのですが、テストしてたら速攻でまたバグが見つかって…

最初は、ユーザ毎のTLを表示するものでデバッグしていて上手く動いたんですが、これを検索のものにしたら上手く動かなかったのです。


ちなみに、ユーザ毎のTLには http://twitter.com/statuses/user_timeline/【ユーザ名】.json を、検索には http://search.twitter.com/search.json というWeb APIを使います。
そして、返ってくるtweetのプロパティは同じもので、そのtweetがいつ行われたか、という情報も同じく create_at というところに入ってきます。
さてこの create_at なのですが、unix timeのシリアル値が入ってるのではなくて、文字列で入ってきます。


そして、ユーザ毎のTLは

"Wed Aug 24 06:47:15 +0000 2011"

というフォーマットになってるんですが、検索では

"Wed, 24 Aug 2011 07:07:25 +0000"

となっていて、同じ「create_at」プロパティなのに「年」のある順番が違ってるんです…


こんなの絶対おかしいよ!  (← 一度使ってみたかった)


そしてこのユーザ毎のTLのフォーマットでは、そのままDate.parseではパースできないため、一旦検索のものと同じ並び順にフォーマットしなおしてやる必要があります。



さすがにこんなところに地雷が埋まっているとは思いませんでした…
他、言及してる所がないかと思ってぐぐってみたんですが、


Loox Uと初音ミクで行こう!: TwitterAPIで取得したcreated_atを普通のDateオブジェクトにする。
http://looxu.blogspot.com/2010/04/twitterapicreatedatdate.html


こちらの方がちょこっと疑問を書かれているくらいでした。



実は他にも、取ってきたtweetの個別IDがちょこっと(1〜10くらい)ずれているせいで、tweet毎のURLが作れないという問題も起きてるんですが、こちらはまだ調査中です。