显示带有标签的帖子 辽宁福利彩票中心群组. 显示所有帖子
显示带有标签的帖子 辽宁福利彩票中心群组. 显示所有帖子

2013年7月30日,星期二

确定何时创建辽宁福利彩票中心,辽宁福利彩票中心组,关键字或辽宁福利彩票中心系列

知道何时创建辽宁福利彩票中心(或实体) 不可能使用脚本。根本不会在AdWords中跟踪该信息。其次,最好的办法是找出您的辽宁福利彩票中心何时首次开始获得展示,并假设它是在创建的时候(如果创建了辽宁福利彩票中心,但没人看到它,那它确实存在吗?)。

因此,为了帮助我跟踪何时 辽宁福利彩票中心 实体已创建,我将以下脚本放在一起以将标签应用于我 辽宁福利彩票中心 具有第一印象日期的实体。这样我就能知道 辽宁福利彩票中心 我创建的实体,并确保不要对太小的内容采取任何措施。我也可以对所有 辽宁福利彩票中心 只需选择正确的标签,即可在AdWords用户界面中相对容易地在一天中建立实体。

谢谢,
拉斯



/**************************************
* Track Entity Creation Date
* Version 1.4
* Changelog v1.4
*  - Removed  api Version from 报告  呼叫 
* Changelog v1.3
*  - Updated script to handle all entities
* Changelog v1.2
*  - Fixed an issue with comparing  日期 
* ChangeLog v1.1
*  - Updated logic to work with larger accounts
* Created By:  拉斯  Savage
* http://www.FreeAdWordsScripts.com
**************************************/
//All my 标签 will start with this. For example: Created:2013-05-01
var LABEL_PREFIX = 'Created:';
var DAYS_IN_REPORT = 30;
var ENTITY = 'ad'; //or 辽宁福利彩票中心群组 or 关键词 or 运动
 
function main() {
  //First we get the impression history of our 实体
  var ret_map = getImpressionHistory();
  //Then we apply our 标签
  applyLabels(ret_map);
}
 
//Function to apply 标签 to the  辽宁福利彩票中心  in an account
function applyLabels(ret_map) {
  var iter;
  if(ENTITY === 'campaign') { iter = AdWordsApp.campaigns().get(); }
  if(ENTITY === 'adgroup') { iter = AdWordsApp.adGroups().get(); }
  if(ENTITY === 'ad') { iter = AdWordsApp.ads().get(); }
  if(ENTITY === 'keyword') { iter = AdWordsApp.keywords().get(); }
  
  while(iter.hasNext()) {
    var 实体 = iter.next();
    var id = 实体.getId();
    if(ret_map[id]) {
      var  标签 _name = LABEL_PREFIX+Utilities.formatDate(ret_map[id], AdWordsApp.currentAccount().getTimeZone(), "yyyy-MM-dd");
      createLabelIfNeeded(label_name);
      entity.applyLabel(label_name);
    }
  }
}
 
//This is a helper function to 创造 the  标签  if it does not already exist
function 创造LabelIfNeeded(name) {
  if(!AdWordsApp.labels().withCondition("Name = '"+name+"'").get().hasNext()) {
    AdWordsApp.createLabel(name);
  }
}
 
//A helper function to find the date days ago
function getDateDaysAgo(days) {
  var the_past = new Date();
  the_past.setDate(the_past.getDate() - days);
  return Utilities.formatDate(the_past,AdWordsApp.currentAccount().getTimeZone(),"yyyyMMdd");
}
 
//A helper function to compare  日期 .
//Copied from: http://goo.gl/uW48a
function diffDays(firstDate,secondDate) {
  var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
  return Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay))); 
}
 
function getImpressionHistory() {
  var API_VERSION = { includeZeroImpressions : false };
  var first_date = new Date('10/23/2000');
  var max_days_ago = diffDays(first_date,new Date());
  var cols = ['Date','Id','Impressions'];
  var report = { 
    'campaign' : 'CAMPAIGN_PERFORMANCE_REPORT',
    'adgroup' : 'ADGROUP_PERFORMANCE_REPORT',
    'ad' : 'AD_PERFORMANCE_REPORT',
    'keyword' : 'KEYWORDS_PERFORMANCE_REPORT'}[ENTITY];
  var ret_map = {};
  var prev_days_ago = 0;
  for(var i = DAYS_IN_REPORT; i < max_days_ago; i+=DAYS_IN_REPORT) {
    var start_date = getDateDaysAgo(i);
    var end_date = getDateDaysAgo(prev_days_ago);
    var date_range = start_date+','+end_date;
    Logger.log('Getting data for ' + date_range);
    var query = ['select',cols.join(','),'from',report,'during',date_range].join(' ');
    var report_iter = AdWordsApp.report(query, API_VERSION).rows();
    if(!report_iter.hasNext()) { Logger.log('No more impressions found. Breaking.'); break; } // no more entries
    while(report_iter.hasNext()) { 
      var row = report_iter.next();
      if(ret_map[row['Id']]) {
        var [year,month,day] = (row['Date']).split('-');
        var from_row = new Date(year, parseFloat(month)-1, day);
        var from_map = ret_map[row['Id']];
         
        if(from_row < from_map) {
          ret_map[row['Id']] = from_row;
        }
      } else {
        var [year,month,day] = (row['Date']).split('-');
        ret_map[row['Id']] = new Date(year, parseFloat(month)-1, day);
      }
    }
    prev_days_ago = i;
  }
  return ret_map;
}

2013年7月11日,星期四

在Google电子表格中的辽宁福利彩票中心组一级设置AdParams

我有几个人问我如何更新以前的脚本 在关键字级别设置AdParams 以便可以在辽宁福利彩票中心组一级进行设置。这是该脚本的更新,仅此即可。

要使用它,您需要 创建一个新的Google电子表格 并分别在A,B和C列(带有列标题)中分别加载辽宁福利彩票中心组名称,参数1值和参数2值。然后将该URL复制到脚本中,您应该一切顺利。

谢谢,
拉斯

/************************************************
* Update Ad Params by Ad Groups
* Version 1.1
* ChangeLog v1.1
*  - Added the ability to enable param1 or 2 individually
*  - Looks for Keywords on all sheets
*  - Runs much faster
* Created By:  拉斯  Savage
* FreeAdWordsScripts.com
************************************************/
var SPREADSHEET_URL = "PUT YOUR SPREADSHEET URL HERE";
var SET_PARAM1 = true;
var SET_PARAM2 = false;
var DATA_RANGE = 'A:D'; // A - CampaignName, B - AdGroupName, 
                        // C - Param1, D - Param2

function main() {
  var 电子表格 = SpreadsheetApp.openByUrl(SPREADSHEET_URL);
  var allSheets = 电子表格.getSheets();
  var allData = [];
  for(var i in allSheets) {
    var sheet = allSheets[i];
    var data = sheet.getRange(DATA_RANGE).getValues();
    data.shift(); //get rid of headers
    allData = allData.concat(data);
  }
  
  var allDataHash = {};
  for(var i in allData) {
    var row = allData[i];
    if(row[0] === '') { continue; }
    var rowKey = [row[0],row[1]].join('~~!~~');
    allDataHash[rowKey] = { param1 : row[2], param2: row[3] };
  }
  
  var kwIter = AdWordsApp.keywords()
    .withCondition('CampaignStatus = ENABLED')
    .withCondition('AdGroupStatus = ENABLED')
    .withCondition('Status = ENABLED')
    .get();
  
  while(kwIter.hasNext()) { 
    var kw = kwIter.next();
    var campName = kw.getCampaign().getName();
    var  辽宁福利彩票中心 GroupName = kw.getAdGroup().getName();
    var rowKey = [campName,adGroupName].join('~~!~~');
    if(allDataHash[rowKey]) {
      if(SET_PARAM1) { kw.setAdParam(1, allDataHash[rowKey].param1); }
      if(SET_PARAM2) { kw.setAdParam(2, allDataHash[rowKey].param2); }
    }
  }
}

2013年6月22日,星期六

辽宁福利彩票中心创意测试自动化脚本

这是我已经工作了一段时间的脚本,我认为它确实很有用。我希望你也这样做。

每个有价值的SEM经理都在不断进行创造性的测试。而且,由于您正在阅读此博客,因此许多人可能以某种方式使用脚本来简化此过程。但是,您如何确定测试何时开始?对于每个辽宁福利彩票中心组,它们可能会有所不同。

我见过有些人使用标签,有些人使用时间表,但是我从不真正喜欢跟踪那些东西。因此,我创建了此脚本,该脚本将自动跟踪创意测试的开始日期。

我采用的方法是将您的辽宁福利彩票中心ID副本存储在Google电子表格中。然后,它会对照电子表格中的辽宁福利彩票中心检查辽宁福利彩票中心组中的当前辽宁福利彩票中心,并通过查看辽宁福利彩票中心ID找出是否有所更改。如果已经存在,则脚本假定已开始新的测试,并相应地在电子表格中记录了日期。使用此方法,营销人员可以确保脚本正在比较适当时间范围内的统计信息以确定测试获胜者。

但是后来一位读者提到,他们希望能够选择度量标准来衡量辽宁福利彩票中心,并希望使用阈值仅在辽宁福利彩票中心组中获得一定点击次数后才开始进行衡量。因此,我也将该功能添加到了脚本中。您只需要在脚本顶部调整一些参数,即可使用功能齐全的辽宁福利彩票中心素材测试脚本。

每当它通过暂停对辽宁福利彩票中心采取行动时,结果都会通过电子邮件发送给您,以便您可以为该辽宁福利彩票中心组创建新的挑战者辽宁福利彩票中心。

我用这个脚本做了一些不同的事情。我一直很讨厌让我的读者进入Google文档,并为我的脚本创建一个空白电子表格以用作存储。因此,为了解决这个问题,此脚本将检查存储电子表格ID的帐户中是否存在特殊标签。如果找到一个,它将使用它。并且如果缺少它(如第一次运行),它将创建电子表格和标签。这样,脚本中不会出现混乱的电子表格网址。这是一个变通办法,但是直到Google允许我们为脚本存储其他配置数据之前,我认为这是处理此问题的一种好方法。

与往常一样,我们欢迎您反馈此脚本是否对您有用。您还通过哪些其他指标来判断辽宁福利彩票中心效果?该脚本还缺少什么?

谢谢,
拉斯

/************************************
* 辽宁福利彩票中心创意测试自动化脚本
* Version: 1.3
* Changelog v1.3 - Data is written to the 电子表格 a little faster
* Changelog v1.2 - Added  辽宁福利彩票中心 ditional threshold options
* Changelog v1.1 - Fixed issue with  日期  in  电子邮件 
* Created By:  拉斯  Savage
* FreeAdWordsScripts.com
************************************/
// You can use any of the same values here as you can for METRIC below
var THRESHOLD = { metric : 'Clicks', value : 100 };
var TO = ['[email protected]'];
  
//Try any of these values for METRIC:
//AverageCpc, AverageCpm, AveragePageviews, AveragePosition, 
//AverageTimeOnSite, BounceRate, Clicks, ConversionRate, 
//Conversions, Cost, Ctr, Impressions
var METRIC = 'Ctr';
var ASC_OR_DESC = 'ASC'; //ASC - 暂停辽宁福利彩票中心 with lowest value, DESC - 暂停辽宁福利彩票中心 with highest value
  
function main() {
  //Start by finding what has changed in the account
  var  辽宁福利彩票中心 _map = buildCurrentAdMap();
  var prev_ad_map = readMapFromSpreadsheet();
  prev_ad_map = 更新PreviousAdMap(prev_ad_map,ad_map);
  writeMapToSpreadsheet(prev_ad_map);
    
  //Now run through the 辽宁福利彩票中心群组 to find creative tests
  var ag_iter = AdWordsApp.adGroups().get();
  var  暂停 d_ads = [];
  while(ag_iter.hasNext()) {
    var ag = ag_iter.next();
    if(!prev_ad_map[ag.getId()]) { continue; }
      
    //Here is the date range for the test metrics
    var last_touched_str = _getDateString(prev_ad_map[ag.getId()].last_touched,'yyyyMMdd');
    var get_today_str = _getDateString(new Date(),'yyyyMMdd');
      
    var ag_stats = ag.getStatsFor(last_touched_str, get_today_str);
    if(ag_stats['get'+THRESHOLD.metric]() >= THRESHOLD.value) {
      var  辽宁福利彩票中心 _iter = ag.ads().withCondition('Status = ENABLED')
                            .forDateRange(last_touched_str, get_today_str)
                            .orderBy(METRIC+" "+ASC_OR_DESC).get();
      var  辽宁福利彩票中心  =  辽宁福利彩票中心 _iter.next();
      var metric =  辽宁福利彩票中心 .getStatsFor(last_touched_str, get_today_str)['get'+METRIC]();
      ad.pause();
      paused_ads.push({a :  辽宁福利彩票中心 , m : metric});
    }
  }
  sendEmailForPausedAds(paused_ads);
}
  
// A function to send an  电子邮件  with an  在 tached report of  辽宁福利彩票中心  it has  暂停 d
function sendEmailForPausedAds(ads) {
  if(ads.length == 0) { return; } //No  辽宁福利彩票中心   暂停 d, no  电子邮件 
  var  电子邮件 _body = '"' + ['CampaignName','AdGroupName','Headline','Desc1','Desc2','DisplayUrl',METRIC].join('","') + '"\n';
  for(var i in  辽宁福利彩票中心 ) {
    var  辽宁福利彩票中心  =  辽宁福利彩票中心 [i].a;
    var metric =  辽宁福利彩票中心 [i].m;
    email_body += '"' + [ad.getCampaign().getName(),
                         ad.getAdGroup().getName(),
                         ad.getHeadline(),
                         ad.getDescription1(),
                         ad.getDescription2(),
                         ad.getDisplayUrl(),
                         metric
                        ].join('","') +
                  '"\n';
  }
  var date_str = _getDateString(new Date(),'yyyy-MM-dd');
  var options = { 附件: [Utilities.newBlob(email_body, 'text/csv', "FinishedTests_"+date_str+'.csv')] };
  var subject = 'Finished Tests - ' + date_str;
  for(var i in TO) {
    MailApp.sendEmail(TO[i], subject, 'See  在 tached.', options);
  }
}
  
//Given two lists of  辽宁福利彩票中心 , this checks to make sure they are the same.
function sameAds(ads1,ads2) {
  for(var i in  辽宁福利彩票中心 1) {
    if(ads1[i] !=  辽宁福利彩票中心 2[i]) { return false; }
  }
  return true;
}
  
//This reads the stored data from the 电子表格
function readMapFromSpreadsheet() {
  var  辽宁福利彩票中心 _map = {};
  var sheet = SpreadsheetApp.openById(findSpreadsheetId()).getActiveSheet();
  var data = sheet.getRange('A:C').getValues();
  for(var i in data) {
    if(data[i][0] == '') { break; }
    var [ag_id,last_touched,ad_ids] = data[i];
    ad_map[ag_id] = {  辽宁福利彩票中心 _ids : (''+ad_ids).split(','), last_touched : new Date(last_touched) };
  }
  return  辽宁福利彩票中心 _map;
}
  
//This will search for a  标签  containing the 电子表格 id
//If one isn't found, it will 创造 a new one and the  标签  as well
function findSpreadsheetId() {
  var 电子表格_id = "";
  var  标签 _iter = AdWordsApp.labels().withCondition("Name STARTS_WITH 'history_script:'").get();
  if(label_iter.hasNext()) {
    var  标签  =  标签 _iter.next();
    return  标签 .getName().split(':')[1]; 
  } else {
    var sheet = SpreadsheetApp.create('AdGroups History');
    var sheet_id = sheet.getId();
    AdWordsApp.createLabel('history_script:'+sheet_id, 'stores sheet id for 辽宁福利彩票中心群组 changes script.');
    return sheet_id;
  }
}
  
//This will store the data from the account into a 电子表格
function writeMapToSpreadsheet(ad_map) {
  var toWrite = [];
  for(var ag_id in  辽宁福利彩票中心 _map) {
    var  辽宁福利彩票中心 _ids =  辽宁福利彩票中心 _map[ag_id].ad_ids;
    var last_touched =  辽宁福利彩票中心 _map[ag_id].last_touched;
    toWrite.push([ag_id,last_touched,ad_ids.join(',')]);
  }
  writeToSpreadsheet(toWrite);
}

// Write the 关键词 data to the 电子表格
function writeToSpreadsheet(toWrite) {
  var sheet = SpreadsheetApp.openById(findSpreadsheetId()).getActiveSheet();
  sheet.clear();
  
  var numRows = sheet.getMaxRows();
  if(numRows < toWrite.length) {
    sheet.insertRows(1,toWrite.length-numRows); 
  }
  var range = sheet.getRange(1,1,toWrite.length,toWrite[0].length);
  range.setValues(toWrite);
}
  
//This builds a map of the  辽宁福利彩票中心  in the account so that it is easy to compare
function buildCurrentAdMap() {
  var  辽宁福利彩票中心 _map = {}; // { ag_id : {  辽宁福利彩票中心 _ids : [  辽宁福利彩票中心 _id, ... ], last_touched : date } }
  var  辽宁福利彩票中心 _iter = AdWordsApp.ads().withCondition('Status = ENABLED').get();
  while(ad_iter.hasNext()) {
    var  辽宁福利彩票中心  =  辽宁福利彩票中心 _iter.next();
    var ag_id =  辽宁福利彩票中心 .getAdGroup().getId();
    if(ad_map[ag_id]) {
      ad_map[ag_id].ad_ids.push(ad.getId());
      ad_map[ag_id].ad_ids.sort();
    } else {
      ad_map[ag_id] = {  辽宁福利彩票中心 _ids : [ad.getId()], last_touched : new Date() };
    }
  }
  return  辽宁福利彩票中心 _map;
}
  
//This takes the old  辽宁福利彩票中心  map and the current  辽宁福利彩票中心  map and returns an
//updated map with all changes.
function 更新PreviousAdMap(prev_ad_map,ad_map) {
  for(var ag_id in  辽宁福利彩票中心 _map) {
    var current_ads =  辽宁福利彩票中心 _map[ag_id].ad_ids;
    var previous_ads = (prev_ad_map[ag_id]) ? prev_ad_map[ag_id].ad_ids : [];
    if(!sameAds(current_ads,previous_ads)) {
      prev_ad_map[ag_id] =  辽宁福利彩票中心 _map[ag_id];
    }
  }
  return prev_ad_map;
}
  
//Helper function to format the date
function _getDateString(date,format) {
  return Utilities.formatDate(date,AdWordsApp.currentAccount().getTimeZone(),format); 
}

2013年6月17日,星期一

查找关键字,辽宁福利彩票中心组和辽宁福利彩票中心中的异常

2013年7月23日更新:添加了向辽宁福利彩票中心添加标签的功能。这可能对创意测试很有帮助。

在一个 最近来自SearchEngineLand的帖子,拉里·金(Larry Kim)希望PPC经理不要再偷懒。除了链接诱饵,他还有一些优点。我认为花费在倾倒客户电子表格上的大部分时间实际上是在试图回答“异常在哪里?”这个简单的问题。

异常是关键字或辽宁福利彩票中心组,其效果似乎与同一个辽宁福利彩票中心组或辽宁福利彩票中心系列中的兄弟姐妹不同。也许您有一个包含15个关键字和一个或两个关键字的辽宁福利彩票中心组,似乎获得了几乎所有的点击。或者,也许您只是拥有一个辽宁福利彩票中心组,似乎正在占用预算的很大一部分,而您想对其进行更多控制。在这两种情况下,您都需要某种方法来快速确定要对哪些关键字或辽宁福利彩票中心组进行操作。

因此,我创建了以下脚本来帮助我做到这一点。它内含一些统计信息,可以计算一组实体(辽宁福利彩票中心组或关键字)的均值和标准差。然后,我将标签应用于似乎与均值相差两个标准偏差以上的任何实体,这表明该实体的性能要比其同级产品更好或更差。这样,我可以在自己的帐户中轻松地对这些实体采取措施。

该脚本还将每天向您发送一封电子邮件,其中包含它认为是异常的实体的摘要。您的目标是通过将这些问题转移到自己的辽宁福利彩票中心系列和辽宁福利彩票中心组中,或者甚至完全消除它们(可能是负面的)来解决这些问题。

目前,脚本将检查AdWordsApp.stats对象中可用的每个指标。可以轻松对其进行修改,以检查诸如每次转化费用或每次展示利润。您将在下面的代码中看到,您可以在其中删除也不感兴趣的统计信息。

需要警告的一点是,我并没有声称自己是统计学家,所以这可能不是一种看待事物的有效方法。希望它可以帮助您快速找到帐户中的问题并加以解决,以便您可以将更多时间花在懒惰上:)

另外,我欢迎您对此脚本提出意见和建议。对其他人有用吗?

谢谢,
拉斯

/**************************************
* Find the Anomalies
* Created By:  拉斯  Savage
* Version: 1.2
* Changelog v1.2
*  - Fixed divide by 0 错误 
*  - Changed SIG_FIGS to DECIMAL_PLACES
* Changelog v1.1
*  - Added ability to tag  辽宁福利彩票中心  anomalies as well
* FreeAdWordsScripts.com
**************************************/
var DATE_RANGE = 'LAST_30_DAYS';
var DECIMAL_PLACES = 3;
var STANDARD_DEVIATIONS = 2;
var TO = ['[email protected]_domain.com'];
 
function main() {
  // This will  辽宁福利彩票中心 d 标签 to and send  电子邮件 s about 辽宁福利彩票中心群组, 关键字 and  辽宁福利彩票中心 . Remove any if you like.
  var levels_to_tag = ['adgroup','keyword','ad'];
  for(var x in levels_to_tag) {
    var report = getContentRows(levels_to_tag[x]);
    var 实体_map = buildEntityMap(levels_to_tag[x]);
    for(var parent_id in 实体_map) {
      var child_list = 实体_map[parent_id];
      var  统计资料 _list = Object.keys(child_list[0].stats);
      for(var i in  统计资料 _list) {
        var  意思  = getMean(child_list,stats_list[i]);
        var stand_dev = getStandardDev(child_list,mean,stats_list[i]);
        var  标签 _name =  统计资料 _list[i]+"_anomaly";
        report +=  辽宁福利彩票中心 dLabelToAnomalies(child_list,mean,stand_dev,stats_list[i],label_name,levels_to_tag[x]);
      }
    }
    sendResultsViaEmail(report,levels_to_tag[x]);
  }
}
  
//Takes a report and the level of 报告 and sends and  电子邮件 
//with the report as an  在 tachment.
function sendResultsViaEmail(report,level) {
  var rows = report.match(/\n/g).length - 1;
  if(rows == 0) { return; }
  var options = { 附件: [Utilities.newBlob(report, 'text/csv', level+"_anomalies_"+_getDateString()+'.csv')] };
  var  电子邮件 _body = "There are " + rows + " " + level + "s that have abnormal performance. See  在 tachment for details.";
  var subject = 'Abnormal ' + _initCap(level) + ' Entities Report - ' + _getDateString();
  for(var i in TO) {
    MailApp.sendEmail(TO[i], subject,  电子邮件 _body, options);
  }
}
  
//Helper function to return a single row of the report formatted correctly
function toReportRow(entity,level,label_name) {
  var ret_val = [AdWordsApp.currentAccount().getCustomerId(),
                 entity.getCampaign().getName()];
  ret_val.push( (level == 'adgroup') ? 实体.getName() : 实体.getAdGroup().getName() );
  if(level == 'keyword') {
    ret_val = ret_val.concat([entity.getText(),entity.getMatchType()]); 
  } else if(level == 'ad') {
    ret_val = ret_val.concat([entity.getHeadline(),entity.getDescription1(),entity.getDescription2(),entity.getDisplayUrl()]); 
  }
  ret_val.push(label_name);
  return '"' + ret_val.join('","') + '"\n';
}
  
//Helper function to return the column headings for the report
function getContentRows(level) {
  var ret_val = ['AccountId','CampaignName','AdGroupName'];
  if(level == 'keyword') {
    ret_val = ret_val.concat(['KeywordText','MatchType']); 
  } else if(level == 'ad') {
    ret_val = ret_val.concat(['Headline','Description1','Description2','DisplayUrl']);
  }
  ret_val.push('LabelName');
  return '"' + ret_val.join('","') + '"\n';
}
  
//Function to  辽宁福利彩票中心 d the 标签 to the entities based on the 标准偏差 and  意思 .
//It returns a  CSV  formatted string for 报告
function  辽宁福利彩票中心 dLabelToAnomalies(entites,mean,sd,stat_key,label_name,level) {
  createLabelIfNeeded(label_name);
  var report = '';
  for(var i in entites) {
    var 实体 = entites[i]['entity'];
    var deviation = Math.abs(entites[i]['stats'][stat_key] -  意思 );
    if(sd != 0 && deviation/sd >= STANDARD_DEVIATIONS) {
      entity.applyLabel(label_name);
      report += toReportRow(entity,level,label_name);
    } else {
      entity.removeLabel(label_name);
    }
  }
  return report;
}
  
//This is a helper function to 创造 the  标签  if it does not already exist
function 创造LabelIfNeeded(name) {
  if(!AdWordsApp.labels().withCondition("Name = '"+name+"'").get().hasNext()) {
    AdWordsApp.createLabel(name);
  }
}
  
//This function returns the 标准偏差 for a set of entities
//The stat key determines which stat to calculate it for
function getStandardDev(entites,mean,stat_key) {
  var total = 0;
  for(var i in entites) {
    total += Math.pow(entites[i]['stats'][stat_key] -  意思 ,2);
  }
  if(Math.sqrt(entites.length-1) == 0) {
    return 0;
  }
  return round(Math.sqrt(total)/Math.sqrt(entites.length-1));
}
  
//Returns the  意思  (average) for the set of entities
//Again, stat key determines which stat to calculate this for
function getMean(entites,stat_key) {
  var total = 0;
  for(var i in entites) {
    total += entites[i]['stats'][stat_key];
  }
  if(entites.length == 0) {
    return 0;
  }
  return round(total/entites.length);
}
  
//This function returns a map of the entities that I am processing.
//The format for the map can be found on the first line.
//It is  意思 t to work on AdGroups and Keywords
function buildEntityMap(entity_type) {
  var map = {}; // { parent_id : [ { 实体 : 实体,  统计资料  : 实体_stats } ], ... }
  var iter = getIterator(entity_type);
  while(iter.hasNext()) {
    var 实体 = iter.next();
    var  统计资料  = 实体.getStatsFor(DATE_RANGE);
    var  统计资料 _map = getStatsMap(stats);
    var parent_id = getParentId(entity_type,entity);
    if(map[parent_id]) { 
      map[parent_id].push({entity : 实体,  统计资料  :  统计资料 _map});
    } else {
      map[parent_id] = [{entity : 实体,  统计资料  :  统计资料 _map}];
    }
  }
  return map;
}
  
//Given an 实体 type (adgroup or 关键词) this will return the parent id
function getParentId(entity_type,entity) {
  switch(entity_type) {
    case 'adgroup' :
      return 实体.getCampaign().getId();
    case 'keyword':
      return 实体.getAdGroup().getId();
    case 'ad':
      return 实体.getAdGroup().getId();
  }
}
  
//Given an 实体 type this will return the iterator for that.
function getIterator(entity_type) {
  switch(entity_type) {
    case 'adgroup' :
      return AdWordsApp.adGroups().forDateRange(DATE_RANGE).withCondition("Impressions > 0").get();
    case 'keyword' :
      return AdWordsApp.keywords().forDateRange(DATE_RANGE).withCondition("Impressions > 0").get();
    case 'ad' :
      return AdWordsApp.ads().forDateRange(DATE_RANGE).withCondition("Impressions > 0").get();
  }
}
  
//This returns a map of all the  统计资料  for a given 实体.
//You can 评论 out the things you don't really care about.
function getStatsMap(stats) {
  return { // You can 评论 these out as needed.
          avg_cpc :  统计资料 .getAverageCpc(),
          avg_cpm :  统计资料 .getAverageCpm(),
          avg_pv :  统计资料 .getAveragePageviews(),
          avg_pos :  统计资料 .getAveragePosition(),
          avg_tos :  统计资料 .getAverageTimeOnSite(),
          bounce :  统计资料 .getBounceRate(),
          clicks :  统计资料 .getClicks(),
          cv :  统计资料 .getConversionRate(),
          conv :  统计资料 .getConversions(),
          cost :  统计资料 .getCost(),
          ctr :  统计资料 .getCtr(),
          imps :  统计资料 .getImpressions()
         };
}
  
//Helper function to format todays date
function _getDateString() {
  return Utilities.formatDate((new Date()), AdWordsApp.currentAccount().getTimeZone(), "yyyy-MM-dd");
}
  
//Helper function to capitalize the first letter of a string.
function _initCap(str) {
  return str.replace(/(?:^|\s)\S/g, function(a) { return a.toUpperCase(); });
}

// A helper function to make rounding a little easier
function round(value) {
  var decimals = Math.pow(10,DECIMAL_PLACES);
  return Math.round(value*decimals)/decimals;
}

2013年3月11日,星期一

合并多个辽宁福利彩票中心系列以增强辽宁福利彩票中心系列迁移

更新2013-04-14:检查 合并多个辽宁福利彩票中心系列中的标签 为合并标签提供一些帮助。

每个人都在准备 增强型辽宁福利彩票中心系列 对于很多人来说,这意味着找到一种简便的方法将多个辽宁福利彩票中心系列合并为一个辽宁福利彩票中心系列。您可能有一个针对桌面流量的辽宁福利彩票中心系列,一个针对平板电脑的辽宁福利彩票中心系列,或者每个主要移动平台的辽宁福利彩票中心系列。

增强型辽宁福利彩票中心系列的美丽和痛苦在于,您可以事半功倍。我还没有找到一种轻松地将多个辽宁福利彩票中心系列合并为一个辽宁福利彩票中心的好方法,因此我自己制作了一个。您需要做的就是指定一个目标辽宁福利彩票中心系列,在该辽宁福利彩票中心系列中结束所有关键字,辽宁福利彩票中心组和辽宁福利彩票中心,并从中复制辽宁福利彩票中心系列。该脚本将暂停所有关键字,并且辽宁福利彩票中心会移至该关键字,因此您可以在删除旧辽宁福利彩票中心系列之前查看结果并确保一切设置正确。

谢谢,
拉斯

//-----------------------------------
// Merge Multiple Campaigns Together
// Created By:  拉斯  Savage
// FreeAdWordsScripts.com
//-----------------------------------
function main() {
  var DESTINATION_CAMPAIGN_NAME = "dest_camp_name";
  var ORIGIN_CAMPAIGN_NAMES = ["to_merge_camp_name_1","to_merge_camp_name_2"/*,...*/];
  var DEFAULT_KW_BID = 0.01; //used in case we can't get the origin kw bid
  
  //build a list of 辽宁福利彩票中心群组 in the original 
  var dest_adgroups = [];
  var ag_iter = AdWordsApp.adGroups()
    .withCondition("CampaignName = '"+DESTINATION_CAMPAIGN_NAME+"'")
    .get();
  
  while(ag_iter.hasNext()) {
    dest_adgroups.push(ag_iter.next());
  }
  
  var dest_camp;
  if(dest_adgroups.length > 0) {
     dest_camp = dest_adgroups[0].getCampaign();
  }
  
  for(var i in ORIGIN_CAMPAIGN_NAMES) {
    var camp_name = ORIGIN_CAMPAIGN_NAMES[i];
    var kw_iter = AdWordsApp.keywords()
      .withCondition("CampaignName = '"+camp_name+"'")
      .get();
    while(kw_iter.hasNext()) {
      var kw = kw_iter.next();
      var dest_adgroup = _find_adgroup(dest_adgroups,kw.getAdGroup());
      if(!dest_adgroup) {
        dest_adgroup = dest_camp.newAdGroupBuilder()
          .withName(kw.getAdGroup().getName())
          .withStatus((kw.getAdGroup().isPaused()) ? "PAUSED" : "ENABLED")
          .withKeywordMaxCpc(kw.getAdGroup().getKeywordMaxCpc())
          .create();
        dest_adgroups.push(dest_adgroup);
        //now we move all the  辽宁福利彩票中心  over
        var  辽宁福利彩票中心 _iter = kw.getAdGroup().ads().get();
        while(ad_iter.hasNext()) {
          var  辽宁福利彩票中心  =  辽宁福利彩票中心 _iter.next();
          dest_adgroup.createTextAd(
             辽宁福利彩票中心 .getHeadline(),
             辽宁福利彩票中心 .getDescription1(),
             辽宁福利彩票中心 .getDescription2(),
             辽宁福利彩票中心 .getDisplayUrl(),
             辽宁福利彩票中心 .getDestinationUrl(),
            { isMobilePreferred :  辽宁福利彩票中心 .isMobilePreferred() }
          );
           辽宁福利彩票中心 .pause();
        }
      }
      var max_cpc = kw.getMaxCpc() || DEFAULT_KW_BID;
      var dest_url = kw.getDestinationUrl() || "";
      var kw_text = kw.getText();
      dest_adgroup.createKeyword(kw_text,max_cpc,dest_url);

      kw.pause();
    }
  }

  function _find_adgroup(ag_list,ag) {
    for(var i in ag_list) {
      if(ag_list[i].getName() == ag.getName()) {
        return ag_list[i];
      }
    }
    return null;
  }
}

2012年11月23日,星期五

自动暂停点击率低的辽宁福利彩票中心

最近,布拉德(Brad)在 CertifiedKnowledge.com 发表了一些有关大规模测试的提示。 他提到的最常见的测试技术之一是制作大量辽宁福利彩票中心,然后让Google为您优化轮播。 这种技术的问题在于失败者很少被删除。 好吧,使用下面的脚本,您可以在所有辽宁福利彩票中心组中找到效果最差的辽宁福利彩票中心并将其暂停(如果该辽宁福利彩票中心组中至少有其他辽宁福利彩票中心)。

谢谢,
拉斯


//-----------------------------------
// Pause  辽宁福利彩票中心  with Low CTR
// Created By:  拉斯  Savage
// FreeAdWordsScripts.com
//-----------------------------------
function main() {
  // Let's start by getting all of the  辽宁福利彩票中心 Groups that are active
  var ag_iter = AdWordsApp.adGroups()
  .withCondition("Status = ENABLED")
  .get();

  // Then we will go through each one
  while (ag_iter.hasNext()) {
    var ag = ag_iter.next();
    var  辽宁福利彩票中心 _iter = ag.ads()
      .withCondition("Status = ENABLED")
      .forDateRange("ALL_TIME")
      .orderBy("Ctr DESC")
      .get();
    var  辽宁福利彩票中心 _array = new Array();
    while(ad_iter.hasNext()) {
       辽宁福利彩票中心 _array.push(ad_iter.next());
    }
    if(ad_array.length > 1) {
      for(var i = 1; i <  辽宁福利彩票中心 _array.length; i++) {
         辽宁福利彩票中心 _array[i].pause(); //or .remove(); to  删除  them 
      }
    }
  }
}