top of page

【AS】キャンペーン予算自動更新

お疲れ様です。

昨日買った、賛否両論の新調スーツに合う靴とベルトと鞄を買いました。

合計30,000円でございます。

めっちゃかっこいいけど、自身がまったく追いついていないという

まさに、猫に小判状態。

使い方あってますかね。。。

最近は日本語の使い方を指導されるという小学生レベルの日本語力のわたくしでございますが、

今回は、Adwords、キャンペーン予算を自動更新してくださるScriptをご紹介します。

いつも、unityでお世話になっているQiita様が、ASの解説もしてくださってました。

【http://qiita.com/1987yama3/items/54d82866e51cf1872ba3】

結論何をするScriptかというと、スプレッドシートにある指定の予算額に自動で更新してくれる

というトンデモ機能です。これでAdwordsに限っては予算の管理が相当楽になるはずです。

土日にシステムに触れないので、思いもよらぬ消化や、金曜日の変更に消化が対応できているか

心配事が多いリスティング運用者ですが、少し心配の種が解消できそうです。

あとは、プログラムが誤作動を起こしていないか、逐一確認しなければなりませんが。

適当にこんな表を作ってあげましょう。

残り日数から、キャンペーンの日当たり消化額を計算しています。

もちろん、今月消化は、先日紹介した月次レポート自動出力によって自動で更新

してくださいね♡

【Script解説】

var GOOGLE_DOCS_SPREAD_SHEET_KEY = '【スプレッドシートのキーを記載】';

//URL指定でもいいですが、

//https://docs.google.com/spreadsheets/d/【1xdYucpkjxVvV32GD928yWcJD3SziLfnT9KymLaicxs8】/edit#gid=0

//URLの【】内をIDキーとして、それを読み取ります。

var SHEET_NAME = '【読み取り先シート名を記載】’;

var EXECUTION_LOG = [];

function main() {

var date = new Date();

// new Date()で最新の日付を取得できます。dateに代入で、のちの処理の準備

var budget_data = getBudgetDataFromSpreadsheet(date, GOOGLE_DOCS_SPREAD_SHEET_KEY, SHEET_NAME);

log(budget_data.length + "件のキャンペーンの予算データを更新します。");

//logをいれておくと、スクリプト画面のログにデバックを表示してくれます。

//うまく作動しなくなった時に、記述できるようにしておくといいですね。

update(budget_data);

}

function update(budget_data) { for (var i = 0; i < budget_data.length; i++) { setCampaignBudget(budget_data[i][1], budget_data[i][5]); }

//budget_data[行][列]でどこを読み取るか指定できます。

//第一変数はキャンペーン名、第二変数は予算をしていいます。

//A~から0から数えていますので、BとFは1と5を指定します。

//AWQLについては、Googleのヘルプを参照です。

//【https://developers.google.com/adwords/scripts/docs/examples/budgets】

//setCampaignBudget()など、特有のメソッドがあるので、そこらへんは暗記できると、やれることも増えそうですね。

//

}

function formatDate(d) { return Utilities.formatDate(d, "Asia/Tokyo", "yyyy/MM/dd"); }

function getBudgetDataFromSpreadsheet(date, sheet_id, sheet_name) { var sheet = SpreadsheetApp.openById(sheet_id).getSheetByName(sheet_name); var lastRow = sheet.getLastRow(); var data = sheet.getDataRange().getValues(); var results = []; for (var i = 1; i < data.length; i++) { try { if (formatDate(data[i][0]) == formatDate(date)) { results.push(data[i]); }

//日付が一致した時、データを読み取ります。

} catch (ex) { log("スプレッドシートの" + (i + 1) + "行目のデータを取得する際にエラーが発生しました。日付のフォーマットをご確認ください。"); } } return results; }

function setCampaignBudget(campaignName, budget) { var campaignIterator = AdWordsApp.campaigns().withCondition('Name = "' + campaignName + '"').get(); if (campaignIterator.hasNext()) { var campaign = campaignIterator.next(); if (budget <= 0) { campaign.pause(); log("キャンペーンの停止:name = " + campaign.getName() + "(停止理由:設定された予算が0円以下のため)");

//予算が0以下だった場合、キャンペーンをストップします。

//0以下の状態になってしまった時点で、やばい状況でしょうから、ならないようにCPCの管理は別途しましょう。

} else { campaign.enable(); campaign.getBudget().setAmount(budget); log("【予算の自動変更】 Campaign with name = " + campaign.getName() + " has budget " + campaign.getBudget().getAmount());

//0以上の時は、その指定の数値を代入します。

} } else { log("指定されたキャンペーン(" + campaignName + ") が見つかりません。名称を確認してください。"); } }

function log(message) { Logger.log(message); EXECUTION_LOG.push(message); }

こんな感じですかね。

まぁ使っていくうちに、自分で微調整は必要そうです。

少なくとも私には日付で条件指定する必要はないので。

ではでは。

bottom of page