前段の記事:Search Consoleの過去データもBigQueryに蓄積する_1.全体像
最後のこの記事では、以下の点について記載していく。
Search Console API に取得上限数が設けられているため、任意の期間を指定して実行するようにしたい。Cloud Functions で毎日期間をずらして実行するにはどうしたらよいか。
Search Console API の取得上限数
Search Console API には取得上限数が設けられている。
API 使用量の割り当てに加え、検索分析のメソッドでは、検索タイプ(ウェブ、画像など)ごとに 1 日あたり最大 50,000 行がデータ別に表示されます(クリック順)。
パフォーマンス データを取得する | Search Console API
query メソッド の rowLimit プロパティで取得上限数を指定できる。デフォルトが1,000で、最大が25,000(レスポンスの最初の行のインデックスを指定する startRow プロパティと併用すると50,000行まで取得できるようだったが、今回は対応しなかった)
上記の制限があるため、今回作成したコード(https://github.com/yrarchi/search_console_to_bigquery)では、以下のパラメータを任意で指定できるようにした。

例えば、2024-02-01分から公式のエクスポート機能でBigQueryにエクスポートしており、その前の2週間分を1日あたり7日分を取得したい場合は以下のような指定になる。
{
"target_start_date": "2024-01-18", // 開始日を指定
"target_end_date": "2024-01-31", // 終了日を指定
"days": 7, // 1日あたりに取得する日数
"site_url": "your_site_url",
"dataset_id": "searchconsole_hoge",
"site_table": "past_searchdata_site_impression", // 任意のテーブル
"url_table": "past_searchdata_url_impression" // 任意のテーブル
}
Cloud Functions で実行する
上記のように Search Console API の取得上限数への対応を行ったため、毎日1回コードの実行を行うようにしたい。手動で実行するのはつらいので、Cloud Functions で実行するよう設定を行った。
手元で実行する場合とコードの大半は同じだが、異なる部分を以下で記載する。
- クライアントの作成
今回、Cloud Functions の実行を行うサービスアカウントに BigQuery の必要な権限を付与したため、google.auth の default を利用した。
from google.auth import default
from google.cloud import bigquery
credentials, project_id = default()
client = bigquery.Client(credentials=credentials, project=project_id)
ローカルでの実行の際は、サービスアカウントのクレデンシャル情報をファイルとして置いて、それを読む形式にしていた。
from google.oauth2 import service_account
from google.cloud import bigquery
credentials = service_account.Credentials.from_service_account_file(
"service-account.json",
scopes=[
"https://www.googleapis.com/auth/bigquery.insertdata",
"https://www.googleapis.com/auth/bigquery"
]
)
client = bigquery.Client(
credentials=credentials, project=credentials.project_id
)
- ライブラリの追加
Cloud Functions の実行に必要なため、以下のライブラリを requirements.txt に追加している。
functions-framework==3.*
毎日対象期間をずらしながらCloud Functions の実行を行う必要があるが、変数を毎日+1していく直接的な方法でなく、BigQuery に挿入済みのデータの日付から判断していく方式を取った。

コードとしては以下のあたりが該当する。
def get_max_date(self, table_id):
query = f"""
SELECT MAX(data_date) AS max_date
FROM `{self.dataset_id}.{table_id}`
"""
try:
query_job = self.bigquery_client.query(query)
result = list(query_job.result())
if result:
return result[0]["max_date"]
else:
return None
except Exception as error:
print(f"An error occurred while getting the max date from {table_id}: {error}")
raise
# (中略)
def get_next_day_after_max_date(client, table_id, default_start_date):
max_date = client.get_max_date(table_id)
if max_date:
next_day = max_date + timedelta(days=1)
return next_day
else:
return datetime.strptime(default_start_date, "%Y-%m-%d").date()
以上の対応により、任意の期間を指定した上で、Cloud Functions を毎日期間をずらして実行することができるようになった。
コードの全体は以下に置いている。
https://github.com/yrarchi/search_console_to_bigquery