Функция срабатывает 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 запрос на получение данных.

В чем заключается проблема:

  1. функция run срабатывает 2 раза (1 раз при запуске скрипта, второй раз по таймеру который установлен).
  2. данные которые я получаю при запуске скрипта записываются в переменную, а те которые получаю по таймеру нет! (по старому номеру экспорта нельзя получить данные).
  3. в while Truе я закоментил строку с таймеров, иначе все вообще перестает работать дальше 1 функции (run)

Это мой наверное 5 вопрос, буду очень благодарен если поможете мне все-таки закрыть данный вопрос :)


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

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

На вашем месте я бы использовал 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()
→ Ссылка