from apscheduler.schedulers.background import BackgroundScheduler from apscheduler.triggers.cron import CronTrigger import logging from datetime import datetime import os from tools.arxiv_tool import save_daily_papers # Configure logging logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('arxiv_scheduler.log'), logging.StreamHandler() ] ) logger = logging.getLogger(__name__) def scheduled_paper_search(): """Run the daily paper search and log the results.""" try: logger.info("Starting daily ArXiv paper search...") papers = save_daily_papers() logger.info(f"Found {len(papers)} new AI papers today") # Log paper titles if papers: logger.info("Today's papers:") for paper in papers: logger.info(f"- {paper['title']}") except Exception as e: logger.error(f"Error in scheduled paper search: {str(e)}") def initialize_scheduler(): """Initialize and start the scheduler.""" try: scheduler = BackgroundScheduler() # Schedule the job to run at 8 AM every day scheduler.add_job( scheduled_paper_search, trigger=CronTrigger(hour=8, minute=0), id='daily_arxiv_search', name='Daily ArXiv AI Paper Search', replace_existing=True ) # Start the scheduler scheduler.start() logger.info("Scheduler initialized and started") return scheduler except Exception as e: logger.error(f"Error initializing scheduler: {str(e)}") # Return a dummy scheduler object that does nothing class DummyScheduler: def shutdown(self): pass return DummyScheduler()