Python

【Python】Google Ads APIで関連キーワード・検索ボリューム・広告単価(CPC)をスクレイピング

この記事は約13分で読めます。

 

今回は【Python】Google Ads APIで関連キーワード・検索ボリューム・広告単価(CPC)をスクレイピングする方法について調査した結果を紹介したいと思います

 

今回はGoogle Ads APIを使ってGoogleが提供しているサンプルスクリプト(Python)でキーワードアイデアを取得してみます。

 

 

事前準備

 

執筆時の最新のバージョンはv14となっています。

基本的には、以下のサイトを参考にしています。

【Google Ads API】Google APIからキーワードアイデア取得【Python】 | enjoyall
Google広告にAPIがあることを知ってるでしょうか?かなーーーり手順としては面倒ですがキーワードリストを取得できたりして面白いことができ

 

基本的には↑の記事の内容がベースですが、少し情報が古かったので補足していきます。

 

必要なアカウントとアクセスキー一覧

 

必要なアカウントと取得するアクセスキーの関係を表にしておきます。 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で本来であれば、本番環境用のトークンを取得する必要があり、申請がなかなか面倒です。ですが今回はキーワードプランナーのように検索ボリュームを知りたいだけなのでテスト用のトークンでも実装可能です。

 

具体的な手順としては、

 

  1. MCCアカウント作成
  2. MCCアカウントからGoogle広告のアカウント作成
  3. MCCアカウントからAPIトークンの取得
  4. テスト環境のMCCアカウント作成
  5. 1で作成したMCCアカウントに4のアカウントを紐づけ

という流れです。

 

MCCアカウント作成

 

MCCアカウントの画面からアカウント作成をクリックしてMCCアカウントを作成します

 

MCCアカウントからのAPI開発者トークン取得

 

作成したMCCアカウントからAPI開発者トークンを生成します。
メイン画面の左上が先程作成したMCCアカウントになっている状態で「ツールと設定」→「APIセンター」を選びます。

 

Google広告:MCC-API開発者トークン作成

Google広告:MCC-API開発者トークン作成

 

適当に設定して開発者申請をすると以下の画面のようになります。

Google広告: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を開きます

Google Cloud Platform
Google Cloud Platform lets you build, deploy, and scale applications, websites, and services on the same infrastructure as Google.

プロジェクト名を入力してプロジェクトを作成します

 

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\<ユーザー名>)にコピー。(スクリプトがデフォルト設定だと~/を見に行くため)

 

スクリプトの実行

 

google-ads-python/examples/planning/generate_keyword_ideas.py at main · googleads/google-ads-python
Google Ads API Client Library for Python. Contribute to googleads/google-ads-python development by creating an account on GitHub.

 

以下のコマンドでスクリプトを実行します

 

$ 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

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

タイトルとURLをコピーしました