我使用的是python 2.7和googledfpapithon模块(googleads-4.4.0)。
doubleclick for publishers文档(https://developers.google.com/doubleclick-publishers/docs/rel_notes)描述了“类型”(也称为类),如CustomTargetingValue。我想创建此类类的新实例,这样我就可以填充它们并对它们调用诸如createCustomTargetingValues()之类的API可访问方法。
我希望通过使用类名和“call”方法创建新实例。

newVal = CustomTargetingValue()

... 但这会产生一个命名错误
NameError: name 'CustomTargetingValue' is not defined

我试过使用dir()、vars()和inspect进行搜索,但找不到一种方法来限定名称,例如googleads.CustomTargetingValue、suds.sudsobject.CustomTargetingValue。
作为一种解决方案,我可以使用一个DFP查询,如GETCuestAdvutualValueByStestMeMe()来返回一个我想要的类型的现有对象,使用“类型”来获取它的类,然后使用调用方法。
newVal=type(existingVal)()

我同样可以使用copy模块来复制对象,但这两种方法看起来都很简单。
很明显,我错过了一些非常明显的东西——正确的方法是什么?

最佳答案

我找到的最接近的解决方案是用适当的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示例中找不到类似的代码。可能只是一个helper类,但我还没有检查那个PHP示例。
好吧,不管怎样,这个解决方案对我是有效的。所以我就这么做。

09-25 16:49