【python】OAuth経由でSearch ConsoleのAPIから検索アナリティクスデータをCSVに保存する
Search ConsoleのAPIから、OAuth経由で検索アナリティクスのデータを抜き出してくる方法。
検索アナリティクスは90日分のデータしか保存されないので、定期的にこのプログラムを動かして、検索アナリティクスのデータを蓄積していきたい。
準備
諸々の必要なモジュールをインポートする。
今回は事前にSQlite3に保存しておいた、OAuth認証のトークンを使用する。
CSVの生成用にpandasもインポート。
#OAuth認証のデータを扱う時に使う import json import sqlite3 #API経由でデータ取得する時に使う import httplib2 from apiclient.discovery import build from oauth2client.client import OAuth2WebServerFlow from oauth2client import client #CSVに保存する時に使う import pandas as pd from pandas import DataFrame, Series
検索アナリティクスのデータ取得
サイトURLや取得対象日の入力
複数サイトを管理してる場合でも扱いやすくするために、今回はインプットでサイトURLを指定する方式にする。
#取得対象のURL、開始日、終了日をインプットで入力する。 property_uri = input('取得対象のURL: ') s_date = input('開始日の入力(YYYY-MM-DD):') e_date = input('終了日の入力(YYYY-MM-DD):') #CSVのファイル名用にURLの変換 domain = property_uri.replace('://','_').replace('/','_')
OAuthトークンを、SQlite3から抜き出すための関数
SQlite3で作成したテーブルから、取得対象URLに一致するサイトのOAuthトークンを取り出す。
※前もってOAuth認証を済ませておき、OAuthトークンをSQlite3に保存しておく必要がある。
def get_oauth_json(): #OAuth認証情報のデータベースに接続 #oauth_database.dbは同じディレクトリに保存しておく connecter = sqlite3.connect('oauth_database.db') c = connecter.cursor() #データベースから、取得対象URLに一致するデータを抜き出し c.execute("select * from oauth_list where site_name = '" + property_uri +"' ") for row in c: oauth_json = row[1] #データベースを閉じる connecter.commit() connecter.close() #取得対象URLのOAuth認証データを返す return oauth_json
リクエストを処理するための関数
これは参考にした記事の内容をそのまま使用させて頂いている。
def execute_request(webmasters_service, property_uri, request): return webmasters_service.searchanalytics().query( siteUrl=property_uri, body=request).execute()
取得したデータをCSVを保存するための関数
今回は取得したデータをCSVにして保存する。
def print_table(response): if 'rows' not in response: print ('Empty response') return rows = response['rows'] df = DataFrame(rows) #取得したデータのままだと検索クエリがリストになっているので、キーワードを抜き出す。 keys = Series(df['keys'].apply(lambda x : x[0])) df['keys'] = keys #各カラムの名前を日本語に変換。 shaped_df = df.rename(columns={'keys': 'キーワード', 'clicks': 'クリック数', 'impressions':'表示回数','position':'平均掲載順位','ctr':'CTR'}) #カラムの並び替え。Search Consoleの画面と同じ並びにする。 shaped_df = shaped_df.loc[:,['キーワード','クリック数','表示回数','CTR','平均掲載順位']] output_name ='【' + domain +'】SearchAnalytics_' +s_date + '_ ' + e_date + '.csv' #CSV形式でアウトプット df2.to_csv(output_name)
メインの処理
sqliteからOAtuhトークンを取り出し、API経由で取り出した検索アナリティクスのデータをCSVに保存する。
def main(): oauth_json_data = get_oauth_json() credentials = client.OAuth2Credentials.from_json(oauth_json_data) http_auth = credentials.authorize(httplib2.Http()) webmasters_service = build('webmasters', 'v3', http=http_auth) # Get the queries for the date range, sorted by click count, descending. request = { 'startDate': s_date, 'endDate': e_date, 'dimensions': ['query'], 'rowLimit': 2000 } response = execute_request(webmasters_service, property_uri, request) print_table(response)
まとめ
OAuth認証の仕方すら知らない状態からだったので、すごく苦戦してしまった…。
でも何とか形に出来たので、あとはスケジュール通りに実行できる仕組みさえ整えてしまえば、かなり便利になりそう!
今回のプログラムの作成にあたって下記の記事を参考にさせて頂きました。
xxbxxqxx.com