douhuan1497 2015-12-02 04:56
浏览 60
已采纳

如何使用最新版本的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;
  }
  • 写回答

1条回答 默认 最新

  • doupinge9055 2015-12-02 05:20
    关注

    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);
    ...
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?