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'

  1. Установите сертификат и ключ в настройках Postman (Моя конфигурация для macOS) -

    1. Теперь вы можете использовать запрос у почтальона -
Другие вопросы по тегам