Hello, Bharani
Yes, for creating new Youtube media id on my account I'm using google ads scripts in Adwords UI.
And in script below I'm using ONLY Youtube MEDIA id (not youtube VIDEO id).
But I can't change youtube media ids list in my Video ads only UAC via API because it's UAC is Video ads only

When I'm trying to change of youtube media ids sets in this type of UAC I'm getting an error:
zeep.exceptions.Fault:
[SettingError.YOUTUBE_MEDIA_IDS_REQUIRED_IN_VIDEO_ONLY_UAC @
operations[0].operand.settings[0].youtubeVideoMediaIds; trigger:'[]']
This is my script for mutate:
from googleads import adwords
import os
class GoogleYamlConf:
def __init__(self):
self.yaml_path = os.path.abspath(os.path.dirname(__file__))
def config(self):
yaml_file = './googleads.yaml'
return yaml_file
gc = GoogleYamlConf()
yaml_path = gc.config()
class CampaignMutate:
def __init__(self, adwords_client, campaign_id, video_ids: list = []):
self.video_ids = video_ids
self.settings = {
'xsi_type': 'UniversalAppCampaignSetting',
'youtubeVideoMediaIds': self.video_ids
}
self.campaign_service = adwords_client.GetService('CampaignService', version='v201809')
selector = {
'fields': ['CampaignId', 'Settings', 'Name'],
'predicates': [{
'field': 'CampaignId',
'operator': 'IN',
'values': [campaign_id]
}]
}
page = self.campaign_service.get(selector)
if 'entries' in page:
for campaign in page['entries']:
print(campaign)
self.campaign = campaign
self.youtubeVideoMediaIds = campaign.settings[1].youtubeVideoMediaIds
else:
print('campaign not found')
# logger.error('campaign not found')
def remove_media_ids(self):
video_ids_for = list(set(self.youtubeVideoMediaIds) - set(self.video_ids))
self.settings = {
'xsi_type': 'UniversalAppCampaignSetting',
'youtubeVideoMediaIdsOps': self.video_ids,
}
self._update_media_data()
self.video_ids = video_ids_for
self.youtubeVideoMediaIds = []
return self.add_media_ids()
def add_media_ids(self):
if len(list(set(self.youtubeVideoMediaIds + self.video_ids))) > 20:
return False
self.video_ids = list(set(self.youtubeVideoMediaIds + self.video_ids))
self.settings = {
'xsi_type': 'UniversalAppCampaignSetting',
'youtubeVideoMediaIds': self.video_ids,
}
return self._update_media_data()
def _update_media_data(self):
operations = [{
'operator': 'SET',
'operand': {
'id': self.campaign.id,
'settings': self.settings
}
}]
print(operations)
return self.campaign_service.mutate(operations)['value'][0]['settings'][1]['youtubeVideoMediaIds']
client = adwords.AdWordsClient.LoadFromStorage(yaml_path)
media_ids = [***]
campaign_id = ***
camp = CampaignMutate(client, campaign_id, media_ids)
res = camp.remove_media_ids()
print(res)
this is campaign object for mutate:
{
'id': 1714*****,
'campaignGroupId': None,
'name': '****',
'status': None,
'servingStatus': None,
'startDate': None,
'endDate': None,
'budget': None,
'conversionOptimizerEligibility': None,
'adServingOptimizationStatus': None,
'frequencyCap': None,
'settings': [
{
'Setting.Type': 'GeoTargetTypeSetting',
'positiveGeoTargetType': 'DONT_CARE',
'negativeGeoTargetType': 'DONT_CARE'
},
{
'Setting.Type': 'UniversalAppCampaignSetting',
'appId': '***',
'appVendor': 'VENDOR_GOOGLE_MARKET',
'description1': '***',
'description2': '***',
'description3': '***',
'description4': '***',
'youtubeVideoMediaIds': [
***
],
'imageMediaIds': [
***
],
'universalAppBiddingStrategyGoalType': 'OPTIMIZE_FOR_TARGET_IN_APP_CONVERSION',
'youtubeVideoMediaIdsOps': None,
'imageMediaIdsOps': None,
'adsPolicyDecisions': []
}
],
'advertisingChannelType': None,
'advertisingChannelSubType': None,
'networkSetting': None,
'labels': [],
'biddingStrategyConfiguration': None,
'campaignTrialType': None,
'baseCampaignId': None,
'forwardCompatibilityMap': [],
'trackingUrlTemplate': None,
'finalUrlSuffix': None,
'urlCustomParameters': None,
'vanityPharma': None,
'universalAppCampaignInfo': None,
'selectiveOptimization': None
}
This is operation for SET:
[{'operator': 'SET', 'operand': {'id': 1714***, 'settings': {'xsi_type': 'UniversalAppCampaignSetting', 'youtubeVideoMediaIdsOps': [***]}}}]
And error:
Error summary: {'faultMessage': "[SettingError.YOUTUBE_MEDIA_IDS_REQUIRED_IN_VIDEO_ONLY_UAC @ operations[0].operand.settings[0].youtubeVideoMediaIds; trigger:'[]']", 'requestId': '000582cd1b59248a0a378dc3dd0b464f', 'serviceName': 'CampaignService', 'methodName': 'mutate', 'operations': '1', 'responseTime': '202'}
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/googleads/common.py", line 1382, in MakeSoapRequest
*packed_args, _soapheaders=soap_headers)['body']['rval']
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/zeep/proxy.py", line 42, in __call__
self._op_name, args, kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/zeep/wsdl/bindings/soap.py", line 132, in send
return self.process_reply(client, operation_obj, response)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/zeep/wsdl/bindings/soap.py", line 194, in process_reply
return self.process_error(doc, operation)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/zeep/wsdl/bindings/soap.py", line 299, in process_error
detail=fault_node.find('detail'))
zeep.exceptions.Fault: [SettingError.YOUTUBE_MEDIA_IDS_REQUIRED_IN_VIDEO_ONLY_UAC @ operations[0].operand.settings[0].youtubeVideoMediaIds; trigger:'[]']
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Users/i.tirsky/PycharmProjects/googleadw/campaign_mutate.py", line 145, in <module>
res = camp.remove_media_ids()
File "/Users/i.tirsky/PycharmProjects/googleadw/campaign_mutate.py", line 58, in remove_media_ids
self._update_media_data()
File "/Users/i.tirsky/PycharmProjects/googleadw/campaign_mutate.py", line 82, in _update_media_data
return self.campaign_service.mutate(operations)['value'][0]['settings'][1]['youtubeVideoMediaIds']
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/googleads/common.py", line 1394, in MakeSoapRequest
e.detail, errors=error_list, message=e.message)
googleads.errors.GoogleAdsServerFault: [SettingError.YOUTUBE_MEDIA_IDS_REQUIRED_IN_VIDEO_ONLY_UAC @ operations[0].operand.settings[0].youtubeVideoMediaIds; trigger:'[]']
Process finished with exit code 1
In other UACs in my account I can change youtube media list in UAC without any error but those UAC not Video Ads only campaigns
For example:
'id': 1693****,
'campaignGroupId': None,
'name': '****',
'status': None,
'servingStatus': None,
'startDate': None,
'endDate': None,
'budget': None,
'conversionOptimizerEligibility': None,
'adServingOptimizationStatus': None,
'frequencyCap': None,
'settings': [
{
'Setting.Type': 'GeoTargetTypeSetting',
'positiveGeoTargetType': 'DONT_CARE',
'negativeGeoTargetType': 'DONT_CARE'
},
{
'Setting.Type': 'UniversalAppCampaignSetting',
'appId': '***',
'appVendor': 'VENDOR_APPLE_APP_STORE',
'description1': '***',
'description2': '***',
'description3': '***',
'description4': '***',
'youtubeVideoMediaIds': [
5112****,
5112****,
5115****
],
'imageMediaIds': [],
'universalAppBiddingStrategyGoalType': 'OPTIMIZE_FOR_TARGET_IN_APP_CONVERSION',
'youtubeVideoMediaIdsOps': None,
'imageMediaIdsOps': None,
}],
'advertisingChannelType': None,
'advertisingChannelSubType': None,
'networkSetting': None,
'labels': [],
'biddingStrategyConfiguration': None,
'campaignTrialType': None,
'baseCampaignId': None,
'forwardCompatibilityMap': [],
'trackingUrlTemplate': None,
'finalUrlSuffix': None,
'urlCustomParameters': None,
'vanityPharma': None,
'universalAppCampaignInfo': None,
'selectiveOptimization': None
}
[{'operator': 'SET', 'operand': {'id': 1693****, 'settings': {'xsi_type': 'UniversalAppCampaignSetting', 'youtubeVideoMediaIdsOps': [5115***]}}}]
Process finished with exit code 0
Thanks
понедельник, 25 февраля 2019 г., 22:42:44 UTC+3 пользователь googleadsapi-forumadvisor написал: