автоматизация запросов API
Добрый день всем кто это читает :) Буду благодарен за любую помощь. Ситуация следующая: по API одного из сервисов получаю данные о пользователях. Одним из возможных фильтров к запросам является фильтр дат создания пользователя.
"created_at[from]=YYYY-MM-DD created_at[to]=YYYY-MM-DD"
как мне автоматизировать запрос данных от сервиса на текущий день? (чтобы каждый новый день мой скрипт в 18:00 получал данные от сервиса самостоятельно, без моего вмешательства)
Ответы (2 шт):
Для вызова кода в определенные дни/время удобно использовать библиотеку 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
Если используете 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()