working app

This commit is contained in:
Aron Petau 2025-12-29 22:46:10 +01:00
parent 8e69e30387
commit 3057cda8d3
12 changed files with 708 additions and 232 deletions

35
main.py
View file

@ -45,8 +45,17 @@ async def main():
# Initialize state manager
state_manager = StateManager(Path("data/state.json"))
# --- Playwright browser/context setup ---
playwright = await async_playwright().start()
browser = await playwright.chromium.launch(headless=True)
browser_context = await browser.new_context(
user_agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36"
)
logger.info("Playwright browser context initialized.")
# Application handler manages browser/context
app_handler = ApplicationHandler(None, state_manager)
app_handler = ApplicationHandler(browser_context, state_manager)
# Set up Telegram bot and inject into handler, passing the main event loop
event_loop = asyncio.get_running_loop()
@ -58,8 +67,6 @@ async def main():
wg_notifier = WGCompanyNotifier(telegram_bot=telegram_bot, refresh_minutes=10)
wg_task = asyncio.create_task(wg_notifier.run())
await app_handler.init_browser()
try:
logger.info(f"Bot is now running. Refreshing every {CHECK_INTERVAL} seconds...")
@ -72,7 +79,22 @@ async def main():
continue
previous_listings = app_handler.load_previous_listings()
if not previous_listings:
logger.info(f"First run - saving {len(current_listings)} listings as baseline")
logger.info(f"First run - saving {len(current_listings)} listings as baseline and marking as failed applications")
# Mark all as failed applications so /retryfailed can be used
for listing in current_listings:
result = {
"listing_id": listing.get("id"),
"company": app_handler._detect_company(listing.get("link", "")),
"link": listing.get("link"),
"timestamp": str(listing.get("timestamp", "")) or str(listing.get("date", "")) or "",
"success": False,
"message": "First run, not auto-applied. Use /retryfailed to attempt.",
"address": listing.get("address", ""),
"rooms": listing.get("rooms", ""),
"price": listing.get("price", ""),
"retries": 0
}
app_handler.save_application(result)
app_handler.save_listings(current_listings)
await asyncio.sleep(CHECK_INTERVAL)
_flush_rotating_file_handlers()
@ -94,9 +116,8 @@ async def main():
except Exception as e:
logger.error(f"[MAIN] Error in main loop: {e}")
finally:
if hasattr(app_handler, 'browser') and app_handler.browser:
await app_handler.browser.close()
logger.info("Browser closed successfully.")
await browser.close()
logger.info("Browser closed successfully.")
if __name__ == "__main__":
asyncio.run(main())