API-интерфейс Apple Search Ads API сообщает об ошибке метода POST
Я пытаюсь получить данные отчета через API Apple Search Ads. Поэтому я использую метод -H ...\ -d "@TestSearchTermReport.json" -X POST "/v1/reports/campaigns/{cId}/searchterms"
Я включил все заголовки и учетные данные. Ниже приведено содержимое моего файла данных json для тела POST: { "startTime": "2016-11-13", "endTime": "2016-11-13", "часовой пояс": "UTC", "granularity" ": "DAILY", "selector": { "orderBy":[{"field":" провести ","sortOrder":"DESCENDING"}], "fields": [" потратить "," taps "," преобразования ", "avgCPA", "avgCPC", "ttr", "converterRate"], "pagination": { "offset": 0, "limit": 1000 } }, "groupBy": "countryCode", "returnRowTotals": False, "returnRecordsWithNoMetrics": False }
Тем не менее, я получаю следующее сообщение об ошибке:
{"data": null, "pagination": null, "error": {"errors": [{"messageCode": "INVALID_JSON_REQUEST", "message": "Это неверный json. Запрос не может быть проанализирован","field":"Line#:1 Column#:3"}]}}
Я много раз пробовал разными способами, но все равно не работает. Есть ли какие-нибудь умные парни, которые могут мне помочь?
Заранее спасибо!
2 ответа
Я только что боролся с этим API, документация не совсем удобна для пользователя!
Похоже, у вас есть несколько вопросов здесь:
- Часовой пояс и гранулярность являются перечислениями, поэтому их значения должны быть числовыми, а не строками. На самом деле, я все еще получаю сообщение об ошибке каждый раз, когда я звоню с полем часового пояса, поэтому пока опускаю его, пока не найду решение.
- Некоторые из ваших имен полей неверны; проводить, avgCPC и countryCode должны быть localSpend, avgCPT и COUNTRY_CODE, соответственно.
- Группировка по полю должна быть списком.
Поскольку вы используете 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"
Вы можете получить сертификат p12, выполнив шаги, указанные здесь https://developer.apple.com/library/content/documentation/General/Conceptual/AppStoreSearchAdsAPIReference/API_Overview.html
Если вы используете запросы в python для выполнения пост-звонка, вам, возможно, придется проделать дополнительную работу, так как я не нашел никаких параметров, принимающих в качестве ввода сертификат и пароль p12. Создайте файл crt и pem, используя openssl
openssl pkcs12 -in Apple_Certificate.p12 -out file.crt.pem -clcerts -nokeys
openssl pkcs12 -in Apple_Certificate.p12 -out file.key.pem -nocerts -nodes
и используйте следующий код
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 -X GET 'https://api.searchads.apple.com/api/v2/campaigns/124324' -H 'Авторизация: orgId=234234' -H 'Content-Type: application/json'