GoogleSearchConsoleのAPIを利用してCSV出力できるようにやってみました。

必要なもの

  1. Googleアカウント
  2. phpが動作できる環境(PHPバージョン5.2.1以上)

API取得用アプリの準備

1.まず、はじめにGoogleアカウントにログインします。

2.次に、Google API Consoleでプロジェクトを作ります。

gap_project

 

 

3.ライブラリで「search」と検索して、Google Search Console をクリックし有効にします。 gap_01gap_02

 

 

 

4.承認情報のOAuth同意画面でサービス名等を適当に決めていきます。gap_03

 

 

5.承認情報→承認情報作成からOAuthクライアントIDを選択し作成しています。gap_04

 

 

 

6.ウェブアプリケーションを選び、名前、承認済みの JavaScript 生成元等適当に記入していきます。JavaScript 生成元は、実際にphpを実行するURLを指定します。gap_05

 

 

 

7.作成が完了すると、クライアントIDとクライアントシークレットが出てくるのでこれをメモします。

gap_06

 

 

 

8.その後、作成した承認情報のクライアントのjsonをダウンロードします。ファイル名は、client_secret.jsonでダウンロードしてください。gap_07

 

 

 

これでGoogle API Consoleの設定はとりあえず完了です。

 

 

ライブラリのダウンロード

次に、google-api-php-clientをダウンロードします。

これを利用することで先ほど作ったアプリと連携することができAPIの取得することができます。

ダウンロードは、git クローンコマンドかGithubにアクセスしてダウンロードできます。

git clone -b v1-master https://github.com/google/google-api-php-client.git

クローンコマンドで、ダウンロードした方もGithubにアクセスするとコードの参考になるかもしれません。

PHP

ここまでくればあとはphpの記述のみです。

oauth2callback.php

<?php
require_once(__DIR__.'/google-api-php-client/src/Google/autoload.php');
session_start();
$client = new Google_Client();
$client->setAuthConfigFile('client_secret.json');
$client->setRedirectUri('http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php');
$client->addScope(Google_Service_Webmasters::WEBMASTERS_READONLY);
if (! isset($_GET['code'])) {
 $auth_url = $client->createAuthUrl();
 header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
} else {
 $client->authenticate($_GET['code']);
 $_SESSION['access_token'] = $client->getAccessToken();
 $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/download.php';
 header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}
?>

初回起動時に、先ほど決めたサービス名のアプリと連携するか聞かれます。

同意すると連携されAPIとの接続ができるようになり、アクセストークンを取得することができます。

取得完了後、下記のdownload.phpにリダイレクトされます。

※アクセストークンは、有効期限があるようです。

 

download.php

<?php
require_once(__DIR__.'/google-api-php-client/src/Google/autoload.php');
session_start();
//期間は3日前から過去3ヶ月分まで
$start = 2016-06-04;
$end = 2016-09-04;
$url = "検索したいURL";
//検索したい件数
$limit = 5000;
$client = new Google_Client();
$client->addScope(Google_Service_Webmasters::WEBMASTERS_READONLY);
if ( isset($_SESSION['access_token']) && $_SESSION['access_token'] ) {
 $client->setAccessToken($_SESSION['access_token']);
 $client->setAccessType('offline');
 $client->setApprovalPrompt('force');
 $client->addScope(Google_Service_Webmasters::WEBMASTERS_READONLY); //権限の許容範囲("webmasters.readonly")
 $webmaster = new Google_Service_Webmasters( $client );
 $query = array();
 $query = new Google_Service_Webmasters_SearchAnalyticsQueryRequest;
 $query->setRowLimit($limit);
 $query->setDimensions(array('query'));
 $query->setStartDate($start);
 $query->setEndDate($end);
 $query->setSearchType('web');
 $resulets = array();
 $resulets = $webmaster->searchanalytics->query($url, $query);
 if ( !empty( $resulets) ) {
  $csv = array();
  foreach ( $resulets $key => $result ) {
   $columns = array(
    $key + 1,
    $result->keys[0],
    $result->clicks,
    $result->impressions,
    round( $result->ctr * 100, 2 ) . '%',
    round( $result->position, 1 )
   );
   array_push($csv,$columns);
  }
  if ( !empty( $csv ) ) {
   $list;
   $list = array_merge( array(array("順位","クエリ",”クリック数","表示回数","CTR","掲載順位")), $csv );
   $filename = date( "Y-m-d_H-i-s" ).'.csv';
   $filepath = 'download/'.$filename;
   $fp = fopen( $filepath, 'w' );
   // 配列をカンマ区切りにしてファイルに書き込み
   foreach ( $list as $fields ) {
    //文字コード変換
    mb_convert_variables( 'SJIS', 'UTF-8', $fields );
    //配列をCSV形式に出力
    //echo $fields;
    fputcsv( $fp, $fields );
   }
   fclose( $fp );
   //ダウンロードの指示
   header( 'Content-Type:application/octet-stream' );
   header( 'Content-Disposition:filename='.$filename ); //ダウンロードするファイル名
   header( 'Content-Length:' . filesize( $filepath ) ); //ファイルサイズを指定
   readfile( $filepath ); //ダウンロード
   unlink( $filepath );
  }else{
   echo "該当するデータがありません";
  }
 }else{
  echo "該当するデータがありません";
 }
}else{
 //トークンがない場合
 $redirect_uri = 'http://' . $_SERVER['HTTP_HOST'] . '/oauth2callback.php';
 header('Location: ' . filter_var($redirect_uri, FILTER_SANITIZE_URL));
}
?>

条件を指定してcsv形式でダウンロードすることができます。

実際には、条件の指定を別ページのfromタグからもってきたり条件の指定をもっと細かくできるようにしています。

ダウンロードが完了し、アプリとの連携を解除したい場合は、こちらからサービス名と同じやつを解除することでアプリとの連携が切れます。

 

参考

ほかにもいろいろと調べたサイトがありますがやはり一番参考になるのは、公式ですね。

 

このブログを書いた人

S・T・K
皆さんの喜ぶ情報を投稿していきます。ご期待ください。
この人のすべてのブログを見る