Проблема с API Python - запрос к Wordstat Яндекс через Python API
Изучаю документацию к WordStat Яндекса. Составляю запрос с теми же фразами, что и в примере
import json
link = "https://api.direct.yandex.ru/v4/json/"
params = {"method": "CreateNewWordstatReport",
"param": {'Phrases': [u'пух -винни',u'синтепон'],
'GeoID': [213]},
"format": 'json'
}
r = requests.get(link, params)
#r.encoding = 'utf-8-sig'
#obj = BeautifulSoup(r.text, 'html.parser')
r.json()
Выдаётся
{'error_str': 'Invalid request method',
'error_code': 512,
'error_detail': 'The HTTP request method must be POST'}
Ответы (1 шт):
Автор решения: Viewed
→ Ссылка
Читайте текст ошибки: The HTTP request method must be POST. Исправляйте ее.
# Вместо requests.get(link, params)
r = requests.post(link, params) # post-запрос
Получите новую ошибку
# {'error_str': 'Invalid request', 'error_code': 501, 'error_detail': 'Invalid JSON request'}
В примерах документации было найдено следующее форматирование
r = requests.post(link, json.dumps(params, ensure_ascii=False).encode('utf8'))
И снова получите новую ошибку
# {'error_detail': '', 'error_code': 53, 'error_str': 'Authorization error'}
Полный код
import requests
import json
link = "https://api.direct.yandex.ru/v4/json/"
params = {
"method": "CreateNewWordstatReport",
"param": {
'Phrases': ['пух -винни', 'синтепон'],
'GeoID': [213]
},
"token": "token"
}
r = requests.post(link, json.dumps(params, ensure_ascii=False).encode('utf8'))
print(r.json())
И даже если вы зарегистрируете приложение и получите токен, опять будет ошибка
# {'error_detail': 'You need to fill out an app access request in the Direct interface and wait for confirmation', 'error_code': 58, 'error_str': 'No access'}
Для ее исправления уже нужно создавать заявку на доступ к API, подробнее.