Задать вопрос
@vasiliy763
IT engineer

Запрос к API с помощью python?

Выполняю запрос к API с помощью скрипта на python и в ответ должен получить ссылку, но т.к. ответ иногда приходит пустой в котором нет ссылки, приходится повторять запрос еще раз. И к примеру на 2й или 3й повторяющийся запрос в ответ получаю необходимую ссылку. Подскажите пожалуйста как построить структуру такого повторяющегося запроса, м.б. в python есть какие-то специальные методы в данном случае? Или структура должна выглядеть во так?

response = requests(параметры запроса)

if если ответ пустой ждем 3 секунды и повторяем тот же самый запрос в elif
time.sleep(3)

elif если ответ пустой ждем 3 секунды и повторяем тот же самый запрос в elif
time.sleep(3)

elif если ответ пустой ждем 3 секунды и повторяем тот же самый запрос в elif
time.sleep(3)

elif если ответ пустой ждем завершаем процесс и выводим ошибку в else

else print("Ошибка ответ пустой!")

result_ = response.json()
return result_
  • Вопрос задан
  • 75 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 2
AshBlade
@AshBlade
Просто хочу быть счастливым
while True:
       response = requests()
       if not response.empty:
                break
       time.sleep(3)
Ответ написан
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
Tenacity
Tenacity is an Apache 2.0 licensed general-purpose retrying library, written in Python, to simplify the task of adding retry behavior to just about anything. It originates from a fork of retrying which is sadly no longer maintained.

Под Вашу задачу, это будет выглядеть примерно так:
import requests
from tenacity import retry, stop_after_attempt, wait_fixed

@retry(stop=stop_after_attempt(3), wait=wait_fixed(3))
def fetch():
    res = requests.get("https://site.ru")
    # res = requests.get("https://site.ru", params={"key": "value"})
    if res.status_code != 200:
        raise requests.exceptions.HTTPError(res.status_code)

    data = res.json()
    return data
    # return data["link"]

print(fetch())

- wait=wait_fixed(3) - ждать 2 секунды между попытками.
- stop=stop_after_attempt(3) - остановка после 3х попыток.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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