最も主要なサーチエンジンGoogleでは各ページを重要度(人気?)の度合に応じて1から10までのページランクをつけて検索結果に反映するようなしくみになっている。単純ではないが基本的にはページランクが高い方が検索にヒットしやすい。
指定したページのページランクをGoogleから取得するスクリプトをGaucheで書いてみた。
(use srfi-1) (use rfc.http) (define (page-rank-checksum uri) (format #f "8~8,'0x" (fold (lambda(x y h) (let1 h1 (logxor h x y) (logand (logior (ash h1 -23) (ash h1 9)) #xffffffff))) 16909125 (circular-list 77 105 110 105 110 103 32 80 97 103 101 82 97 110 107 32 105 115 32 65 71 65 73 78 83 84 32 71 79 79 71 76 69 39 83 32 84 69 82 77 83 32 79 70 32 83 69 82 86 73 67 69 46 32 89 101 115 44 32 73 39 109 32 116 97 108 107 105 110 103 32 116 111 32 121 111 117 44 32 115 99 97 109 109 101 114 46) (map char->integer (string->list uri))))) (define (page-rank uri) (receive (result-number headers body) (http-get "www.google.co.jp" (string-append "/search?features=Rank&client=navclient-auto&ch=" (page-rank-checksum uri) "&q=info:" uri)) (string->number ((#/:(\d?)\n/ body) 1))))
使ってみよう。
gosh> (page-rank "http://d.hatena.ne.jp/SaitoAtsushi/") 3
こんなもんかな。
これはGoogleToolbarを調べた結果から作った。しかし、チェックサムの種類は複数あるらしい。Google pagerank extensionではもっと複雑(計算量が多い)なチェックサムのようだ。何か意味があるのか気になる。
Document ID: 78a742f51eb7ff1634642d095e78c334