PythonでサーチコンソールAPIからCSVに検索データを落とす

SEO分析に不可欠なサーチコンソールだが、データが3ヶ月以上蓄積されなかったり、使いにくい管理画面だったり、痒いところに手が届かない。
CSVで出力して保存できるよう、PythonからGoogleのAPIを叩いてみる。

前提

  • Python 3系
  • Google Search Console API の認証は済んでいる

コード

devices.py

import argparse
import sys
from googleapiclient import sample_tools

import pandas as pd #csvを吐き出す用

argparser = argparse.ArgumentParser(add_help=False)
argparser.add_argument('property_uri', type=str,
                                             help=('Site or app URI to query data for (including '
                                                         'trailing slash).'))
argparser.add_argument('start_date', type=str,
                                             help=('Start date of the requested date range in '
                                                         'YYYY-MM-DD format.'))
argparser.add_argument('end_date', type=str,
                                             help=('End date of the requested date range in '
                                                         'YYYY-MM-DD format.'))

def main(argv):
    service, flags = sample_tools.init(
            argv, 'webmasters', 'v3', __doc__, __file__, parents=[argparser],
            scope='https://www.googleapis.com/auth/webmasters.readonly')

    request = {
            'startDate': flags.start_date,
            'endDate': flags.end_date,
            'dimensions': ['date','device'],
    }
    response = execute_request(service, flags.property_uri, request)
    print_table(response, 'Devices')

def execute_request(service, property_uri, request):
    return service.searchanalytics().query(
            siteUrl=property_uri, body=request).execute()

def print_table(response, title):
    if 'rows' not in response:
        print('Empty response')
        return

    rows = response['rows'] 
    tbl = []
    for row in rows:
        v_date = row['keys'][0] #dimensionsに2つ以上指定するとlist型でデータが返るので順に出力
        v_device = row['keys'][1]
        v_imp = int(row['clicks'])
        v_clicks = int(row['impressions'])
        v_ctr = str(round((row['ctr'] * 100),1)) + "%"
        v_pos = str(round(row['position'],1))
        tbl.append([v_date, v_device, v_imp, v_clicks, v_ctr, v_pos])
    tbl_csv = pd.DataFrame(
        tbl,
        columns = ['Dates', 'Devices', 'Clicks', 'Impressions', 'CTR', 'Position'])
    tbl_csv.to_csv(title + '.csv')
    print("\n Done! \n")
if __name__ == '__main__':
    main(sys.argv)


コマンドラインから実行

サイトURL、開始日、終了日を変数として指定する必要あり。 $ python3 devices.py 'http://xxbxxqxx.com/' '2017-06-01' '2017-06-30'

これで、日付、デバイス、クリック数、表示回数、CTR、平均順位が出力されたcsvが、同じディレクトリに生成されているはず。


Python初心者ゆえ、見苦しい箇所があるかも。
ただGoogleがすでに用意しているサンプルコードが過不足なく良い感じなので、Pythonの基礎がわかっていれば「クリック数順ページTOP30」とか「どの国でCTRが悪い」等は簡単に出せそう。

これを近いうちに自動でBig Queryあたりに持っていき、Data studioと連携までできるようになれば捗りそうだな〜

Posted at

[data-hatena-bookmark-layout="standard-noballoon" data-hatena-bookmark-lang="ja" title="このエントリーをはてなブックマークに追加"] img [src="https://b.st-hatena.com/images/entry-button/button-only@2x.png" alt="このエントリーをはてなブックマークに追加" width="20" height="20" style="border: none;"]