Japanese Page English Page


メンバーのつぶやきブログ
みんなのツッコミ待ってるぜ!!

ブログ親記事の各種自動配信やってるよ
(普段アンタがメインで使ってるサービスにて更新を知ることができるね)
RSS mixi Ameba Google+ Myspace facebook Twitter


[記事No.547] Google Search Console のAPIを非UIなPHPで叩く (Tak) この記事を共有: Tweet Share Share
投稿日時:2018/05/01, 09:46
Google Search Console のAPIをPHPから操作する方法をネットで検索すると、OAuthクライアントIDを使った方法ばかり見つかる。
しかしこれは実行時にブラウザ窓が出てきて、IDとパスワードを入力し、ログインする必要がある。
また、ログインしても一定時間(1時間?)が経過すると、アクセストークンの有効期限が切れてしまい、再度ログイン画面が出てしまう。
ズボラな僕は、こんなこと毎回やってられん!

ネット上を散々検索したけど、英語のサイトも含めてドンピシャな記事は見つからなかった。
なんとか1度設定したら、ほっといても定期的にデータを取ってきてくれる仕組みを作れないものか?
というわけで、色々試行錯誤しながら非UIにて動作するスクリプトを作ってみた。
ちなみにWindows環境ですよ。

まずは認証に必要な鍵ファイルを作る。
Google API ConsoleでSearch Consoleのプロジェクトを作るところからなんだけど、これはあちこちにブログ記事があるので割愛。
プロジェクトを作ったら、とりあえず以下の画面の左メニューの認証情報から、中央画面の「認証情報を作成」で、「サービスアカウントキー」をクリックね。
(よそ様の記事ではここでOAuthクライアントIDを選択してるから注意!)


上から順に、サービスアカウントは事前に作ったGoogle Search Consoleのアカウントを選択し、「JSON」を選択し「作成」ね。
すると、勝手にファイルがダウンロードされるよ。
ファイル名は「サービスアカウント名-〇〇~~~〇〇.json」ですンゴ。


んで、次は「サービスアカウント」の画面に行くよ。
下の写真の中に「メール」って項目があるんだけど、これをメモする。
「〇〇~@〇〇~.iam.gserviceaccount.com」ってやつね。


メモしたメールアドレスを、Google Search Console に行き、下の画面のように、
「プロパティの管理」>「ユーザーを追加/削除」
メモしたメールアドレスを、ここでユーザー追加するのだ。



これでGoogle側の設定はおしまい。

次はPHP側いきます。
google-api-php-client を使うよ。
(https://github.com/google/google-api-php-client/releases)
バージョンによって、呼び出し方や関数が違ってたりするから注意ね。
僕は、v2.2.1 を使ったよ。うまく動かない場合はComposerを使ってインストールするといいみたいだよ。

もし、「Uncaught exception 'GuzzleHttp\Exception\RequestException~~~」ってエラーが出たら、Windows特有のSSL証明書関連のエラーらしいので、
http://curl.haxx.se/ca/cacert.pem ←このファイルをどっかに保存し、php.ini で保存した場所を指定。
~~php.iniに以下の記述を追加~~
[curl]
curl.cainfo = "C:\保存した場所のPATH\cacert.pem"

さて、以下がPHPのコードです。
非UIと言いつつ、何も画面に出なかったら動作確認もできないので、いちおHTMLのタグで必要そうな項目を表示させてます。(実運用ではechoコマンドは削除して使ってね)
重要そうな項目の拾い方(配列の中の呼び出し名)は見れば分かると思うので、あとはタスクスケジューラーでバッチ実行したりCron実行とかで、自由にテキストで吐き出すなり、CSV出力するなり、データベースに放り込むなり、どうにでも使えます。
下のほうのコメントを解除すると、色々吐き出されるので参考にしてくらはいンゴ。

<?php
mb_language("Japanese");
mb_internal_encoding("UTF-8");
//---初期設定---
//取得対象期間
$start = "2018-04-20";
$end = "2018-05-01";
$url = "サーチコンソールで管理しているURL";
//取得上限件数(Google API側の制約でMax5000まで)
$limit = 5000;
//上限件数以上あったら、更に取得するか?
$limit_add = True;
//--------------

require_once (__DIR__.'/vendor/autoload.php'); // 自分の環境に合わせて書き換えてね
$client = new Google_Client();
// Googleからダウンロードした.jsonファイルを置いた場所
$client->setAuthConfig(stream_resolve_include_path('サービスアカウント名-〇〇~~~〇〇.json'));
// ↑普通のWebディレクトリに置くとセキュリティ的に良くないかもなので、php.iniでinclude_pathに設定してあるフォルダに置く。
// ちなみにstream_resolve_include_pathはPHP5.3.2以上で使える関数なので、動かない場合は適切に書き換えてね。

$client->addScope(Google_Service_Webmasters::WEBMASTERS_READONLY);

$webmaster = new Google_Service_Webmasters($client);
$request = array();
$request = new Google_Service_Webmasters_SearchAnalyticsQueryRequest;
$request->setRowLimit($limit);
$request->setDimensions(array('query','page'));
$request->setStartDate($start);
$request->setEndDate($end);
$request->setSearchType('web');
$resulets = array(array());
$temp_array = array();
$resulets[0] = $webmaster->searchanalytics->query($url, $request);
if (!empty($resulets[0])) {
echo "対象期間:".$start."~".$end."<br>";
echo "<table border='1'><tr><td>キーワード</td><td>リンク先</td><td>表示順位</td><td>クリック回数</td><td>クリック率</td></tr>\n";
for ($i=0; $i<10; $i++) { // 念のため繰り返しは10回まで(理論上5万件取得できる)
foreach ($resulets[$i] as $key => $result) {
$temp_array[] = array($result->keys[0],$result->keys[1],$result->position,$result->clicks,$result->ctr);
}
foreach ($temp_array as $value_array) {
echo "<tr><td>".$value_array[0]."</td><td>".$value_array[1]."</td><td align='right'>".$value_array[2].
"番目</td><td align='right'>".$value_array[3]."回</td><td align='right'>".round($value_array[4]*100,3)."%</td></tr>\n";
}
var_dump($resulets[0]);
if ((count($resulets[$i])==$limit)&&($limit_add)) { // 上限満タン且つ追加取得モードだったら
$request->setStartRow($limit+1); // 継続して取得
$resulets[$i+1] = $webmaster->searchanalytics->query($url, $request);
Continue;
}
else Break;
}
echo "</table><br>";
}
//var_dump($resulets);
//print_r($temp_array);
?>

実行するとこんな感じの結果が出ます。
*写真はねつ造です笑
出力結果:


取得上限から更に取得して行く部分は、未検証です。
うまく動かなかったら「ツッコミ」ボタンからご指摘ください。

-------------------------------------
検索ロボット用キーワード
Google Search Console API google-api-php-client PHP 使い方 非UI Non-UI Task .Bat Cron Windows json 自動取得 常駐 アクセストークン回避 タスクスケジューラー バッチ処理
-------------------------------------

参考になったかたは、是非あっぱれかドンマイをください!(このボタン)↓↓

このつぶやきに を入れる

連打可→
54 AP
7 DM


このサイトはリンク歓迎だけども、必ずトップページにな。 このサイトを気に入ったヒト
メンバー宛のメールは ←をクリック!
Copyright(C)1991-2025 The☆Atomics All rights reserved.