Как получать тексты «Балабобы» через Python?

Я очень сильно хочу генерировать ответы балабобы через Python.
Я нашел в браузере какой запрос делает сайт и с какими параметрами 60d579af1ec5d409752151.png
60d579c70fb10756791268.png
Но когда я пытаюсь это сделать через Python, получаю Response 403
from requests import post

params = {
    'query': 'Text',
    'filter': '1',
    'intro': '11'
}

url = "https://zeapi.yandex.net/lab/api/yalm/text3"

req = post(url=url, params=params)
print(req)

Как я могу изменить код, что бы получать сгенерированные ответы?
  • Вопрос задан
  • 3224 просмотра
Решения вопроса 1
deepblack
@deepblack Куратор тега Python
Пригласить эксперта
Ответы на вопрос 7
@slikkness
Фиксится установкой Python 3.7.3
Ответ написан
Ichi
@Ichi
Увлекаюсь программированием
Летом надо было отправлять пустые куки. Сейчас же проверяется сертификат откуда пришел запрос, и отдается ответ только в случае доверенного хоста (Яндекс). Возможно прокатит вариант из cloudYandex
Ответ написан
Комментировать
@rPman
внимательнее смотри что за запрос в браузере, куки например.
Ответ написан
Комментировать
SoreMix
@SoreMix Куратор тега Python
yellow
Параметр params отвечает за GET параметры. Вам же нужно передавать тело в параметр json
req = post(url=url, json=params)
print(req.json()['text'])
Ответ написан
ramzis
@ramzis
FullStackOverflow
Должен буш)

import requests

def exoooy(text):
    headers = {'Content-Type': 'application/json'}
    json = {"query":text,"intro":0,"filter":1}
    return requests.post('https://zeapi.yandex.net/lab/api/yalm/text3',
                        json=json, headers=headers).json()
print(exoooy('Привет HABR'))
Ответ написан
@ledza228
Может кому-то еще будет полезно как это решить. Если вам отдается 403, то вероятнее всего проблема с версией ssl.

Достаточно написать такой адаптер
class MyAdapter(HTTPAdapter):
    def init_poolmanager(self, connections, maxsize, block=False):
        self.poolmanager = PoolManager(num_pools=connections,
                                       maxsize=maxsize,
                                       block=block,
                                       ssl_version=ssl.PROTOCOL_TLSv1)


И примаунтить его к сессии
s = Session()
s.mount("https://",MyAdapter())


импорты:
import ssl
from requests import Session
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.poolmanager import PoolManager
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы