Speee DEVELOPER BLOG

Speee開発陣による技術情報発信ブログです。 メディア開発・運用、スマートフォンアプリ開発、Webマーケティング、アドテクなどで培った技術ノウハウを発信していきます!

Googleページランクの求め方

はじめまして。
無駄に古参のひきこもり系エンジニア、まじんと申します。
趣味はアニメ鑑賞、最近はアナログゲームを少々嗜んでいます。
ドミニオン楽しいです。

今回はGoogleページランクの求め方について書かせていただきます。

そもそもページランクとは?

SEOに携わったことの有る人、もしくはちょっとwebに詳しい方はご存知かと思いますが、

ページランク(以下PRと記載)とは、下記のようなものであります。

ページランク (PageRank) は、ウェブページの重要度を決定するためのアルゴリズムであり、
検索エンジンGoogleにおいて、検索語に対する適切な結果を得るために用いられている中心的な技術。
名称の由来は、ウェブページの"ページ"と、Googleの創設者の一人、ラリー・ペイジの姓をかけたものである。

PRは、「多くの"良質"なページからリンクされているページは、良質なページである」という再帰的な関係をもとに、全てのページの重要度を判定、数値化したものである。
http://ja.wikipedia.org/wiki/ページランク
wiki参照

すごく簡単に言ってしまうとweb上の人気度を数値化したものと思ってもらうのがわかりやすいかもしれません。

PRの算出方法

さてさて、SEOをやっていく上で今も昔も比較的重要な指標であるPR、一体どうやって算出しているのか?

下記論文にまとめられています。

時間がある人は一読してみてください。

The PageRank Citation Ranking: Bringing Order to the Web

読む時間のない人のために上記の論文から算出式を抽出してみました。

すると、上記論文によると下記のような計算式でPRは求められるようです。

さっぱりですね。

とりあえず、こんな計算式は忘れてもらって大丈夫です。

実際にソースコードに落としてみよう

むかしに比べると世の中はとても便利になりました。

自分で0から作らなくても既にどこかの親切な人がだいたいのことはやってくれています。

PRの算出をPHPプログラムに落とすと、こんな感じになります。

class PageRank {

    var $host='toolbarqueries.google.com';

    function chkPageRank ($q,$context=NULL) {
        $ch=$this->checksum($this->makehash($q));
        $url='http://%s/tbr?client=navclient-auto&ch=%s&features=Rank&q=info:%s’;
        $url=sprintf($url,$this->host,$ch,$q);
        $result = file_get_contents($url,false,$context);
        $result = ereg_replace("^.*:",  '', $result);
        $result = ereg_replace("\n|\r", '', $result);
        return $result;
        //return file_get_contents($url,false,$context);
    }

    // Convert a string to a 32-bit integer
    function strtonum($str, $check, $magic) {
        $int32unit = 4294967296; // 2^32
        $length = strlen($str);
        for ($i = 0; $i = $int32unit) {
            $check = ($check - $int32unit * (int) ($check / $int32unit));
            //if the check less than -2^31
            $check = ($check strtonum($string, 0x1505, 0x21);
            $check2 = $this->strtonum($string, 0, 0x1003f);
            $check1 >>= 2;
            $check1 = (($check1 >> 4) & 0x3ffffc0 ) | ($check1 & 0x3f);
            $check1 = (($check1 >> 4) & 0x3ffc00 ) | ($check1 & 0x3ff);
            $check1 = (($check1 >> 4) & 0x3c000 ) | ($check1 & 0x3fff);
            $t1 = (((($check1 & 0x3c0) << 4) | ($check1 & 0x3c)) <         $t2 = (((($check1 & 0xffffc000) << 4) | ($check1 & 0x3c00)) <= 0;  $i --) {                $re = $hashstr{$i};                 if (1 === ($flag % 2)) {                    $re += $re;                     $re = (int)($re / 10) + ($re % 10);                 }               $checkbyte += $re;              $flag ++;           }           $checkbyte %= 10;           if (0 !== $checkbyte) {                 $checkbyte = 10 - $checkbyte;               if (1 === ($flag % 2) ) {                   if (1 === ($checkbyte % 2)) {                       $checkbyte += 9;                    }                   $checkbyte >>= 1;
                }
            }
            return '7'.$checkbyte.$hashstr;
        }
    }
}

http://d.hatena.ne.jp/onepjp/20120220/1329725769 ↑上記ブログ記事参照

これを仕事でよく使用するのでPythonで書きなおしてみます。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

#start-ページランクチェック用-----------------------------------------------
def StrToNum(Str, Check, Magic):
    Int32Unit = 4294967296;
    length = len(Str);
    i = 0
    for tmp in Str:
        Check *= Magic;
        if (Check >= Int32Unit):
            Check = (Check - Int32Unit * (int) (Check / Int32Unit));
            if (Check >= 2;
    Check1 = ((Check1 >> 4) & 0x3FFFFC0 ) | (Check1 & 0x3F);
    Check1 = ((Check1 >> 4) & 0x3FFC00 ) | (Check1 & 0x3FF);
    Check1 = ((Check1 >> 4) & 0x3C000 ) | (Check1 & 0x3FFF);
    T1 = ((((Check1 & 0x3C0) << 4) | (Check1 & 0x3C)) <    T2 = ((((Check1 & 0xFFFFC000) << 4) | (Check1 & 0x3C00)) <>= 1;
    return '7' + str(CheckByte) + str(HashStr);
#end-ページランクチェック用-------------------------------------------------

def main():

    #PageRankCheck
    domain = "test.com";
    en_url = urllib.quote_plus(domain);
    ch = CheckHash(HashURL(domain));
    url = 'http://toolbarqueries.google.com/tbr?client=navclient-auto&ch=' + ch + '&features=Rank&q=info:' + en_url;
    try:
        #googleツールバーのPR値を取得
        html = '';
        html = urllib2.urlopen(url).read().replace('Rank_1:1:','').replace('\n','').replace('\r','');
        print domain +":"+ html;
    except:
        print "取得エラー"
        exit(1);

if __name__ == '__main__':
    main()

こんなかんじになります。

超簡単ですね。

まとめ

googleページランクは昨年、2013年末に更新こそありましたが、

ここ最近更新度も低く昔ほど重要な指標ではなくなってきました。(以前は3ヶ月おきくらいの更新だった)

しかしそれでもやはり、SEOをやっていく上では見ておきたい指標の一つであることに変わりありません。

最後に1点。

上記プログラムで簡単にPRを取得できますが、連続してPRを取得し過ぎると直ぐgoogleさんに怒られてAccess禁止を食らってしまうことです。(経験者は語る)

何事も程々にということですね。

いくら簡単にPR取得できるといっても一気に1000万件もリクエストしちゃダメだぞ☆ミ

それでは以上。

簡単ですが、Googleページランクの取得方法でした。