ブログ

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

2015.02.27

今回は、Adwords APIを使って天候に合わせて広告を配信する仕組みをお伝えします。

Adwordsの管理画面では使えず、AdwordsAPIにしかない機能に「広告パラメータ」というものがあります。

 

広告パラメータを利用すると、テキスト広告の履歴や統計情報はそのままで、広告内の広告文を変更できるようになります。

今回はこの広告パラメータと、気象情報を配信しているOpenWeatherMapのAPIを組み合わせて、当日の天気に合わせた広告文を配信する仕組みを作ってみたいと思います。

 

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

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

OpenWeatherMapとは?

OpenweatherMap
http://openweathermap.org/
OpenWeatherMapは各種気象データを無料APIで提供しているオンラインサービスです。

Webサイトからも気象データを確認することが出来て、「gifu-shi」と入力して検索すると、

OpenweatherMap2

検索結果が表示されるので、「Gifu-shi, JP」のリンクをクリックすると、

OpenweatherMap3追記

岐阜県岐阜市の現在の気象情報を確認することが出来ます。

OpenweatherMap4

今回はこちらのサービスのAPIを利用して、Adwords APIと連携してみたいと思います。

OpenWeatherMap APIに対して以下のようにリクエストすると
http://api.openweathermap.org/data/2.5/weather?id=1849708

岐阜県岐阜市の当日の天気を含む気象情報がJSON形式で返ってきます。

{
"coord":{"lon":136.77,"lat":35.42},
"sys":{"message":0.0247,"country":"JP","sunrise":1424813266,"sunset":1424853853},
"weather":[{"id":802,"main":"Clouds","description":"scattered clouds","icon":"03d"}],
"base":"cmc stations",
"main":{"temp":281.835,"temp_min":281.835,"temp_max":281.835,"pressure":1005.06,"sea_level":1033.93,"grnd_level":1005.06,"humidity":85},
"wind":{"speed":2.05,"deg":324.501},
"clouds":{"all":32},
"dt":1424838585,
"id":1849708,
"name":"Tsukasamachi",
"cod":200
}

今回使いたいのは「weather=>main」に格納されている天気なのでこれだけですが、それ以外にも気温や風など色々取得できます。(APIの仕様についてはこちらを参照。)

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

広告の準備

まずは配信する広告をAdwordsの管理画面から作成します。

管理画面

タイトルと広告文の1行目は普通の広告と同じですね。広告文の2行目「{param1:400}」と「{param2:1500}」これが広告パラメータです。

 

「param1」「param2」はそれぞれ1番目、2番目の広告パラメータという意味です。

「:(コロン)」以降の数値は初期値です。広告パラメータを使って値をセットしない場合に表示される数値になります。

このまま配信するとこんな感じになります。

defaultAd
生ビールともつ鍋ピザの値段が初期値で表示されているのがわかりますね。

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

では実際に天気を取得していきます。

下準備として、取得した結果がJSON形式のままだと扱いづらいのでデシリアライズ化するために受け皿としてDtoクラスを用意しておきます。

[DataContract]
public class ResponceJson
{
    [DataMember]
    public Weather[] weather { get; set; }
}

[DataContract]
public class Weather
{
    [DataMember]
    public String main { get; set; }
}

今回使いたいのは「weather=>main」に格納されている天気情報。

続いて、岐阜県岐阜市の現在の天気を取得します。
リクエストはSystem.Net.Http.HttpClientを使用。

string weather = ""; //天気
int nama = 400;      //生ビール通常価格400円

using (HttpClient httpClient = new HttpClient())
using (HttpResponseMessage response = await httpClient.GetAsync("http://api.openweathermap.org/data/2.5/weather?id=1849708"))
using (Stream sr = await response.Content.ReadAsStreamAsync())
{
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(ResponceJson));
    ResponceJson dto = (ResponceJson)serializer.ReadObject(sr);

    //レスポンスから天気の情報を取り出す。
    weather = dto.weather[0].main;
}

//雨の日は生ビール半額
if (weather == "Rain") nama /= 2;

天気が雨(Rain)だったら生ビールを半額にする。

Adwords APIを使って広告パラメータを送信する

続いて、先ほど変更した生ビールの価格を広告パラメータにセットしてAdwordsに送信します。

Adwords APIで使うのはv201409のAdParamServiceです。

AdWordsUser user = new AdWordsUser();
AdParamService adParamService = (AdParamService)user.GetService(AdWordsService.v201409.AdParamService);

//広告パラメータとして送信する内容を設定する。
AdParam priceParam = new AdParam();
priceParam.adGroupId = adGroupId;            //広告グループIDを設定
priceParam.criterionId = criterionId;        //キーワードIDを設定
priceParam.paramIndex = 1;                   //1だとparam1にセット。2だとparam2にセット。
priceParam.insertionText = nama.ToString();  //生ビールの価格

AdParamOperation priceOperation = new AdParamOperation();
priceOperation.@operator = Operator.SET;
priceOperation.operand = priceParam;

try
{
    // 広告パラメータを送信
    AdParam[] newAdParams = adParamService.mutate(new AdParamOperation[] { priceOperation });

    // Display the results.
    if (newAdParams != null)
    {
        Console.WriteLine("Ad parameters were successfully updated.");
    }
    else
    {
        Console.WriteLine("No ad parameters were set.");
    }
}
catch (Exception ex)
{
    throw new System.ApplicationException("例外エラー", ex);
}

 

配信された広告を確認してみる

実際に広告パラメータを送信した広告を確認してみましょう。

rainAd

生ビールの値段が変わった!

後はこれを定期的に実行することでお天気に合わせた広告配信の完成です。

これで天気に合わせたきめ細かい広告配信が出来ますね。

最後に

今回使った広告パラメータには以下の制限があります。

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

意外と自由度が低いですね。

 

「生ビール400円」⇒「生ビール200円」としか変更できませんでした。

今回のケースなどでは、もっとインパクトのある広告に変更したいなと思っちゃいます。

例えば、生ビール半額を押し出した「雨の日限定!生ビール半額200円」とかでしょうか。

 

本来、広告パラメータはバックヤードの在庫に合わせて数量や割引率を変更するといった用途を想定していると思われるのでしょうがないのかもしれません。

そこで次回は、広告パラメータを使わずに広告文を切り替える方法をご紹介したいと思います。

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

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

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

ご相談・お問い合わせ

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

会社資料ダウンロード

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

0120-439-241