はてなスターの仕組みを徹底調査しちゃう!!

はてなスターの仕組みをとりあえず調査してみる。
javascriptも圧縮されずに配信されているので読むのも難しくないね。

すべてはここから始まります。

http://s.hatena.ne.jp/js/HatenaStar.js

次にページが開かれたときに一番最初に投げられるクエリーとレスポンス。

http://s.hatena.ne.jp/entries.json?uri=http%3A%2F%2Fwww.tagli.org%2Ftagli%2Fa050a169727&&callback=Ten.JSONP.callback&Fri%20Jul%2025%2001:00:12%20UTC+0900%202008
Ten.JSONP.callback({"rks":"82998b26bcbbe6fb9e252ba3c312ac3c4e1c932d","can_comment":1,"entries":[{"stars":[{"quote":"","name":"yositosi"},{"quote":"","name":"yositosi"}],"can_comment":1,"comments":[{"body":"EeePC901 is Good!!","name":"yositosi","id":"9245357140438838593"}],"uri":"http://www.tagli.org/tagli/a050a169727"}]});


スターを1つ単純に追加してみた。

http://s.hatena.ne.jp/star.add.json?uri=http%3A%2F%2Fwww.tagli.org%2Ftagli%2Fa050a169727&title=EeePC%E3%82%BF%E3%82%B0%E3%83%AA"e=&location=http%3A%2F%2Fwww.tagli.org%2Ftagli%2Fa050a169727&token=38a24dda2b0080805aa34e31610ac1bef7bcd447&rks=82998b26bcbbe6fb9e252ba3c312ac3c4e1c932d&callback=Ten.JSONP.callback&Fri%20Jul%2025%2001:01:12%20UTC+0900%202008
Ten.JSONP.callback({"quote":"","name":"yositosi"});


スターにカーソルをしばらくおいてみて削除alertが上がるところまで。

http://s.hatena.ne.jp/star.deletable.json?name=yositosi&callback=Ten.JSONP.callback&Fri%20Jul%2025%2001:02:35%20UTC+0900%202008
Ten.JSONP.callback({"result":1,"message":"\u3053\u306e\u2606\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f"});

alertからOKボタンを押して削除を実行

http://s.hatena.ne.jp/star.delete.json?name=yositosi&uri=http%3A%2F%2Fwww.tagli.org%2Ftagli%2Fa050a169727&rks=82998b26bcbbe6fb9e252ba3c312ac3c4e1c932d&callback=Ten.JSONP.callback&Fri%20Jul%2025%2001:02:40%20UTC+0900%202008
Ten.JSONP.callback({"result":1});

コメントを追加してみる。

http://s.hatena.ne.jp/comment.add.json?body=EeePC901%20is%20Good!!&uri=http%3A%2F%2Fwww.tagli.org%2Ftagli%2Fa050a169727&title=EeePC%E3%82%BF%E3%82%B0%E3%83%AA&rks=82998b26bcbbe6fb9e252ba3c312ac3c4e1c932d&callback=Ten.JSONP.callback&Fri%20Jul%2025%2001:06:00%20UTC+0900%202008
Ten.JSONP.callback({"body":"EeePC901 is Good!!","name":"yositosi","id":"9245357140438838593"});

とりあえずリクエストはこんな感じみたい。他にも機能があるのかな?。

すべてのリクエストはJSONPで実装されているので、クロスドメインです。そのお陰で、どんなドメインのサイトでも簡単に張れるWEBサービスが提供できているわけですね。