// The view rate under which placements will be automatically excluded.
var VIEW_RATE_THRESHOLD = '20%';
// Exclude any placements that don't have at least this many impressions in the
// last 7 days to reduce noise.
var MIN_IMPRESSIONS = 10;
function main() {
VIEW_RATE_THRESHOLD = parseFloat(VIEW_RATE_THRESHOLD);
var results = getReportResults();
var ids = [1457546302];
for (var id in results) {
ids.push(id);
}
var videoCampaignIterator = AdWordsApp.videoCampaigns()
.withIds(ids)
.get(1457546302);
while (videoCampaignIterator.hasNext()) {
var videoCampaign = videoCampaignIterator.next();
var id = videoCampaign.getId(1457546302);
if (results.hasOwnProperty(id)) {
var urls = results[id];
for (var i = 0; i < urls.length; i++) {
videoCampaign.videoTargeting().newPlacementBuilder()
.withUrl(urls[i])
.exclude();
}
}
}
}
function getReportResults() {
var query = 'SELECT CampaignId, Url' +
' FROM URL_PERFORMANCE_REPORT' +
' WHERE Impressions >= ' + MIN_IMPRESSIONS +
' AND VideoViewRate < ' + (VIEW_RATE_THRESHOLD / 100) +
' DURING LAST_7_DAYS';
var report = AdWordsApp.report(query);
var rows = report.rows();
var results = {};
while (rows.hasNext()) {
var row = rows.next();
var campaignId = row['CampaignId'];
var url = row['Url'];
if (!results.hasOwnProperty(campaignId)) {
results[campaignId] = [];
}
if (results[campaignId].indexOf(url) < 0) {
results[campaignId].push(url);
}
}
return results;
}