金利0無利息キャッシング – キャッシングできます

 | 

2010-10-18

NewTwitterとかFacebookのAjaxなURL(#!)を変換する奴を書いた

01:23 | NewTwitterとかFacebookのAjaxなURL(#!)を変換する奴を書いた - 金利0無利息キャッシング – キャッシングできます を含むブックマーク はてなブックマーク - NewTwitterとかFacebookのAjaxなURL(#!)を変換する奴を書いた - 金利0無利息キャッシング – キャッシングできます

googlebotがやっているというURLの#!をクエリストリングに読み替えるやつを書いた。"Making AJAX Applications Crawlable"ってことなんだけど、hash fragmentをqueryに読み替える仕組み自体の名前が何かよく分からなかったので取り敢えずCrawlableHashとしておいた。

こういう感じで使う。

use URI::CrawlableHash;
use Feed::Find;

{
    my $guard = URI::CrawlableHash->convert_always("query");
    warn URI->new("http://twitter.com/#!/bulkneets"); # http://twitter.com/?_escaped_fragment_=/bulkneets
    Feed::Find->find("http://twitter.com/#!/bulkneets");
}

my $uri = URI->new("http://twitter.com/#!/bulkneets"); # http://twitter.com/#!/bulkneets
warn $uri->fragment_to_query; # http://twitter.com/?_escaped_fragment_=/bulkneets

モノグサな人向けに、URI->newを置き換えられるようになってるので、内部でURIオブジェクト使ってるモジュールは一行足すだけで勝手にクローラ向けのURLにしてくれる(逆もできる)。返値を保存しておけばスコープに限定したり出来る。

ちなみにHTML5のhistory.replaceStateやhistory.pushStateは画面遷移しないでアドレスバーのURLを同一ドメインの別のURLに書き換える(location.pathname部分を)仕様があって、ChromeSafariで既に動いているみたいだし、この#!を読み替える仕様は殆ど要らなくなるんじゃないかと思う。必要あるとすればオフライン動作に強いこだわりがあって、常にキャッシュされた一つのURLでアドレスバーからコピペしてもサーバーにリクエストを投げないように保障しつつlocation.hashでクエリを与えるようなアプリケーションの場合だろうか。

一部の検索エンジンが対応しているからと言ってデメリットを考慮しないで真似しないように。

 |