はこべにっき# - GoogleCodeSearchでブログ上のコードを表示で触れたように、GoogleCodeSearchで、あるURL以下のソースコードを取得するのは少々メンドウです。
しかし、少し検索クエリを工夫すると、そこそこ正確にあるURI以下のソースコードを見つけることができます。たとえば、以下のようなキーワードを用いてGoogleCodeSearchで検索すると、このブログの記事を見つけることができます。
^hakobe932/ package:"http://d.hatena.ne.jp"
検索結果を見ると、このブログのコードが表示されているのがわかります。packageでドメインをしぼるのと、正規表現を用いてURLパス以外がマッチしないように、表現を限定しています。
この機能が簡単に利用できるようにブックマークレットを作ってみました。Google Code Search by URIで公開しています。現在ブラウザで表示しているURL以下のコードをGoogleCodeSearchで表示します。使ってみて下さい。
CGIが裏で走っていますが、ちょっとURL整形してリダイレクトしてるだけなのでJavascriptとかでも作れそうですね。
GoogleCodeSearchは他に、XMLで検索結果を出力できるので、プログラム内で利用することも可能です。くわしくは、Google Code Search Data API Overviewに記載があります。
Google Code Search by URIでも、ちょっと使ってみています。URLを入力して、Seachを押すとXMLから情報を取得して表示してみています。
コード本体はXMLに入っていないので、強引に抽出する必要があります。私は、GoogleCodeSearchのコード本体の載っているURLを引数にとる、以下のような関数を作って、抽出しました。
use URI; use Web::Scraper; sub extract_code { my ($url) = @_; my $scraped = scraper { process '//td[@width="100%"]/pre', 'code' => 'TEXT'; process '//span[@class="a"]', 'info[]' => 'TEXT'; result 'code', 'info'; }->scrape(URI->new($url)); my $result = { url => $scraped->{info}->[1], google_url => $url, code => $scraped->{code}, language => $scraped->{info}->[-1], }; return $result; }
やはり、Web::Scraper便利便利。
公開されているAPIだけでもわりと使えそうですね。ブログ記事上のコード抽出はGoogleCodeSearchに任せることができそうです。クロール対象に入ってなさそうなサイト(nowaとか)も結構あるのがちょっ難点ですが。