2009.11.26
Yoshi 開発

自作アクセス解析 Vol.4 [検索エンジン ランキング取得]

ついに4回目になりました!
終わりが見えません・・。

まだかまだかと公開されるのを心待ちされてる方が、この世界に何人いらっしゃるのでしょうか。
ずばり!皆無でしょう(笑 いたら本当にごめんなさい。。

前説はこのぐらいにして、今回は検索結果を手動で取得する箇所を作成していきたいと思います。

まずブラウザを開いて、アドレスにhttps://www.google.co.jp/と入れて移動します。
検索フォームに探したいキーワードを入力して「Google検索」ボタンをおs(ry

・・・・・。

さて、イメージはこんな感じで。
cmd

ランキング取得用 ranking.batを作成し、クリックする事でDBに登録されているURL/キーワードでの順位を取得します。
ランキングが0になっているものは50位圏内に無かったものになります。

取得しようとすれば全ての検索エンジンから順位取得できますが、今回は3大エンジンであるGoogle/Yahoo/MSNでやってみたいと思います。

違うのはURLとエンジン別のタグですので、その部分だけ変更すれば基本的には共通で問題ありません。

では実際に取得方法を説明したいと思いますが、やはり方法は人それぞれでいくつもあります。
今回のやり方は正規表現を使ったもので、なぜかというと検索エンジンは仕様がよく変わりソースも変更されてしまいます。
その度にプログラムをいちいち修正するのも嫌というのと、Yahooは問題無いのですがGoogleさんのソースはタグが閉じられてなかったりとDOM解析では読み取れません・・。
ですので自分では正規表現が一番正確かつメンテが簡単だと思っています。

方法はとても簡単です。

まずは検索エンジンの情報を宣言します。

// 検索エンジンの宣言
define(‘GOOGLE_URL’, ‘https://www.google.co.jp/search?hl=ja&num=50&q=’);
define(‘YAHOO_URL’, ‘https://search.yahoo.co.jp/search?search.x=1&fr=top_ga1_sa&tid=top_ga1_sa&ei=UTF-8&aq=&oq=&n=40&p=’);
define(‘BING_URL’,’https://www.bing.com/search?filt=all&qb=1&q=’);
define(‘GOOGLE_REGEX’, ‘<div class=”s”>.*?<cite>(.*?) – </cite>.*?</div>’);
define(‘YAHOO_REGEX’, ‘<em>(.*?)</em>’);
define(‘BING_REGEX’,'<ul class=”sb_meta”><li><cite>(.*?)</cite>’);

次に上記をベースに検索ロジックを作成します。

$url = “https://bitstar.jp/”;
$keyword = “北海道 データセンター”;

$domains = split(“\/”,$url);
$domain = $domains[2];

$tmp = @file_get_contents(GOOGLE_URL.urlencode($keyword));

mb_ereg_search_init($tmp,GOOGLE_REGEX, “i” );
$g_rank = 1;
$g_flag = false;
while(TRUE === mb_ereg_search()){
$work = mb_ereg_search_getregs();
if(mb_strpos(strip_tags($work[1]),$domain) !== false){
$g_flag = true;
break;
}
$g_rank++;
}
if(!$g_flag) $g_rank = 0;

上記はGoogleの場合のみを記入してますが、YahooやBingは変数を変更するだけです。

やってることは単純で、正規表現の条件にヒットしたものをループして
そのURLに探しているドメインが含まれているかチェックし、$g_rankにランキングを入れています。

ランキング取得ツールとして有名なもので GRC がありますので、
わざわざ自前で作る必要もありませんが、履歴をデータベースに入れておいたりGRCで取得できない検索エンジンにも対応できるので、マニアックな方にお勧めです(笑

後は、手動で取得できるように

#!/usr/bin/php
<?php

// 検索エンジンの宣言
define(‘GOOGLE_URL’, ‘https://www.google.co.jp/search?hl=ja&num=50&q=’);
define(‘GOOGLE_REGEX’, ‘<div>.*?<cite>(.*?) – </cite>.*?</div>’);

$url = “https://bitstar.jp/”;
$keyword = “北海道 データセンター”;

$domains = split(“\/”,$url);
$domain =  $domains[2];

$tmp = @file_get_contents(GOOGLE_URL.urlencode($keyword));

mb_ereg_search_init($tmp,GOOGLE_REGEX, “i” );
$g_rank = 1;
$g_flag = false;
while(TRUE === mb_ereg_search()){
$work = mb_ereg_search_getregs();
if(mb_strpos(strip_tags($work[1]),$domain) !== false){
$g_flag = true;
break;
}
$g_rank++;
}
if(!$g_flag) $g_rank = 0;

print “Google Ranking :”.$g_rank;
?>

とコマンドラインで起動できるようにし、「php ranking.php」と叩くバッチ「ranking.bat」を作成します。
後は「ranking.bat」をクリックすれば取得できます。

次回は、「被リンク数」と「内部リンク数」の取得方法ですかね。
基本的には、上記のやり方の応用で取得可能です。

では、また。

Yoshi

一覧に戻る