今回は【Python】Google Ads APIで関連キーワード・検索ボリューム・広告単価(CPC)をスクレイピングする方法について調査した結果を紹介したいと思います
今回はGoogle Ads APIを使ってGoogleが提供しているサンプルスクリプト(Python)でキーワードアイデアを取得してみます。
Contents
事前準備
執筆時の最新のバージョンはv14となっています。
基本的には、以下のサイトを参考にしています。
基本的には↑の記事の内容がベースですが、少し情報が古かったので補足していきます。
必要なアカウントとアクセスキー一覧
必要なアカウントと取得するアクセスキーの関係を表にしておきます。 APIに「テスト」用と、「プロダクション」用、があるのですが「プロダクション用」は申請受理のハードルがすごく高いので今回はテストアカウントで利用します。
アカウント | アクセスキー | コメント |
---|---|---|
Googleアカウント | Google広告を利用できるアカウント | |
MCCアカウント | developer_token | クライアント センター(MCC)アカウントは、複数のGoogle広告アカウント管理のためのアカウント。(APIトークン取得するために必要) |
MCCテストアカウント | login_customer_id | テスト用のMCCアカウント。関連キーワードを検索するAPIはテスト用のMCCアカウントでは使用できないため別に作成する必要がある |
GCPプロジェクトアカウント | client_id , client_secret | スクリプトからads APIにアクセスするための認証情報 |
refresh_token | 認証キーをリフレッシュするためのトークン。スクリプトを実行して取得 |
余談ですがGAFA系の認証情報はセキュリティの問題やもともとは別サービスだったのを買収して無理やり組み込んだりしているせいで、依存関係が本当にめんどくさいです
MCCアカウント作成
Ads APIは、Google広告に関しての様々な操作を行えるAPIで本来であれば、本番環境用のトークンを取得する必要があり、申請がなかなか面倒です。ですが今回はキーワードプランナーのように検索ボリュームを知りたいだけなのでテスト用のトークンでも実装可能です。
具体的な手順としては、
- MCCアカウント作成
- MCCアカウントからGoogle広告のアカウント作成
- MCCアカウントからAPIトークンの取得
- テスト環境のMCCアカウント作成
- 1で作成したMCCアカウントに4のアカウントを紐づけ
という流れです。
MCCアカウント作成
MCCアカウントの画面からアカウント作成をクリックしてMCCアカウントを作成します
MCCアカウントからのAPI開発者トークン取得
作成したMCCアカウントからAPI開発者トークンを生成します。
メイン画面の左上が先程作成したMCCアカウントになっている状態で「ツールと設定」→「APIセンター」を選びます。
適当に設定して開発者申請をすると以下の画面のようになります。
この開発者トークン(developer_token)は後ほど使うので記録しておいて下さい。今回はアクセス権を「テストアカウント」にしています。作ったアプリを公開したりする場合はプロダクション用に「ベーシックアクセスを申請」してください。
Google広告テストアカウントを作成
本番環境のMCCアカウントを作成して開発者トークンのAPI鍵を確認したあとに、別でテストアカウントを作成してそのユーザーIDで、本番環境のトークンを使ってAPIを叩きます。
具体的にはhttps://developers.google.com/google-ads/api/docs/first-call/test-accounts?hl=jaにアクセスして画面を少しスクロールすると出てくる「テスト用の MCC アカウントの作成」というボタンをクリックします
するとMCCアカウントの一覧画面に遷移するので「新しいアカウントを作成」をクリックすると以下のように画面右上に赤色でテストアカウントと表示されたアカウントの作成が画面が表示されるので手なりに情報を入力しアカウントを作成します
作成したアカウントの画面右上にテストアカウントと赤色で表示されていれば成功です。画面左上の10桁の数字が控えてください
GCPプロジェクト側の設定
プロジェクトの作成
Google Cloud Platformを開きます
プロジェクト名を入力してプロジェクトを作成します
AdsAPIを有効化する
以下の「Google Ads API」の個別ページから、APIを有効にします。(https://console.cloud.google.com/apis/library/googleads.googleapis.com)
ヒットしない場合はGoogle Cloud Platformにアクセスし、左側のメニューから「APIとサービス」→「+APIとサービスの有効化」を開き、検索メニューから「Google Ads API」で検索してください。
GCPプロジェクトの認証情報の取得
Oauth認証情報を取得する必要があります。具体体には先ほどの「認証情報」の画面から今度は「認証情報を作成」→「OAuthクライアントID」をクリックします
以下のようにアプリケーションの種類を「Webアプリケーション」として「承認済みjavascript生成元」と「承認済みリダイレクトURI」に「http://127.0.0.1:8080」と記載します
これらを入力したら画面下「作成」をクリックします
すると以下のような画面が出てくるので「jsonをダウンロード」をクリックして認証情報が格納されたjsonファイルをダウンロードしてわかりやすい場所に保存してください
ダウンロードしたjsonファイルをテキストエディタなどを開いて
client_id と client_secret を確認してください
これでGCP側の設定は完了です
サンプルコードの確認
Google公式が公開しているGITリポジトリからコードをダウンロードします
たくさんコードがありますが、その中で関連キーワード・検索ボリューム・広告単価(CPC)をスクレイピングする際に使用するコードは「examples/authentication」にある「generate_user_credentials.py」と「examples/planning/」の中にある「generate_keyword_ideas.py」というファイルになります
ライブラリのインストール
Google Ads向けにPythonライブラリが用意されているのでインストールします。(Python3.7以上)
$ pip install google-ads
リフレッシュトークンの取得
generate_user_credentials.pyを実行してリフレッシュトークンを取得します
(コマンドはダウンロードしたファイルの直下で実行した場合の想定)
python3 examples/authentication/generate_user_credentials.py
–client_secrets_path <ダウンロードしたjsonファイルのPATH>
MACのファイルのパスはfinderで対象ファイルを「Command」を押しながら右クリックで「パスをコピー」で確認できます
ファイルを実行するとURLが表示されるので(http://127.0.0.1:8080ではなく、その上に表示されている長いURLです)
それをブラウザでアクセスすると認証画面に遷移するとのでボタンを押して同意してください。するとコンソールにレフレッシュトークンが表示されます
google_ads.yamlの編集
ダウンロードしたサンプルコードの中に、google_ads.yamlというファイルがあるので、エディタで開きます。その中にこれまで取得した下記の情報を入力します
- developer_token : MCCアカウントの「APIセンター」で確認できるAPIトークン
- use_proto_plus : True(Falseでも良い)
- client_id : ダウンロードしたjsonに記載
- client_secret : 同上
- reflesh_token : 先ほど認証後に表示されたもの
- login_customer_id : テスト用MCCアカウントの数字10桁(ハイフン無し)
ファイルを編集したらこれをホームディレクトリ(windowsならC:\Users\<ユーザー名>)にコピー。(スクリプトがデフォルト設定だと~/を見に行くため)
スクリプトの実行
以下のコマンドでスクリプトを実行します
$ python generate_keyword_ideas.py -c 5168115449 -k "プログラミング"
<実行イメージ>
ID間違い
ユーザーIDがテストユーザーではないと以下のようなエラーになります
the manager’s customer id must be set in the ‘login-customer-id’ header. See https://developers.google.com/google-ads/api/docs/concepts/call-structure#cid
Request with ID “9wPf7C6_y6pHxha_r9r-ow” failed with status “PERMISSION_DENIED” and includes the following errors:
Error with message “User doesn’t have permission to access customer. Note: If you’re accessing a client customer, the manager’s customer id must be set in the ‘login-customer-id’ header. See https://developers.google.com/google-ads/api/docs/concepts/call-structure#cid”.
トークンの期限切れ
error_details, response_data, retryable=retryable_error
google.auth.exceptions.RefreshError: (‘invalid_grant: Token has been expired or revoked.’, {‘error’: ‘invalid_grant’, ‘error_description’: ‘Token has been expired or revoked.’})
これが出た場合はリフレッシュトークンを再取得してください
geo_target_constants
Traceback (most recent call last):
File “generate_keyword_ideas.py”, line 182, in <module>
args.page_url,
File “generate_keyword_ideas.py”, line 64, in main
request.geo_target_constants = location_rns
AttributeError: Assignment not allowed to message, map, or repeated field “geo_target_constants” in protocol message object.
上記のようなエラーが出た場合は60行目付近を以下のようにコードを修正すると動作します
request.geo_target_constants = location_rns ↓ request.geo_target_constants.extend(location_rns)
AttributeError
Traceback (most recent call last):
File “generate_keyword_ideas.py”, line 183, in <module>
args.page_url,
File “generate_keyword_ideas.py”, line 92, in main
competition_value = idea.keyword_idea_metrics.competition.name
AttributeError: ‘int’ object has no attribute ‘name’
competition_value = idea.keyword_idea_metrics.competition.name ↓ competition_value = idea.keyword_idea_metrics.competition
その他
そのほかのエラーが出た場合はuse_proto_plus:をTrueもしくはFalseにするとうまくいくことがあります
コードの改良
リージョンコードの指定
コードはデフォルトのままだとUSなので日本語のワードなどで検索をかけるとほとんど結果が出力されません。なので_DEFAULT_LOCATION_IDSと_DEFAULT_LANGUAGE_IDを日本語に関連するものに変更する必要があります
<例>
_DEFAULT_LOCATION_IDS = ["20636", "20637", "2392", "20646", "20634", "20635", "20651", "20624", "20663", "20645"] # 日本地域を指定
_DEFAULT_LANGUAGE_ID = "1005" # 日本語に変更
APIのパラメータ
generate_keyword_ideas.pyの内部で使用しているKeywordPlanAPIの引数などについては以下のURLに記載されています
https://developers.google.com/google-ads/api/reference/rpc/v14/KeywordPlanHistoricalMetrics
コメント