基于AdWords API(PHP客户端库)添加跟踪URL模板的广告克隆问题
解决AdWords广告追踪模板批量更新的实战经验
需求背景
我需要给所有支持的AdWords广告类型,在$trackingUrlTemplate(对应CreativeTrackingUrlTemplate)中添加自定义追踪标签,要求不能修改广告的其他任何属性,最后还要把广告ID同步到自有追踪器的数据库里。
最初尝试的踩坑经历
一开始我想当然地走了最直接的流程:获取所有广告 → 修改$trackingUrlTemplate属性 → 保存广告 → 拿广告ID入库。结果直接翻车,问题出在两个关键限制上:
- 广告属性修改权限:AdWords的广告规则很严格,除了广告状态,其他参数根本不允许直接修改,必须创建新广告然后删除原广告才能实现更新;
- "浅"对象陷阱:从
AdGroupAdService获取Ad对象时,如果Selector没有明确指定每一个需要的属性,拿到的是不完整的"浅"对象,后续修改保存会丢失原有数据。
可行的解决方案思路
既然直接修改走不通,那就换个思路:先获取完整的Ad对象,修改追踪模板后新增广告,再删除原广告。
- 针对第一个问题(获取新广告ID):新增广告后,可以从ADD操作的返回结果里直接拿到新ID,代码示例如下:
$newAdId = $adGroupAdService->mutate([$operation])->getValue()[0]->getAd()->getId(); - 针对第二个问题(获取完整Ad对象),我摸索出了一套快速生成完整Selector字段列表的方法:
生成完整Selector字段的步骤
- 先查阅AdWords官方文档,对AdGroupAdService的字段结构有个大概认知;
- 用Firebug编辑器给AdGroupAdService的字段表格添加
id="my",然后在Firebug控制台执行这段脚本:
var t = $("#my") $.each($("tr", t), (i, v) => { console.log("'" + $("td", v).eq(0).text() + "', //" + $("a", $("td", v).eq(1)).text()); });
这段脚本会自动把表格里的字段名和对应的注释一起打印出来,省去手动整理的麻烦;
3. 把控制台输出的结果直接复制粘贴到$selector->setFields([])的参数中;
4. 手动移除重复条目和空值,就能得到完整的字段列表,确保获取到的是完整的Ad对象。
额外遇到的小问题
处理ImageAd类型的时候,发现它的image属性是个"浅"Image对象,里面的实际数据属性是空的,这个还需要单独处理(比如单独调用接口获取Image的完整数据再赋值)。
内容的提问来源于stack exchange,提问作者Alexander Smirnov
相关产品推荐
相关产品推荐

