显示带有标签的帖子 增强型广告系列. 显示所有帖子
显示带有标签的帖子 增强型广告系列. 显示所有帖子

2013年4月14日,星期日

合并多个广告系列中的标签

该脚本是我之前的脚本之一的后续内容: 合并多个广告系列以增强广告系列迁移。此操作旨在在您将广告系列合并在一起后运行,并将所有广告系列,广告组,广告和关键字的标签从ORIGIN_CAMAPIGN_NAMES复制到DESTINATION_CAMPAIGN_NAME。

谢谢,
拉斯

//-----------------------------------
// 合并多个广告系列中的标签
// Created By: 拉斯 Savage
// FreeAdWordsScripts.com
//-----------------------------------
var DESTINATION_CAMPAIGN_NAME = "Destination Campaign Name";
var ORIGIN_CAMPAIGN_NAMES = ["Origin Campaign Name 1","Origin Campaign Name 2"];

function main() {
  var 标签_iter = AdWordsApp.labels().get();
  while(label_iter.hasNext()) {
    var 标签 = 标签_iter.next();
    //Pre-build all the iterators
    var iters = [
      标签.campaigns().withCondition("Name IN ['"+ORIGIN_CAMPAIGN_NAMES.join("','")+"']").get(),
      标签.adGroups().withCondition("CampaignName IN ['"+ORIGIN_CAMPAIGN_NAMES.join("','")+"']").get(),
      标签.ads().withCondition("CampaignName IN ['"+ORIGIN_CAMPAIGN_NAMES.join("','")+"']").get(),
      标签.keywords().withCondition("CampaignName IN ['"+ORIGIN_CAMPAIGN_NAMES.join("','")+"']").get()
    ];
    for(var i in iters) {
      var iter = iters[i];
      while(iter.hasNext()) {
        _copyLabels(iter.next()); 
      }
    }
  }
}

//Copies the 标签 from 实体 in Origin 运动 
//to 实体 with the same name in dest 运动
function _copyLabels(entity) {
  var iter;
  if(_getEntityType(entity) == "Campaign") {
    // it's a 运动
    iter = AdWordsApp.campaigns()
             .withCondition("Name = '"+DESTINATION_CAMPAIGN_NAME+"'")
             .get();
  } else if(_getEntityType(entity) == "AdGroup") {
    // it's an 广告群组
    iter = AdWordsApp.adGroups()
             .withCondition("CampaignName = '"+DESTINATION_CAMPAIGN_NAME+"'")
             .withCondition("Name = '"+entity.getName()+"'")
             .get();
  } else if(_getEntityType(entity) == "Ad") {
    // it's an 广告 
    iter = AdWordsApp.ads()
             .withCondition("CampaignName = '"+DESTINATION_CAMPAIGN_NAME+"'")
             .withCondition("AdGroupName = '"+entity.getAdGroup().getName()+"'")
             .withCondition("Headline = '"+entity.getHeadline()+"'")
             .withCondition("Description1 = '"+entity.getDescription1()+"'")
             .withCondition("Description2 = '"+entity.getDescription2()+"'")
             .withCondition("DisplayUrl = '"+entity.getDisplayUrl()+"'")
             .get();
  } else if(_getEntityType(entity) == "Keyword") {
    // it's a 关键词
    iter = AdWordsApp.keywords()
             .withCondition("CampaignName = '"+DESTINATION_CAMPAIGN_NAME+"'")
             .withCondition("AdGroupName = '"+entity.getAdGroup().getName()+"'")
             .withCondition("Text = '"+entity.getText()+"'")
             .withCondition("KeywordMatchType = '"+entity.getMatchType()+"'")
             .get();
  }
  
  while(iter.hasNext()) {
    _copyLabelsHelper(entity,iter.next());
  }
  
}

//Copy the 标签 form orig 实体 to dest 实体
function _copyLabelsHelper(orig,dest) {
  var 标签_iter = orig.labels().get();
  while(label_iter.hasNext()) {
    dest.applyLabel(label_iter.next().getName());
  }
}

//Returns a text representation of an 实体
//For a better way, check: http://goo.gl/kZL3X
function _getEntityType(obj) {
  if(typeof(obj['getCampaign']) == "undefined") {
    return 'Campaign';
  }
  if(typeof(obj['getAdGroup']) == "undefined") {
    return 'AdGroup';
  }
  if(typeof(obj['getHeadline']) != "undefined") {
    return "Ad";
  }
  if(typeof(obj['getText']) != "undefined") {
    return "Keyword";
  }
  return null;
}

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;
  }
}