Google広告は今やどんな業態・企業規模の会社でも使うツール。2018年のデータによると、Googleの収益源の内約7割が「広告」。まさに数多いGoogleサービスの中でも本丸と言ってもいいのがGoogle広告だと思う。
[引用]ADVERTISINGHow the Tech Giants Make Their Billions
今回、幸運な事に広告代理店と組むことでそのGoogleの本丸Google広告のAPIに挑戦できることになった。詳しくは言えないけど、日に日に増えるレポーティング・分析・入稿・入札を一気にできる方法はないか?という課題を解決するためのアプリケーションづくり。最終的にはプログラミングに馴染みのない担当者でも扱える「Googleスプレッドシート」に集約しようという話。
WEB広告代理店は何してる?・・・日本語情報がない
・・・とは言うものの、構想・実装1日目から困ったことになった。日本語情報がない。GoogleアナリティクスとかGoogleスプレッドシートとかに関連するAPIの情報は数多く見てきました。しかしながらGoogle広告の日本語情報は数が限られてますね。コレ。
小さな広告代理店ならいざしらず、電通・博報堂・オプト・サイバーとかやればいいのに。いや、やってるけど、情報公開しないだけかな?露骨に収益に影響しそうだし、そうなのかもしれない。この日本語情報ない問題は大きくて、まず情報収集に時間を取られた。
なのでこの記事では、開発をすすめる上ですごく参考になった情報をリンクまとめ。自分としても備忘録。
Google広告API触るならこのリンク読め
リンク①新しい Google Ads API にアップデートして最新のサービスをご利用ください
まずは、本家のブログを見てみましょう。Google Adwords APIからGoogle Ads APIに変わったんだ「ふ〜ん」とかためになる情報が満載です。
Google Ads Query Language によって、柔軟なクエリが実現できます。
ここに関しては、本当だと思ってて、結構このクエリ自体が柔軟に作れて、ほぼSQL言語なんで、馴染みも深いです。やはり腐っても公式です。
リンク②Google Ads API のサンプルを動かすまで
お次はQiita記事。開発者トークンの取得方法からGoogle API Consoleの設定まで事細かに書いてくれてる、丁寧な記事。言語はPHPなんですが、この記事のおかげで、調べ物が減りました。ありがとうQiita。ありがとう@akaaariiiiinさん。
リンク③AdWords APIを利用して、広告運用の仕事を95%削減するまで
実際のビジネス側面から、Google広告APIを使うことで、運用工数がどのくらい削減できるのかって面を書いてくれてる貴重な記事。さすがdip。進んでるわ。事業会社で、こういう先進的なエンジニアがいる会社っていいですよね。実際に事業会社において、実務に落とし込んで実用化するのって同僚のリテラシーレベルも含めて相当難しいと思うんですよね。それを実績として進めてるのはすごいよな。@tomoyamachiさんありがとう。
Web インターフェイス上で GAQL を組み立てることができる便利ツールです。取得したいリソースを指定すると、 そのリソースに対して指定できるフィールドが自動的に絞り込まれ、セレクトボックスからそれを追加できて非常に有用。 絞り込み条件や並び替えなども指定できます。
Google Ads API で何らかの情報を取得したくなったら、とりあえず Query Builder を使っておくのが良いと思います。便利。
と書いてくれてて、実際にQueryBuilder使ってクエリ組み立てました。優良情報。本当にFeedForceはいい会社なんだよね。あんまり関係性があって言及できないんだけど。いい会社ってことだけは言及できる。※関係者見つけても・・・あまり公にせぬようお願いします(笑
リンク⑤Google Ads API beta – metrics
僕の検索の仕方が悪いのか、このページに行き着くのに2時間くらいかかった。
「こんな分かりづらいところに、リンク作って・・・。こいつら馬鹿か?」
と思ったとか思わなかったとか。とりあえず、リファレンス呼んで、このクエリに使う指標(=metrics)があればなんとかなります。
リンク⑥google-ads-python
あとはPythonのGoogle広告API用のライブラリ。コレさえあれば、ほとんどなんとか行きます。sampleみてもコードについては、変数設定してクエリ作って投げ込んだら情報が返ってきました!!程度の簡単なものでOKなことが分かります。リンク貼ってるのはPython版だけど、一つ階層上がれば、ほとんどのメジャー言語でライブラリあります。
自分が特に参考になったのは、以下コードですね。google-ads-python/examples/reporting/get_keyword_stats.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
import argparse import sys import google.ads.google_ads.client _DEFAULT_PAGE_SIZE = 1000 def main(client, customer_id, page_size): ga_service = client.get_service('GoogleAdsService', version='v2') query = ('SELECT campaign.id, campaign.name, ad_group.id, ad_group.name, ' 'ad_group_criterion.criterion_id, ' 'ad_group_criterion.keyword.text, ' 'ad_group_criterion.keyword.match_type, ' 'metrics.impressions, metrics.clicks, metrics.cost_micros ' 'FROM keyword_view WHERE segments.date DURING LAST_7_DAYS ' 'AND campaign.advertising_channel_type = \'SEARCH\' ' 'AND ad_group.status = \'ENABLED\' ' 'AND ad_group_criterion.status IN (\'ENABLED\', \'PAUSED\') ' 'ORDER BY metrics.impressions DESC ' 'LIMIT 50') response = ga_service.search(customer_id, query, page_size=page_size) try: for row in response: campaign = row.campaign ad_group = row.ad_group criterion = row.ad_group_criterion metrics = row.metrics print('Keyword text "%s" with match type "%d" and ID %d in ad ' 'group "%s" with ID "%d" in campaign "%s" with ID %d had %s ' 'impression(s), %s click(s), and %s cost (in micros) during ' 'the last 7 days.' % (criterion.keyword.text.value, criterion.keyword.match_type, criterion.criterion_id.value, ad_group.name.value, ad_group.id.value, campaign.name.value, campaign.id.value, metrics.impressions.value, metrics.clicks.value, metrics.cost_micros.value)) except google.ads.google_ads.errors.GoogleAdsException as ex: print('Request with ID "%s" failed with status "%s" and includes the ' 'following errors:' % (ex.request_id, ex.error.code().name)) for error in ex.failure.errors: print('\tError with message "%s".' % error.message) if error.location: for field_path_element in error.location.field_path_elements: print('\t\tOn field: %s' % field_path_element.field_name) sys.exit(1) if __name__ == '__main__': # GoogleAdsClient will read the google-ads.yaml configuration file in the # home directory if none is specified. google_ads_client = (google.ads.google_ads.client.GoogleAdsClient .load_from_storage()) parser = argparse.ArgumentParser( description=('Retrieves a campaign\'s negative keywords.')) # The following argument(s) should be provided to run the example. parser.add_argument('-c', '--customer_id', type=str, required=True, help='The Google Ads customer ID.') args = parser.parse_args() main(google_ads_client, args.customer_id, _DEFAULT_PAGE_SIZE) |
コード書くより難しかったGoogle審査攻略
とまぁ、ここまでのリンク集で②⑤⑥あたり見るだけでも、GoogleサービスのAPI結構使ってる人なら、全然開発は進むように思います。ただ、一番むずかしいのは開発者トークンをテスト版から本番版にするときの、Googleの審査通過です。アプリケーションを作成するにあたってのビジネスモデルを提案書みたいなのを書いて提出する必要があります。この審査通過に自分は3週間かかりました。
ちょっと前に、Google Sheets APIのScopesの審査(英語)にも1ヶ月を要したので、それよりはマシだったですけど。Google塩対応なんで、ちょっと気をつけたほうがいいかも。あと、審査を通らずして納期も決めないほうがいいです。相当あとズレする可能性があります。
とはいえ、時間かかった分ノウハウも溜まったので、Google Ads APIの審査に関して、疑問がある方はお気軽にお問い合わせください。
以上です。よいGoogle広告APIライフを!
広告APIとの連携WEBアプリ開発中
簡単に広告API(Google含む)と連携できると便利ですよ。Indentでは広告APIと各種SaaS(KintoneやMarketoやSalesForce)とを連携した開発を進めています。貴社ビジネスにも適用させていきたい場合はお問い合わせください。
>>>Indentはこちら