Python Apple Search Ads API报告POST方法错误

Python Apple Search Ads API报告POST方法错误,python,api,apple-search-ads,Python,Api,Apple Search Ads,我试图通过苹果搜索广告API获取报告数据。所以我用这个方法 -H\ -d@TestSearchTermReport.json -X POST/v1/reports/campaigns/{cId}/searchterms 我已经包括了所有的标题和凭证。以下是我的帖子正文json数据文件的内容: { 开始时间:2016-11-13, 结束时间:2016-11-13, 时区:UTC, 粒度:每日, 选择器:{ orderBy:[{字段:花费,排序器:降序}], 字段:[支出、抽头、转换、avgCPA、

我试图通过苹果搜索广告API获取报告数据。所以我用这个方法 -H\ -d@TestSearchTermReport.json -X POST/v1/reports/campaigns/{cId}/searchterms

我已经包括了所有的标题和凭证。以下是我的帖子正文json数据文件的内容: { 开始时间:2016-11-13, 结束时间:2016-11-13, 时区:UTC, 粒度:每日, 选择器:{ orderBy:[{字段:花费,排序器:降序}], 字段:[支出、抽头、转换、avgCPA、avgCPC、ttr、转换率], 分页:{ 偏移量:0, 限额:1000 } }, groupBy:countryCode, 返回值:False, returnRecordsWithNoMetrics:False }

但是,我收到以下错误消息:

{data:null,分页:null,错误:{errors:[{messageCode:INVALID_JSON_REQUEST,message:这是无效的JSON。无法分析请求,字段:行:1列:3}]}

我已经尝试过很多次了,但仍然不起作用。有聪明人能帮我吗


提前谢谢

我自己也在努力使用这个API,文档并不完全是用户友好的

看起来您在这里遇到了一些问题:

时区和粒度是枚举,所以它们的值必须是数字,而不是字符串。实际上,我每次调用时区字段时都会遇到一个错误,所以在找到解决方案之前,我暂时忽略了这个。 您的一些字段名不正确;支出、avgCPC和countryCode应分别为本地支出、avgCPT和国家/地区代码。 “分组依据”字段应为列表。 在使用python时,请尝试以下操作:

import requests

org_id = <YOUR_ORG_ID>
certificate_path = '<PATH_TO_YOUR_CERTIFICATE>'
certificate_key_path = '<PATH_TO_YOUR_CERTIFICATE_KEY>'
campaign_id = <YOUR_CAMPAIGN_ID>


headers = {"Authorization": "orgId=%s" % org_id}    
payload = {
                "startTime": "2016-11-13", 
                "endTime": "2016-11-13",
                "granularity": 1, 
                "selector": {
                    "orderBy":[{"field":"localSpend","sortOrder":"DESCENDING"}], 
                    "fields": ["localSpend", "taps", "conversions", "avgCPA", "avgCPT", "ttr", "conversionRate"], 
                    "pagination": { "offset": 0, "limit": 1000 }
                    }, 
                "groupBy": ["COUNTRY_CODE"], 
                "returnRowTotals": False, 
                "returnRecordsWithNoMetrics": False
            }
url = 'https://api.searchads.apple.com/api/v1/reports/campaigns/%s/searchterms' % campaign_id
response = requests.post(url, cert=(certificate_path, certificate_key_path), json=payload, headers=headers)
print(response.text)

这将为我返回一个成功的响应。希望它对你也有用

我可以使用下面的旋度让它工作

curl --cert ./<PI2 CERTIFICATE FILE>.p12 --pass <PI2 CERTIFICATE PASSWORD>  -H "Authorization: orgId=xxx"  -H "Content-Type: application/json" -X POST -d ' {"startTime": "2017-04-06", "endTime": "2017-04-06", "granularity": 2, "selector": {"orderBy":[{"field":"localSpend","sortOrder":"DESCENDING"}], "fields": ["localSpend"], "pagination": { "offset": 0, "limit": 1000 } }, "groupBy": ["COUNTRY_CODE"], "returnRowTotals": false, "returnRecordsWithNoMetrics": false }' "https://api.searchads.apple.com/api/v1/reports/campaigns/campaign name/searchterms"
并使用以下代码

headers = {
            'Authorization': 'orgId=<ORG_ID>',
            'Content-Type': 'application/json',
          }
data = ' {"startTime": "%s",
          "endTime": "%s", 
          "granularity": 2, ' \
          '"selector": {"orderBy":[{"field":"localSpend","sortOrder":"DESCENDING"}], ' \
          '"fields": ["localSpend"], "pagination": { "offset": 0, "limit": 1000 } }, ' \
          '"groupBy": ["COUNTRY_CODE"], "returnRowTotals": false, "returnRecordsWithNoMetrics": false }' % (date_report, date_report) 
url = 'https://api.searchads.apple.com/api/v1/reports/campaigns/%s/searchterms' % (your_campaign_id)
r = requests.post(url, headers=headers, data=data,
                                      cert=('<path to crt file>',
                                            '<path to key file>'))

您可以使用邮递员:

步骤: 1.从邮递员导入行文本-

curl-xget -H'授权:orgId=234234'-H'内容类型:application/json'


在邮递员设置中设置证书和密钥我的macOS配置回答正确准确。请注意,证书密钥路径是pem文件
headers = {
            'Authorization': 'orgId=<ORG_ID>',
            'Content-Type': 'application/json',
          }
data = ' {"startTime": "%s",
          "endTime": "%s", 
          "granularity": 2, ' \
          '"selector": {"orderBy":[{"field":"localSpend","sortOrder":"DESCENDING"}], ' \
          '"fields": ["localSpend"], "pagination": { "offset": 0, "limit": 1000 } }, ' \
          '"groupBy": ["COUNTRY_CODE"], "returnRowTotals": false, "returnRecordsWithNoMetrics": false }' % (date_report, date_report) 
url = 'https://api.searchads.apple.com/api/v1/reports/campaigns/%s/searchterms' % (your_campaign_id)
r = requests.post(url, headers=headers, data=data,
                                      cert=('<path to crt file>',
                                            '<path to key file>'))