以前作ったSBM bookmarks APIってのがあって、これはURLを渡すと、4つのソーシャルブックマークにおけるそのURLの登録内容を返すYahoo! Pipesです。
で、そのAPIを使ったアプリでpageinfoというのを作りました。これは、ブックマークレットをクリックすると、今見てるページの裏側を表示するやつ。
そのpageinfoがどうもおかしかった。各種ソーシャルブックマークの登録状況が出るんだけど、どうも時間がズレてる。まあ時間は表示はしてないんだけど、表示順とかもおかしいし、データによっては日付までズレてる。おそらく数時間単位で時間がズレてるんだと思う。
ってことで調べてみた。調査には、多数のSBMサービスにほぼ同時にブックマークを投稿しているtsupoさんのデータが非常に参考になりました。感謝しています。
はてなブックマークのデータは、Yahoo! Pipesに取り込むと9時間ほど未来になるようです。なので32,400秒を引いた値を使うことで、(日本では)正確な時刻になりました。
Loopモジュールの中にSimpleMathモジュールを入れて、全要素の時刻を引いています。
livedoorクリップのデータは、最初からエポック秒で取得でき、そのまま正確な時刻になっていたので、補正は不要でした。
まあ楽だから良かったのですが、Yahoo! Pipesにはエポック秒を時刻に変換する機能はないので、いつまでもエポック秒のまま扱う必要がある。Yahoo! Pipes内で時刻として処理することはできないわけです。なので場合によっては困るかも。
del.icio.usのデータは、以前これとは別なSBM comments APIのときにYahoo! Pipesに取り込ませたら時差があったので25,200秒を引くという補正をかけていて、今回のSBM bookmarks APIでも同じことをやっていたのですが、いつからから補正が不要になったようです。
del.icio.usの返すデータの仕様が変わったのか、Yahoo! Pipesが解釈する仕組みが変わったからなのかはわかりませんが(それともユーザやUSER_AGENTのタイムゾーン?)、補正を何もやらないように修正したことで、正確な時刻になりました。これは結構良い感じ。
そしてBuzzurlのデータは、まったくトンチンカンな時刻がYahoo! Pipes上で認識されていました。なんか現在時刻のような感じ。これは、どうやらBuzzurlが吐いてるRSSのdc:date要素が、
2007-12-07T12:30+09:00
みたいな書式、つまり秒のデータを含まないものになっていて、Yahoo! Pipesが時刻であることを認識できていないようでした。
そこで、Regexモジュールで、まずdc:dateに「:00」を追加して秒として扱えるように補正し、Loopモジュールの中にDateBuilderモジュールを入れたもので時刻として認識させます。さらにこれは9時間後の時刻になっているので、はてなブックマークのときと同じように32,400秒を引いて完成。
しかし、秒をすべて00秒に固定しているので、これでも正確な時刻とは言えません。秒単位では誤差が残ったということです。だってRSSフィードに秒を含んでないんだもん、仕方ないよね。
これで、以前までよりブックマークのソート順がかなりマトモな感じになったと思います。
ソースの画像を貼りたいところですが、めちゃくちゃ巨大なのでキャプチャすら大変。Yahoo.comのアカウントさえあればソースは見れるので、それで我慢してください。