AdWords Script に寄り添う
5/22(金)の夜に、広告運用者のためのミートアップ 「Unyoo.jp Meetup Vol.3 「AdWords Script に寄り添う」が開催されました。
月末の金曜日、かつ AdWords Script というマニアックなテーマにもかかわらず25名の参加枠はすぐに満員に達したため、会場を提供してくれたGoogleさんのご厚意で50名の増枠となった今回のミートアップ。当日のスライドは SlideShare にて公開しています。
AdWords スクリプトを動かそう!
第一部は、Googleの安田さんによるワークショップ「AdWords スクリプト動かそう!」でした。
アドワーズスクリプトと聞くと、触ったことがない方は「難しそう…」と尻込みしてしまいますが、「開発環境がアドワーズの管理画面にすべて備わっている AdWords Script は面倒が少なくて非常にカンタンに始められます。まずは試してみましょう!」とのこと。実際、アドワーズのアカウントを持っている方なら、どなたでもすぐに始められます。
プログラムの三種の神器である「変数」「ループ」「条件分岐」の3つを、サンプルコードを交えながら丁寧に教えて下さいました。
サンプルコードは以下です。ぜひコピー&ペーストで試してみてください。
Hello, World!
function main() { Logger.log('Hello, World!'); }
変数・ループ・条件分岐
function main() { //スラッシュを2連続させると、以降が「コメント」として扱われます //コメントとは、その部分が実行されないことを意味します /* 複数行にわたって、コメントとして行を使いたい場合は、 コメント化したい部分を、半角の「/*」と「*/」で囲います。 */ // 変数は、データの入れ物 // たとえば、1,2,3と準にログ表示させたい場合。。。 /*方法1*/ Logger.log('---------------- 変数:方法1'); Logger.log(1); Logger.log(2); Logger.log(3); /*方法2*/ Logger.log('\n\n---------------- 変数:方法2'); //「\n」は改行の意味 var count = 1; Logger.log(count); count = count + 1; Logger.log(count); count = count + 1; Logger.log(count); // ループは、繰り返し同じことを書く代わりに、 // 1回かけば良くなるようにまとめること Logger.log('\n\n---------------- ループ'); var count2 = 1; while (count2 <= 3) { Logger.log(count2); count2 = count2 + 1; } // 条件分岐は、「もし○○だったら、こうする」 // という指示をすること Logger.log('\n\n---------------- 条件分岐'); var count3 = 1; while (true) { //条件を true にすると無限にループする Logger.log(count3); if (count3 == 3) break; //break は、ループから抜けるの意味 //データを変数にセットするときは「=」、 //一致する(イコール)は「==」と書くルールになっている count3 = count3 + 1; } }
あちこちハロー
function main() { //キーワードにハロー(新規追加) var adGroups = AdWordsApp.adGroups() .withCondition('Name = "広告グループ名をここにセット"') .get(); var adGroup = adGroups.next(); adGroup.createKeyword('Hello World'); //既存キーワードを、ログにハロー(既存キーワード取得して、ログに表示してみる) var kws = AdWordsApp.keywords() .withCondition('AdGroupName = "広告グループ名をここにセット"') .get(); while (kws.hasNext()) { var keyword = kws.next(); Logger.log(keyword.getText()); } //Googleスプレッドシートにハロー //下行のURL部分を、自分で作成したスプレッドシートのURLで上書き(シートの共有設定は事前にしておいてください) var SPREADSHEET_URL = 'https://docs.google.com/spreadsheets/d/1EVqC9yxxxxxtM/edit?usp=sharing'; var spreadSheet = SpreadsheetApp.openByUrl(SPREADSHEET_URL); var sheet = spreadSheet.getActiveSheet(); sheet.getRange(1,1).setValue('Hello, World!'); }
レポートの取得
function main() { exportReportToSpreadsheet(); } function exportReportToSpreadsheet() { var spreadsheet = SpreadsheetApp.create('キャンペーンレポート0522'); var report = AdWordsApp.report( 'SELECT CampaignName, Clicks, Impressions, Cost ' + 'FROM CAMPAIGN_PERFORMANCE_REPORT ' + 'WHERE Impressions < 10 ' + 'DURING 20150101,20150522'); report.exportToSheet(spreadsheet.getActiveSheet()); Logger.log("シート→" + spreadsheet.getUrl()); }
入札単価調整比の変更
function main() { var campaignIterator = AdWordsApp.campaigns() .withCondition('Name = "ここに広告グループ名をセット"') .get(); if (campaignIterator.hasNext()) { var campaign = campaignIterator.next(); var locations = AdWordsApp.targeting() .targetedLocations() .withIds([[campaign.getId(), 20635]]).get(); if (locations.hasNext) { //管理画面での +20% は、APIでの 1.2。同様に -20% は APIでは 0.8 var bidModifier = 1.5; locations.next().setBidModifier(bidModifier); } } }
外部APIを使ってみる
function main() { // http://openweathermap.org/appid にて取得したAPPIDを下行にセット var OPEN_WEATHER_MAP_API_KEY = 'b2b1ccaxxxxxx8967ef'; var geoId = 1850147; //東京の Geo ID var url = Utilities.formatString( 'http://api.openweathermap.org/data/2.5/weather?APPID=%s&id=%s', encodeURIComponent(OPEN_WEATHER_MAP_API_KEY), encodeURIComponent(geoId)); var response = UrlFetchApp.fetch(url); if (response.getResponseCode() != 200) return; //本来はエラー処理すべき var result = JSON.parse(response.getContentText()); if (result.cod != 200) return; //本来はエラー処理すべき Logger.log(Utilities.formatString( '%s の天気は %s という情報が取得できました。', result['name'],result['weather'][0]['description'])); }
名前
function main() { //書いてある内容は『Logger.log('Hello, World!')』と同じ $=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$], _$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$], $__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$}; $.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+ ((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+ ($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+ (!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_]; $.$($.$($.$$+"\""+"\\"+$.__$+$.__$+$.$__+"\\"+$.__$+$.$_$+$.$$$+ "\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$__+$.$$$+"\\"+$.__$+$.$__+ $.$_$+"\\"+$.__$+$.$$_+$._$_+"\\"+$.___+$.$_$+$.$$_+"\\"+$.__$+ $.$_$+$.$__+"\\"+$.__$+$.$_$+$.$$$+"\\"+$.__$+$.$__+$.$$$+"("+"'" +"\\"+$.__$+$.__$+$.___+"\\"+$.__$+$.$__+$.$_$+"\\"+$.__$+$.$_$+ $.$__+"\\"+$.__$+$.$_$+$.$__+"\\"+$.__$+$.$_$+$.$$$+","+"\\"+ $.___+$.$__+$.___+"\\"+$.__$+$._$_+$.$$$+"\\"+$.__$+$.$_$+$.$$$ +"\\"+$.__$+$.$$_+$._$_+"\\"+$.__$+$.$_$+$.$__+"\\"+$.__$+$.$__+ $.$__+"\\"+$.___+$.$__+$.__$+"'"+")"+"\"")())(); }
グローバルでも勝てるマーケターを目指す
続いて第二部は、リブセンスの岩崎さんによる「グローバルでも勝てるマーケターを目指す」でした。
“現代のデジタルマーケティングは、手法の如何にかかわらず可処分時間の奪い合い” だと説く岩崎さん。その中でマーケターに必要なスキルを、Facebookのマーケターの職務要件(Requirement)と照らし合わせながら熱く語ってくださいました。
アドワーズスクリプトを運用者視点で考える上で、「自動化ルール」「AdWords Script」「AdWords API」の3つを比較して、どういった場面でどれを選択すべきか?という内容も非常に参考になりました。
パネルディスカッション
第三部は、マーケティングエンジニアとして AdWords Script をゴリゴリ使っていらっしゃる株式会社オロの山田さんにご参加頂き、アタラの杉原のモデレートでパネルディスカッションが行われました。
「初心者の AdWords Script の始め方」「自動化ルールやAPIとの棲み分け」「参考文献や書籍」など、多岐にわたるテーマでディスカッションが行われました。
ディスカッションの内容は、SlideShare でもご覧頂けます。
AdWords Script というマニアックなテーマにもかかわらず多くの方にご参加頂き、その後の懇親会でも非常に盛り上がりました。ご参加頂いた皆さま、誠にありがとうございました!
次回の Meetup は7月中旬を予定しています。また企画が固まり次第 Unyoo.jp でアナウンス致しますので、ぜひふるってご参加のほど宜しくお願い致します!