たつをの ChangeLog : 2006-09-10

今回の 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エクスプローラ

塩野七生 / ローマ人の物語(26) - 賢帝の世紀(下) / 新潮文庫

ハドリアヌス帝、後半。そしてアントニウス・ピウス帝。
アントニウス・ピウスは乱世向きの皇帝ではないが、
平和な時代だったので力を発揮できた、とのこと。
時代の求める特質とその人の向き不向きとの幸福な一致。

自分用メモ:
しかもローマ人は、思わぬ幸運に恵まれて成功するよりも、状況の厳密な
調査をしたうえでの失敗のほうを良しとする。ローマ人は、計画なしの成
功は調査の重要性を忘れさせる危険があるが、調査を完璧にした後での失
敗は、再び失敗をくり返さないための有効な訓練になると考えているので
ある。(p.43 - フラヴィウス・ヨセフ「ユダヤ戦記」からの抜粋)
人格円満な人が、大革新の推進者になる例はない。(p.165)

ref.
- ローマ人の物語 - 賢帝の世紀(上)[2006-09-07-2]
- ローマ人の物語 - 賢帝の世紀(中)[2006-09-09-3]

たつをの ChangeLog
Powered by chalow