Wordstat api yandex: Подбор слов

POST запрос к API Яндекс Дистрибуции через Python (библиотека Requests)

Пытаюсь послать POST запрос по API Яндекс Дистрибуции через Python библиотеку Requests, но по какой то причине получаю ошибку, что я пытаюсь послать GET запрос.

import requests
import pandas as pd
ReportsURL = 'https://distribution.yandex.net/api/v2/statistics/basic/report?lang=en'
headers = {'content-type': 'application/json', 'Accept-Charset': 'UTF-8', 'Authorization': 'OAuth %key%'}
body = {
  "period": ["yesterday"],
  "dimensions": [
    "soft_id",
    "vid",
    "pack_id",
    "currency_id"
  ],
  "measures": [
    "setups",
    "searches",
    "partner_all",
    "partner_activations",
    "partner_setups",
    "partner_direct"
  ]
}
r3 = requests.post(ReportsURL, data=body, headers=headers)
r3.text
 

И получаю вот такой ответ:

'{"result":"error","data":{"description":"Method \\"GET\\" not allowed.","message":"method_not_allowed"}}'

Может быть кто то сможет подсказать в чем проблема? Такое ощущение, что то очевидное упускаю.

  • python
  • api
  • requests
  • яндекс
1

К сожалению я не могу получить доступ к API Яндекс.Дистрибьюции, но из очевидного, на что следует обратить внимание, это то, что метод GET не подразумевает наличие тела запроса. Технически это возможно, но большинство библиотек и API его просто не примут. К тому же вы используете requests.post() вместо предполагаемого requests.get(). Убедитесь, что вы действительно должны послать GET запрос с телом. Дополнительную информацию пишите в комментарии

3

Ошибка была в том, что в конце урла не было не было слеша и он проделывал редирект

ReportsURL = 'https://distribution.yandex.net/api/v2/statistics/basic/report/?lang=en'

Должно быть вот так. Отследил с помощью библиотек http.client и logging. Если вдруг у вас похожая проблема, то добавьте

import logging
import http. client as http_client

И после body

# These two lines enable debugging at httplib level (requests->urllib3->http.client)
# You will see the REQUEST, including HEADERS and DATA, and RESPONSE with HEADERS but without DATA.
# The only thing missing will be the response.body which is not logged.
http_client.HTTPConnection.debuglevel = 1
# You must initialize logging, otherwise you'll not see debug output.
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
requests_log = logging.getLogger("requests.packages.urllib3")
requests_log.setLevel(logging.DEBUG)
requests_log.propagate = True

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через Facebook

Регистрация через почту

Отправить без регистрации

Почта

Необходима, но никому не показывается

Отправить без регистрации

Почта

Необходима, но никому не показывается

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

YandexWordstatAPI · PyPI

Project description

Simple small class for parsing data from WordStat via yandex direct api

Installing YandexWordstatAPI

$ python -m pip install YandexWordstatAPI

Docs

from YandexWordstatAPI.WordstatAPI import *
import time
'''
Yandex sandbox url = https://api-sandbox.direct.yandex.ru/v4/json/
Yandex full access url = https://api.direct.yandex.ru/v4/json/
'''
url = 'https://api-sandbox.direct.yandex.ru/v4/json/'  # api url 
token = 'AgAAAAAX1GmLIIX9s4uEoSNiSEyjjxTsAHZ0p8w'  # Token to access Yandex.Direct API
username = 'yandex.username'  # Username to get points value 
API = WordstatAPI(url, token, username)
phrases = [
    'фотошоп',
    'photoshop'
]
exclude = [
    '-купить',
    '-дешево',
    '-скачать',
    '-бесплатно'
]
geo = []  # Can be let empty
data = API.compose_data(phrases, exclude)  # Compose data with exclude phrases
# Methods
units = API.
get_client_units() # Get client units. ref: https://yandex.ru/dev/direct/doc/dg-v4/reference/GetClientsUnits.html print(f"You have {units['data'][0]['UnitsRest']}") report_id = API.create_report(data, geo)[ 'data'] # Create new report, it will be redy in ~2 minutes. ref: https://yandex.ru/dev/direct/doc/dg-v4/reference/CreateNewWordstatReport.html print(f"The report wit id {report_id} is creating") report_list = API.get_report_list() # Get report list, you can wait til the report will be ready, or just check it later. ref: https://yandex.ru/dev/direct/doc/dg-v4/reference/GetWordstatReportList.html last_report = report_list['data'][-1] while lastReport['StatusReport'] != 'Done': if lastReport['StatusReport'] == 'Failed': raise Exception('Failed to create report') else: print('Report is creating...') lastReport = API.get_report_list()['data'][-1] time.sleep(2) report = API.readReport( report_id) # Read report data by its id. ref: https://yandex.
ru/dev/direct/doc/dg-v4/reference/GetWordstatReport.html API.save_report_to_txt(report, searched_also_flag=True) # Save all data to txt, can be undone if not necessary response = API.delete_report( report_id) # Delete Wordstat report, it can be done when you reach report number limit(5 reports) if response['data'] == 1: print(f'Report with id {report_id} was successfully deleted')

Project details


This version

1.1

0.0.1

Download files

Download the file for your platform. If you’re not sure which to choose, learn more about installing packages.

Source Distribution

YandexWordstatAPI-1.1.tar.gz (3.9 kB view hashes)

Uploaded source

Built Distribution

YandexWordstatAPI-1.1-py3-none-any.whl (4.4 kB view hashes)

Uploaded py3