Google検索結果をPHPで取得

※後日追記:Googleの検索順位を取得

このブログの一部ページがこちらの意図しないキーワードで表示されており
そのうち消えるだろうと思っていたが、一向に消えないため、
一旦非表示にして、インデックスから消えた後に再表示する事にした。

現在はそのページを非表示にしてあり、アクセスすると404エラーが返る。

Googleで検索をするとまだそのページは表示されるが、
404エラーを返しているので、そのうち検索結果から消えるであろう。

せっかくなので消えるまでの期間を計測、監視してみようと思う。

とはいっても、定期的に手動でGoogle検索するのも面倒なので、
自動化をする事にした。

 

単純にGoogleに検索キーワードを投げて結果を取得して
その結果をMySQLに格納するPHPを書いて、
そのPHPをcronで定期実行させる事を考えた。

まず私の借りているお名前.comのレンタルサーバーは
cronに対応していないため、下記サイトに記載されている
海外の無料サーバーを利用する事にした。
PHP、MySQL、CRONが使える無料レンタルサーバー「000.webhost.com」

 

で、肝心のPHPでのGoogle検索結果取得に関して調べてみると
スクレイピングの参考サイトはいくつかあったが、
どれもサンプルコードは使えなくなっている。

恐らくGoogle側でスクレイピングの対策をとったため、
当時は有効だったコードが現在は使えないという事であろう。

どうやらGoogle APIを利用するのが一番利口っぽいので
下記ページを参考にして進めた。
Google Custom Search API – 検索・ランキングチェック

上記ページのサンプルコードは実行できなかったが、
下記のURLでパラメータを渡すとJSON形式で結果が返ってくる事が分かった。
https://www.googleapis.com/customsearch/v1?q=検索キーワード&key=APIキー&cx=検索エンジンID

PHPでJSONデータ取得をするのには下記ページを参考にした。
PHPでJSONを取得

で、本来であればJSONデータをパースして
必要な部分だけを取り出すようにするのであろうが、

自分が使うだけだし、ログさえとれれば良いので、
JSONデータをそのままMySQLに格納する事にした。

ただログ取得した時間だけは記録をする必要があるので
TIMESTAMPをしまうカラムを用意したが、
海外サーバーのせいか現在時刻がおかしな事になっていた。

その時間のずれについてはこちらのページを参考にした。

で、作成したコードがこちら。

<?php

  $url = "https://www.googleapis.com/customsearch/v1?q=[検索キーワード]&key=[APIキー]&cx=[検索エンジンID]";  

  $json = file_get_contents($url,true);

  if ($json == false) {
       echo "JSON取得エラー";
       return;
   } 

$jptime = time() + 9*3600;  //GMTとの時差9時間を足す

$time = gmdate("Y/m/d H:i:s", $jptime);

$con = mysql_connect('ホスト名', 'ユーザー名', 'パスワード');
if (!$con) {
  exit('データベースに接続できませんでした。');
}

$result = mysql_select_db('データベース名', $con);
if (!$result) {
  exit('データベースを選択できませんでした。');
}

$result = mysql_query('SET NAMES utf8', $con);
if (!$result) {
  exit('文字コードを指定できませんでした。');
}

$result = mysql_query("INSERT INTO test(json,time) VALUES('$json', '$time')", $con);
if (!$result) {
  exit('データを登録できませんでした。');
}

$con = mysql_close($con);
if (!$con) {
  exit('データベースとの接続を閉じられませんでした。');
}

?>

 

cronの設定については下記サイトを参考にした。
cron(クーロン)の設定 – プログラムを定期的に自動実行 [Fedora, RedHat, CentOS]

そんなに細かいログも必要ないので1時間ごとに実行する設定にした。
0 * * * * php -f /home/user/public_html/516.php
(ファイル名は適当に516.phpとした)

以上で完了です。

 

いまさらだけど、わざわざDBに格納しなくても、
JSONデータに変化があれば、メールをとばすような仕組みでも良かったな。

まぁ面白かったから別にいいか。

 

(後日追記)
約2週間でGoogleインデックスから消えた。

(さらに後日追記)
検索からのアクセスが増えており、かなり不安になってきました。プログラミングについては完全に素人なので何か間違いがあった場合はinfo@516.jpまで是非ご一報ください。泣いて喜びます。

※後日追記:Googleの検索順位を取得

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です