автоматизация запросов API

Добрый день всем кто это читает :) Буду благодарен за любую помощь. Ситуация следующая: по API одного из сервисов получаю данные о пользователях. Одним из возможных фильтров к запросам является фильтр дат создания пользователя.

"created_at[from]=YYYY-MM-DD created_at[to]=YYYY-MM-DD"

как мне автоматизировать запрос данных от сервиса на текущий день? (чтобы каждый новый день мой скрипт в 18:00 получал данные от сервиса самостоятельно, без моего вмешательства)


Ответы (2 шт):

Автор решения: gil9red

Для вызова кода в определенные дни/время удобно использовать библиотеку schedule (pip install schedule)

import time
import schedule

def run():
    print('Запуск')
    # Добавите запрос в API

# Каждый день в 18:00
schedule.every().day.at("18:00").do(run)

while True:
    schedule.run_pending()
    time.sleep(1)

А для получения текущей даты используйте модуль datetime с форматирование даты в строку по шаблону:

import datetime as DT

today_str = DT.datetime.now().strftime('%Y-%m-%d')
# Или: today_str = f'{DT.datetime.now():%Y-%m-%d}'
query = f"created_at[from]={today_str} created_at[to]={today_str}"
print(query)
# created_at[from]=2021-07-26 created_at[to]=2021-07-26
→ Ссылка
Автор решения: Andy Pavlov

Если используете Linux, то можно использовать встроенный в него планировщик заданий Cron, для которого можно выставлять задания, которые будут выполняться даже в случае перезагрузки сервера.

Для Python есть библиотека, упрощающая работу с заданиями в нем, python-crontab. Вариант делать задание каждую минуту:

from crontab import CronTab

cron = CronTab(user=True)
job = cron.new(command='python /home/user/stackoverflow/make_write.py')
job.minute.every(1)

cron.write()

Если нужно делать по времени в 18:00, то меняем job.minute.every(1) на job.setall(time(18, 0)) и добавляем в файл from datetime import time

from datetime import time    
from crontab import CronTab

cron = CronTab(user=True)
job = cron.new(command='python /home/user/stackoverflow/make_write.py')
job.setall(time(18, 0))

cron.write()

Файл make_write.py:

with open('/home/user/stackoverflow/text.txt', 'a') as file:
    file.write('Hello')

Вывести все имеющиеся задания:

cron = CronTab(user=True)
for job in cron:
    print(job)

Удалить все задания:

cron.remove_all()
→ Ссылка