如何使用最新版本的Google AdWords API 201509删除单个附加链接并完成其余内容?
Google added a new way to add sitelink extensions.
https://developers.google.com/adwords/api/docs/guides/extension-settings#add_ad_extensions
I added a bunch of them, but how do you delete them? I had 3 sitelinks on each campaign. I was able to remove a sitelink from the campaigns, but it removed all sitelinks from the campaigns. They are still in the + Extension
list, but not associated with any campaigns.
function deleteSitelinks($sitelinks) {
$user = $this->getUser();
$campaignExtensionSettingService = $user->GetService('CampaignExtensionSettingService', ADWORDS_VERSION);
// first remove the sitelinks from the campaigns
$operations = array();
foreach ($sitelinks as $sitelink) {
$sfi = new SitelinkFeedItem();
$sfi->feedItemId = $sitelink->google_feed_item_id;
$campaignExtensionSetting = new CampaignExtensionSetting();
$campaignExtensionSetting->campaignId = $sitelink->campaign->google_id;
$campaignExtensionSetting->extensionType = 'SITELINK';
$extensionSetting = new ExtensionSetting();
$extensionSetting->extensions = array($sfi);
$campaignExtensionSetting->extensionSetting = $extensionSetting;
$operation = new CampaignExtensionSettingOperation();
$operation->operator = 'REMOVE';
$operation->operand = $campaignExtensionSetting;
$operations[] = $operation;
}
$result = $campaignExtensionSettingService->mutate($operations);
// now remove the sitelinks themselves
$feedItemService = $user->GetService('FeedItemService', ADWORDS_VERSION);
$operations = array();
foreach ($sitelinks as $sitelink) {
$sfi = new SitelinkFeedItem();
$sfi->feedId = $sitelink->google_feed_id;
$sfi->feedItemId = $sitelink->google_feed_item_id;
$operation = new FeedItemOperation();
$operation->operator = 'REMOVE';
$operation->operand = $sfi;
$operations[] = $operation;
}
$result = $feedItemService->mutate($operations);
return $result->value;
}
Google添加了一种新方法来添加附加链接。 p>
https:// developers.google.com/adwords/api/docs/guides/extension-settings#add_ad_extensions p>
我添加了一堆,但是你如何删除它们? 每个广告系列都有3个附加链接。 我可以从广告系列中删除附加链接,但它从广告系列中删除了所有 strong>附加链接。 它们仍然在 + Extension code>列表中,但不与任何广告系列相关联。 p>
function deleteSitelinks($ sitelinks){
$ user = $ this-> getUser();
$ campaignExtensionSettingService = $ user-> GetService('CampaignExtensionSettingService',ADWORDS_VERSION);
//首先从广告系列中删除附加链接
$ operations = array();
foreach ($ sitelinks as $ sitelink){
$ sfi = new SitelinkFeedItem();
$ sfi-> feedItemId = $ sitelink-> google_feed_item_id;
$ campaignExtensionSetting = new CampaignExtensionSetting();
$ campaignExtensionSetting - > campaignId = $ sitelink-> campaign-> google_id;
$ campaignExtensionSetting-> extensionType ='SITELINK';
$ extensionSetting = new ExtensionSetting();
$ extensionSetting-> extensions = array($ sfi);
$ campaignExtensionSetting-> extensionSetting = $ extensionSetting;
$ operation = new CampaignExtensionSettingOperation();
$ operation-> operator ='REMOVE';
$ operation-> operand = $ campaignExtensionSetting;
$ operations [] = $ operation;
}
$ result = $ campaignExtensionSettingService-> mutate($ operations) ;
//现在删除附加链接
$ feedItemService = $ user-> GetService('FeedItemService',ADWORDS_VERSION);
$ operations = array();
foreach($ sitelinks as $ sitelink) {
$ sfi = new SitelinkFeedItem();
$ sfi-> feedId = $ sitelink-> google_feed_id;
$ sfi-> feedItemId = $ sitelink-> google_feed_item_id;
$ operation = new FeedItemOperation();
$ operation-> operator ='REMOVE';
$ operation-> operand = $ sfi;
$ operations [] = $ operation;
}
$ result = $ feedItemService - > mutate($ operations);
返回$ result-> value;
}
code> pre>
div>
Ok I 'fixed' it by re-adding all the sitelinks that belong to that campaign immediately after deleting the target sitelink. I swear, this is the most retarded part of this API.
...
$result = $campaignExtensionSettingService->mutate($operations);
// now re-add the other sitelinks. the google API is removing/disassociating ALL sitelinks for whatever reason
$operations = array();
foreach ($sitelinks as $sitelink) {
$campaignSitelinks = array();
$siblings = Sitelink::find()->where(['campaign_id' => $sitelink->campaign_id])->andWhere(['not', ['id' => $sitelink->id]])->all();
foreach ($siblings as $sibling) {
$sfi = new SitelinkFeedItem();
$sfi->feedItemId = $sibling->google_feed_item_id;
$campaignSitelinks[] = $sfi;
}
$campaignExtensionSetting = new CampaignExtensionSetting();
$campaignExtensionSetting->campaignId = $sitelink->campaign->google_id;
$campaignExtensionSetting->extensionType = 'SITELINK';
$campaignExtensionSetting->extensionSetting = new ExtensionSetting();
$campaignExtensionSetting->extensionSetting->extensions = $campaignSitelinks;
// Create operation.
$operation = new CampaignExtensionSettingOperation();
$operation->operator = 'SET';
$operation->operand = $campaignExtensionSetting;
$operations[] = $operation;
}
$result = $campaignExtensionSettingService->mutate($operations);
// now remove all the sitelinks themselves
$feedItemService = $user->GetService('FeedItemService', ADWORDS_VERSION);
...