我正在使用python 2.7和google dfp api python模块(googleads-4.4.0)。
发布者文档的双击(https://developers.google.com/doubleclick-publishers/docs/rel_notes)描述了像CustomTargetingValue这样的“类型”(也称为类)。我想创建这样的类的新实例,以便我可以填充它们并调用API可访问的方法,如createCustomTargetingValues()。
我希望通过使用类名和'call'方法创建新实例。
newVal = CustomTargetingValue()
...但这会产生NameError
NameError: name 'CustomTargetingValue' is not defined
我尝试过使用dir(),vars()和检查,但我找不到一种方法来确定名称,例如googleads.CustomTargetingValue,suds.sudsobject.CustomTargetingValue。
作为一种解决方法,我可以使用像getCustomTargetingValuesByStatement()这样的DFP查询来返回我想要的类型的现有对象,使用'type'来获取其类,然后使用调用方法
newVal=type(existingVal)()
我可以类似地使用复制模块来复制对象,但两种方式看起来都像黑客一样。
我显然在这里错过了一些令人眼花缭乱的东西 - 这样做的正确方法是什么?
答案 0 :(得分:0)
我找到的最接近的解决方案是简单地组成一个包含正确xsi_type
的字典,并确保提供所有必填字段。然后,此词典将提供给正在进行的DFP API调用。我特别受到this code example的启发。
所以,例如我需要添加一个新的顶级KVP(CustomCriteriaSet),我使用这段代码:
new_kvp = {
'xsi_type': 'CustomCriteriaSet',
'logicalOperator': 'AND',
'children': {
'xsi_type': 'CustomCriteria',
'keyId': key_id,
'valueIds': [value1_id,value2_id],
'operator': 'IS_NOT'
}
}
l.targeting['customTargeting'] = new_kvp
updated_li.append(l)
...
li_service.updateLineItems(updated_li)
...
虽然我在PHP示例here中找到,但代码只是调用CustomCriteriaSet
调用,但我无法在Python示例中找到类似的代码。可能只是一个帮助类,但我还没有检查PHP示例。
嗯,无论如何,这个解决方案对我有用。所以我会选择这个。