【发布时间】:2018-03-01 22:16:13
【问题描述】:
我有一个很长的广告系列名称列表,我需要将其折叠为长度为 1 的字符向量,然后在通过“RAdwords”包调用 Google AdWords API 时作为“where”子句传递。
创建此字符串不是问题,直到它的长度达到某个值被截断的点,这会导致 AdWords API 调用出错。
这是一个不会导致错误的设置示例:
campaigns <- paste0("Campaign ", seq(1,5))
collapsed_campaigns <- paste0(campaigns, collapse = "','")
campaign_filter1 <- paste("CampaignName IN ['", collapsed_campaigns, "']")
这是一个会导致错误的设置:
campaigns <- paste0("Campaign ", seq(1,50))
collapsed_campaigns <- paste0(campaigns, collapse = "','")
campaign_filter2 <- paste("CampaignName IN ['", collapsed_campaigns, "']")
检查每个变量的结构显示:
> str(campaign_filter1)
chr "CampaignName IN [' Campaign 1','Campaign 2','Campaign 3',
'Campaign 4','Campaign 5 ']"
> str(campaign_filter2)
chr "CampaignName IN [' Campaign 1','Campaign 2','Campaign 3',
'Campaign 4','Campaign 5','Campaign 6','Campaign 7','Campaign 8','Camp"| __truncated__
如果我将 'campaign_filter1' 作为我在 RAdwords 中的 where 子句传递,事情会按预期运行。
如果我将“campaign_filter2”作为 where 子句传递,我会收到以下错误:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><reportDownloadError>
<ApiError><type>QueryError.INVALID_WHERE_CLAUSE</type><trigger></trigger>
<fieldPath></fieldPath></ApiError></reportDownloadError>
似乎“| truncated”正按字面意思传递给 RAdwords 函数。
这是在对 RAdwords 的失败调用中检查“traffic_data”结构的结果:
> str(traffic_data)
Classes ‘data.table’ and 'data.frame': 1 obs. of 1 variable:
$ ads: chr "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>
<reportDownloadError><ApiError><type>QueryError.INVALID_WHERE_CLAU"| __truncated__
- attr(*, ".internal.selfref")=<externalptr>
显然,我可以绕过这种某种循环函数,并一次调用 API 中的数据一个活动,但这会非常低效。如何获取要传递给 RAdwords 的整个字符串?
【问题讨论】:
-
您是否 100% 确定
| truncated最终会出现在您的查询中?您是否检查过发送并验证的实际查询文本?我只是问,因为我会觉得这很令人惊讶。无论如何,检查实际的查询文本将是有益的,因为它会揭示具体的语法错误。 -
...例如,当我运行
RAdwords::statement并仅提供您的长 WHERE 子句时,整个内容被清楚地插入,而不是截断。也许 API 对长度有限制...? -
啊,是的,我现在可以看到了。因此,答案将是,我必须找出 API 限制是什么并从那里解决它。谢谢!
标签: r character string-length