タイトルのとおりです。
ハマりポイントがいくつかあったので備忘録として残しておきます。
Ads APIについて書いてある記事はいくつかあるのですが、情報が古くそのままでは動かないものが多かったです。
前身のAdWords APIについての記事もありますが、2022年に終了しているので、ご注意を。
Python用のライブラリはこちらです↓
https://github.com/googleads/google-ads-python
最新のバージョンはv12となっています。
基本的には、以下のサイトを参考にしています。
こちらの内容をベースに補足していきます。
アカウントについて
Ads APIは、Google広告に関しての様々な操作を行えるAPIです。
本来であれば、本番環境用のトークンを取得する必要があり、申請がなかなか面倒です。
ですが今回はキーワードプランナーのように検索ボリュームを知りたいだけなのでテスト用のトークンでも実装可能です。
そのため、テスト用のアカウントも作成します。
手順としては、
- MCCアカウント作成
- MCCアカウントからGoogle広告のアカウント作成
- MCCアカウントからAPIトークンの取得
- テスト環境のMCCアカウント作成
- 1で作成したMCCアカウントに4のアカウントを紐づけ
という流れです。
ややこしいですが、
テスト環境で作成したMCCアカウントのユーザーIDで、本番環境のトークンを使ってAPIを叩きます。
APIトークンは、
- 申請直後は制限された用途にしか使えないテスト用トークンが発行される
- 更に申請して、受理されると制限が解除される
という仕組みになっています。
今回使いたい検索ボリュームを取得する部分は、テスト用のトークンでも動くので、簡単にトークンを発行できます。
Google CloudでAPI用のプロジェクトを作成
トークンを発行したら、APIの設定を行います。
Cloudコンソールから、API用に新しくプロジェクトを作成し、Ads APIを有効にします。
左のメニューにある「認証情報」、に飛び、新しい認証情報(OAuthクライアントID)を作成します。
同意画面も作成させられるので、指示に従います。
よしなに入力して認証情報の作成が完了したらjsonとしてダウンロードできます。
ダウンロードしておきましょう。
OAuth同意画面を選択すると、公開ステータスが「テスト」になっていると思います。
この状態だと、テスト用に登録したアカウントしかOAuthを通らないので、ADD USERSのボタンからメールアドレスを指定して追加しておきましょう。
PythonでOAuth認証など
こちら↓にサンプルコードが一式揃っているので、ダウンロードしておきます。
https://github.com/googleads/google-ads-python
サンプルコードを解凍し、先程取得したjsonを同じディレクトリに置いておきましょう。
python3.7以上の環境を用意し、ライブラリを取得します。
pip install google-ads
次に認証を行います。
(この部分をWSLで実行すると、コールバックがうまく動かないと思いますので注意。)
先程ダウンロードしておいたjsonを指定して以下のスクリプトを実行します。
python examples/authentication/generate_user_credentials.py -c {client_secretのjson}
スクリプトの場所や名前が変わっているかもしれないので、失敗したらそれっぽいものを実行してください。
(-cで指定しているオプションも、以前と仕様が変わっていました。)
実行するとログイン用のURLが表示されるので、そのまま開き、テスト環境用のMCCアカウントに登録したGoogleアカウントでログインします。
認証が完了すると、実行したスクリプトの出力に、
Your reflesh token is : ....
と出るので、コピーしておきましょう。
設定ファイルに追記
後は認証情報を設定してAPIを実行するだけです。
ダウンロードしたサンプルコードの中に、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桁(ハイフン無し)
を指定します。
これをホームディレクトリにコピー。(スクリプトが~/を見に行くので)
引数でも渡せるので、そちらで指定してもOKです。
API実行
python examples/planning/generate_keyword_ideas.py -c {login_customer_idで指定したやつ} -k "{検索したいキーワード}"
でそれっぽいデータが表示されればOKです。
ですが、私が実行したときは2点動かない部分がありました。(そのうち修正される?)
1つ目は、googleのAPIサーバーに接続できないというエラー。
以下のようなエラーを含んでいます。
DNS resolution failed for googleads.googleapis.com: C-ares status is not ARES_SUCCESS qtype=AAAA name=googleads.googleapis.com is_balancer=0: Could not contact DNS servers
RPC接続周りの問題でした。
詳細は割愛して対処法だけ解説すると、
import os
os.environ['GRPC_DNS_RESOLVER'] = 'native'
この2行を冒頭に追記すれば動くと思います。
もう1点は、以下のエラー。
AttributeError: Assignment not allowed to message, map, or repeated field "geo_target_constants" in protocol message object.
以下のように修正します。(修正しなくても動くはずなんですが)
#request.geo_target_constants = location_rns
request.geo_target_constants.extend(location_rns)
これで正常に動くはず。
別のサンプルコードを参考にすれば、特定のキーワードの検索ボリュームだけを取得することもできるので、
- 検索ボリュームの大きいキーワードの関連キーワードを大量に取得
- 検索ボリュームを取得
を延々とループさせています。
コメント
本記事大変参考になりました!!ありがとうございます!!
> ですが、私が実行したときは2点動かない部分がありました。(そのうち修正される?)
上記の件ですが、GitHubでissue立てて相談してみました。
https://github.com/googleads/google-ads-python/issues/773
@BenRKarlさんから返信があって、
google-ads.yamlの中にあるuse_proto_plusをTrueにすると動くそうです。
私も実際に試したところ正常に動きました。
もし興味があればお試しください🙇
コメントありがとうございます!
情報共有いただき助かります、こちらこそありがとうございました!