古い記事
ランダムジャンプ
新しい記事
今回の YahooHacks は、
「あるページがヤフーの検索インデックスへ登録されているかどうか」
を調べる方法についてです。

使用している Web API の提供が終了となったため、現在動作しません。ご了承ください。



■■■あるページの検索インデックスへの登録の有無を調べる

あるページがヤフーの検索インデックスに登録されているかどうかを知り
たい!ということがときどきあります。

■クエリー構文「url:」

ヤフーWeb検索では、クエリー構文「url:」を使い、そのページの URL を
指定すると、インデックスに登録されているか否かを知ることができます。
登録されていれば検索結果が表示されます。

http://search.yahoo.co.jp/search?p=url:http://nais.to/~yto/clog/

「url:」を使って、URL のリストを対象にそれぞれが登録されているか
否かを Yahoo!API で判別するプログラムを作ってみました。

■コード

#!/usr/bin/perl
use strict;
use warnings;
use LWP::Simple;

while (<>) {
    next if (/^\s*$/);
    print;
    chomp;
    s/([^0-9A-Za-z_])/'%'.unpack('H2',$1)/ge;
    my $url = "http://search.yahooapis.jp/WebSearchService/V1/".
        "webSearch?appid=YahooDemo&query=url:$_";
    if (get_num($url)) {
        print "yes\n";
    } else {
        print "no\n";
    }
}

sub get_num {
    my ($url) = @_;
    my $yahoo_response = get($url);
    my ($num) = ($yahoo_response =~ /totalResultsAvailable="(\d)"/);
    return $num;
}

■Hack の実行

入力は、1行 1 URLというフォーマットの URL リストファイルです。
検索インデックスに登録されていれば "yes" が、登録されていなければ
"no" が表示されます。
% cat url-list
http://nais.to/~yto/
http://nais.to/~yto/clog/2006-01-01-1.html
http://www.example.com/blog/
% ./hack_url.pl url-list
http://nais.to/~yto/
yes
http://nais.to/~yto/clog/2006-01-01-1.html
yes
http://www.example.com/blog/
no

■Hack をさらに Hack する

ブログの記事ページに、そのページが検索インデックスに登録されている
かが表示されていると面白いかもしれません。

ということで、登録の有無を表示する JavaScript プログラムを生成する
CGI のプロトタイプのコード (hack_url.cgi) を下記にあげておきます。
(実際に設置するときは、Yahoo! API へのアクセスをキャッシュするよう
に改造して使うことを強くお勧めします。)
#!/usr/bin/perl -T
use strict;
use warnings;
use CGI;
use LWP::Simple;

my $q = new CGI;
my $target = $q->param('url') || "";
print $q->header(-type => 'text/plain');

$target =~ s/([^0-9A-Za-z_])/'%'.unpack('H2',$1)/ge;
my $url = "http://search.yahooapis.jp/WebSearchService/V1/".
    "webSearch?appid=YahooDemo&query=url:$target";

if (get_num($url)) {
    print "document.writeln('Y!');\n";
} else {
    print "document.writeln('-');\n";
}

sub get_num {
    my ($url) = @_;
    my $yahoo_response = get($url);
    my ($num) = ($yahoo_response =~ /totalResultsAvailable="(\d)"/);
    return $num;
}

ブログページ等に下記のように上記 CGI を指定する script タグを
挿入すれば登録有無結果がその場に表示されます。
<script src="hack_url.cgi?url=http://nais.to/"></script>



参考ページ:
- Yahoo!デベロッパーネットワーク (YDN)
  http://developer.yahoo.co.jp/
- [を] Perl の -T スイッチ[2006-05-27-3]

関連書籍:
Yahoo! Hacks
最新WebサービスAPIエクスプローラ