显示带有标签的帖子 大写. 显示所有帖子
显示带有标签的帖子 大写. 显示所有帖子

2013年3月4日,星期一

修复广告中的大写错误

营销人员在拥有从Feed中自动构建广告素材的系统时面临的问题之一是质量控制。最近,我遇到了一个问题,我制作了大约1000个新广告,城市名称全部为大写。 Google当然不那么喜欢,我不喜欢必须手动更新1,000个广告的想法,因此我整理了以下脚本。

该脚本会在您的帐户中运行所有被拒登的广告,并尝试在ALL CAPS中查找带有单词的广告。我不确定Google的上限是多少,但是在下面的脚本中,它将查找连续三个或三个以上大写字母的任何内容。然后替换它们,创建一个新广告,如果成功,则删除旧广告。

我在确定广告被拒登的原因时遇到了麻烦。 API中尚不提供此功能,但具有 被要求。另一个问题是,有时您创建的新广告会失败,这将导致您删除旧广告而不创建新广告。为了解决这一问题,我在制作新广告之前和之后对广告组中的广告进行了计数,以确保我的广告已创建。再说一次 发布功能请求 在adwords脚本论坛中。

谢谢,
拉斯

//-----------------------------------
// Fix Ads with EXCESSIVE CAPITALIZATION
// Created By: 拉斯 Savage
// FreeAdWordsScripts.com
//-----------------------------------
function main() {
  var find_caps = /[A-Z]{3,}/g;
  var SEP = '[email protected]~~'; // this needs to be something you would never put in your 广告.
  var 广告 _iter = AdWordsApp.ads().withCondition("ApprovalStatus = 'DISAPPROVED'").get();
  
  while(ad_iter.hasNext()) {
    var 广告  = 广告 _iter.next();
    var old_ad_cnt = get_ad_count(ad.getAdGroup());
    var old_ad_str = [ad.getHeadline(),ad.getDescription1(),ad.getDescription2(),ad.getDisplayUrl()].join(SEP);
    var new_ad_str = old_ad_str;
    Logger.log("Before:"+old_ad_str);
    var m = "";
    while((m = find_caps.exec(new_ad_str)) != null) {
      new_ad_str = replace_all(new_ad_str,m[0],init_cap(m[0]),false);
    }
    Logger.log("After:"+new_ad_str);
    if(old_ad_str != new_ad_str) {
      var [new_headline,new_desc1,new_desc2,new_disp_url] = new_ad_str.split(SEP);
      广告 .getAdGroup().createTextAd(new_headline, new_desc1, new_desc2, new_disp_url, 广告 .getDestinationUrl());
      var new_ad_cnt = get_ad_count(ad.getAdGroup());
      if(new_ad_cnt == (old_ad_cnt+1)) {
        广告 .remove();
      }
    } else {
      Logger.log("Skipping because no changes were made."); 
    }
  }
  
  function init_cap(s) {
    return s.charAt(0).toUpperCase() + s.slice(1).toLowerCase();
  }
  
  // This function was 广告 apted from: http://dumpsite.com/forum/index.php?topic=4.msg8#msg8 
  function replace_all(original,str1, str2, ignore) {
    return original.replace(new RegExp(str1.replace(/([\/\,\!\\\^\$\{\}\[\]\(\)\.\*\+\?\|\<\>\-\&])/g,"\\$&"),(ignore?"gi":"g")),(typeof(str2)=="string")?str2.replace(/\$/g,"$$$$"):str2);
  }
  
  function get_ad_count(ad_group) {
    var 广告 _iter = 广告 _group.ads().get();
    var new_ad_cnt = 0;
    while(ad_iter.hasNext()) {
      广告 _iter.next();
      new_ad_cnt++;
    }
    return new_ad_cnt;
  }
}