Функция срабатывает 2 раза (при запуске кода и по таймеру)
Что необходимо добиться: получить из 1 запроса export_id, положить его в переменную и отправить во втором запросе для получения данных. Выполнять это необходимо 1 раз в сутки в определенное время. Мой код: (P.S. логин и ключи доступа к api неверные)
import requests
import time
import schedule
import datetime as DT
import json
account_name = "100"
today_str = DT.datetime.now().strftime('%Y-%m-%d')
#Данные для запроса Export_ID
BASE_URL_EXPORT_ID = f"https://{account_name}.getcourse.ru/pl/api/account/users"
params_export_id = {'key' : '9NDOA',
'created_at[from]' : today_str,
'created_at[to]': today_str}
def run():
print('Получаем Export_id')
today_str = DT.datetime.now().strftime('%Y-%m-%d')
#получаем export_id
response = requests.get(BASE_URL_EXPORT_ID, params=params_export_id)
data = response.json()
print (data)
#пытаюсь сохранить данные для 2 части запроса :)
export_id = data['info']['export_id']
return export_id
export_id = run()
schedule.every().day.at("12:09").do(run)
#Данные для получение информации
params_data = {'key' : '9NDOA'}
BASE_URL_DATA = f"https://{account_name}.getcourse.ru/pl/api/account/exports/{export_id}"
def run1():
#получаю сами данные
response1 = requests.get(BASE_URL_DATA, params=params_data)
result1 = response1.json()
#print(response1.request.url)
#Отбираю нужные ключи из запроса
print(result1)
a = result1['info']['fields']
b = result1['info']['items']
#Делаю красиво :)
a_and_b = [dict(zip(a, x)) for x in b]
q = (json.dumps(a_and_b, indent=4, ensure_ascii=False))
print(q)
schedule.every().day.at("12:09").do(run1)
while True:
schedule.run_pending()
#time.sleep(1)
while True:
schedule.run1_pending()
#time.sleep(1)
по запросу export_id получаю: {'success': True, 'info': {'export_id': 378771}, 'error_message': '', 'error': False}
отсюда мне необходимо забрать значение export_id, в данном случае 378771 и положить его в переменную export_id которая в последствии уйдет во 2 запрос на получение данных.
В чем заключается проблема:
- функция run срабатывает 2 раза (1 раз при запуске скрипта, второй раз по таймеру который установлен).
- данные которые я получаю при запуске скрипта записываются в переменную, а те которые получаю по таймеру нет! (по старому номеру экспорта нельзя получить данные).
- в while Truе я закоментил строку с таймеров, иначе все вообще перестает работать дальше 1 функции (run)
Это мой наверное 5 вопрос, буду очень благодарен если поможете мне все-таки закрыть данный вопрос :)
Ответы (1 шт):
На вашем месте я бы использовал APscheduler. В примере код, который запускает job_function каждые 24 часа. Ваш код станет проще и чище настолько, что сами сможете дописать оставшийся функционал.
from apscheduler.schedulers.blocking import BlockingScheduler
def job_function():
print "Hello World"
sched = BlockingScheduler()
# Schedules job_function to be run every day
sched.add_job(job_function, 'interval', hours=24)
sched.start()