【问题标题】:Googleads python module - how to create class instancesGoogleads python 模块 - 如何创建类实例
【发布时间】:2016-08-25 16:20:24
【问题描述】:

我正在使用 python 2.7 和 google dfp api python 模块 (googleads-4.4.0)。

双击发布商文档 (https://developers.google.com/doubleclick-publishers/docs/rel_notes) 描述了“类型”(也称为类),例如 CustomTargetingValue。我想创建此类类的新实例,以便填充它们并在它们上调用 API 可访问的方法,例如 createCustomTargetingValues()。

我希望通过使用类名和“调用”方法来创建新实例。

newVal = CustomTargetingValue()

...但这会产生一个 NameError

NameError: name 'CustomTargetingValue' is not defined

我尝试使用 dir()、vars() 和检查进行挖掘,但我找不到一种方法来限定名称,例如googleads.CustomTargetingValue、suds.sudsobject.CustomTargetingValue。

作为一种解决方法,我可以使用 getCustomTargetingValuesByStatement() 之类的 DFP 查询来返回我想要的类型的现有对象,使用“类型”来获取其类,然后使用调用方法

newVal=type(existingVal)()

我可以类似地使用复制模块来复制对象,但是这两种方式都像是 hack。

我显然在这里错过了一些非常明显的东西 - 这样做的正确方法是什么?

【问题讨论】:

  • 嗨,这个问题有什么解决办法吗?我的自动取款机差不多。
  • 不,惊人地没有!我发现我通常处理从 getXbyStatement 调用中获得的对象,所以没关系。否则,我要么调用以获取模板对象并更改值,要么根据代码示例从头开始构建一个。如果您发现更多信息,请告诉我!
  • 我想我会使用答案部分,因为我将在那里发布代码。让我这样做。我想--cmiiw-- 我找到了解决办法

标签: python google-dfp


【解决方案1】:

我找到的最接近的解决方案是简单地用正确的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 示例。

好吧,无论如何,这个解决方案对我有用。所以我会选择这个。

【讨论】:

    猜你喜欢
    • 2018-02-24
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 2014-05-24
    • 2016-01-13
    • 2020-06-18
    • 2021-04-19
    相关资源
    最近更新 更多