Задать вопрос

Как получать тексты «Балабобы» через 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)

Как я могу изменить код, что бы получать сгенерированные ответы?
  • Вопрос задан
  • 3237 просмотров
Подписаться 5 Средний 1 комментарий
Решения вопроса 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
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы