ブログ

Adwordsで天候に合せて広告を配信する仕組み その2

2015.03.24

前回Adwordsで天候に合せて広告を配信する仕組みという記事でAdwords APIの広告パラメータとOpenWeatherMapのAPIを組み合わせて当日の天気に合わせた広告文配信の仕組みをご紹介しました。
(広告パラメータとは、広告文の中の変数をプログラムから差し替えることが出来る仕組みです。)

ただ、広告パラメータを利用した方法は前回もお伝えした通り、以下の制限があり広告文を自由に変更できませんでした。

  1. パラメータは1つの広告の中で2箇所まで
  2. 置き換えるパラメータは数値通貨の特殊文字のみ

そこで今回は、これらの制限を回避して自由に広告文を切り替えるために、
広告のラベルを利用した広告文切り替えの仕組みを作ってみたいと思います。

 

想定する状況
岐阜県の岐南町にある居酒屋。生ビールは400円。
雨の日は客足が遠のくため、生ビール半額(200円)キャンペーンを実施中。

やりたいこと
雨の日だけ生ビールの金額を半額(200円)にした広告文を配信する。
それ以外の日は通常(400円)の広告文を配信。

OpenWeatherMap
今回も、天気はOpenWeatherMapから取得します。
(OpenWeatherMapについては前回の記事を参照。)

実際に広告を切り替えてみる

広告の準備

今回も配信する広告はAdwordsの管理画面から作成します。
今回は雨の日と雨の日以外の2種類の広告を用意します。雨の日は一時停止で登録しておきます。

広告作成
広告に「雨の日」と「雨の日以外」のラベルを付けるのが今回のポイントです。
このラベルを使って今回は広告の切り替えを行います。

OpenWeatherMap APIを使って天気を取得する

ここは前回のAdwordsで天候に合せて広告を配信する仕組みに記載してあります。

Adwords APIを使ってテキスト広告を更新する

Adwords APIを使ってアカウントのテキスト広告を取得します。

Selector selector = new Selector();
            selector.fields = new string[] {"Id", "Status", "Headline", "Description1", "Description2", "DisplayUrl", "Labels"};

            // 条件1:テキスト広告
            Predicate typePredicate = new Predicate();
            typePredicate.field = "AdType";
            typePredicate.@operator = PredicateOperator.EQUALS;
            typePredicate.values = new string[] { "TEXT_AD" };

            // 条件2:ステータスが「有効」と「一時停止」
            Predicate statusPredicate = new Predicate();
            statusPredicate.field = "Status";
            statusPredicate.@operator = PredicateOperator.IN;
            statusPredicate.values = new string[] {AdGroupAdStatus.ENABLED.ToString(), AdGroupStatus.PAUSED.ToString()};

            selector.predicates = new Predicate[] { typePredicate, statusPredicate };

            AdGroupAdPage page = new AdGroupAdPage();
            List updateList = new List();

            // テキスト広告を取得
            page = service.get(selector);

次に、取得した広告のラベルを見てステータスを切り替えます。

雨の日の場合は「雨の日」ラベルの広告を有効にして、「雨の日以外」ラベルの広告を一時停止に。

反対に雨の日以外は「雨の日」ラベルの広告を一時停止にして、「雨の日以外」ラベルの広告を有効にします。

if (page != null && page.entries != null)
            {
                foreach (AdGroupAd data in page.entries)
                {
                    TextAd textAd = (TextAd)data.ad;
                    foreach(Google.Api.Ads.AdWords.v201409.Label label in data.labels)
                    {
                        if (label.name == "雨の日" || label.name == "雨の日以外")
                        {
                            AdGroupAd ad = new AdGroupAd();

                            //雨の日の場合、「雨の日」ラベルの広告を有効に、「雨の日以外」ラベルの広告を一時停止にする。
                            if (weather == "Rain") ad.status = label.name == "雨の日" ? AdGroupAdStatus.ENABLED : AdGroupAdStatus.PAUSED;
                            //雨の日以外の場合、「雨の日」ラベルの広告を一時停止に、「雨の日以外」ラベルの広告を有効にする。
                            else ad.status = label.name == "雨の日" ? AdGroupAdStatus.PAUSED : AdGroupAdStatus.ENABLED;

                            ad.adGroupId = data.adGroupId;
                            ad.ad = new Ad() { id = textAd.id };

                            AdGroupAdOperation adGroupAdOperation = new AdGroupAdOperation();
                            adGroupAdOperation.@operator = Operator.SET;
                            adGroupAdOperation.operand = ad;

                            updateList.Add(adGroupAdOperation);
                        }
                    }
                }
            }

            if (updateList.Count == 0) return;

            try
            {
                // テキスト広告を更新する。
                AdGroupAdReturnValue retVal = service.mutate(updateList.ToArray());

                // Display the results.
                if (retVal != null && retVal.value != null && retVal.value.Length > 0)
                {
                    AdGroupAd pausedAdGroupAd = retVal.value[0];
                }
                else
                {
                    Console.WriteLine("No ads were paused.");
                }
            }
            catch (Exception ex)
            {
                throw new System.ApplicationException("Failed to pause ad.", ex);
            }

 

広告のステータスを確認する

無事に変更できているかAdwordsの管理画面から確認してみましょう。
こちらが実行前のステータス。
広告_実施前

こちらが実行後のステータスです。
広告_実施後

ステータスが変わり「雨の日」ラベルの広告が有効になっていることが分かりますね。

最後に

今回はラベルを使って広告文を切り替える方法をご紹介しました。
この方法は広告パラメータを使用した方法と比べて2つのメリットがあります。

広告文を全体的に変更できる

前回は「生ビール400円」⇒「生ビール200円」の変更しか出来ませんでしたが、今回は「雨の日限定!生ビール半額200円で提供中」と、価格雨の日限定をより訴求できる広告文に変更することができました。

運用情報を別々に管理できる

今回、雨の日と雨の日以外で2種類の広告を作成しました。

これにより広告の効果を別々に測定することができ、それぞれの広告に対して分析を行いPDCAを回していくことができるようになりました。

広告パラメータを使った方法と、今回ご紹介した方法はそれぞれ使い勝手が異なります。状況に応じてそれぞれを使い分けていくことでよりきめ細かい広告配信をしていきましょう。

アクシスでは天気に合わせたきめ細かい広告運用も対応しています!

リスティング広告運用代行

集客やサイト改善などWebに関することなら、
何でもお気軽にお問い合わせください

ウェブ集客のご相談、見積り依頼などは、こちらからお問い合わせください

ご相談・お問い合わせ

サービスや実績などをまとめた会社案内は、こちらからダウンロードできます

会社資料ダウンロード

お急ぎの方はお電話でも相談いただけます

0120-439-241