#!/usr/bin/env python3 """ Упрощенный веб-интерфейс без сложных БД запросов """ from fastapi import FastAPI from fastapi.responses import HTMLResponse import uvicorn app = FastAPI(title="Система аудита отелей") @app.get("/") async def root(): return HTMLResponse(""" Аудит Отелей - Общественный Контроль

🏨 Система аудита отелей

33,773
Всего отелей
115
Спарсено сайтов
239
Проведено аудитов
11.0
Средний балл

📊 Статус по регионам

Регион Отелей Спарсено Проверено Средний балл Действия
Камчатский край 159 82 159 10.8/20
Орловская область 68 29 68 10.6/20
Чукотский автономный округ 12 4 12 11.7/20 Старый аудит
""") @app.get("/api/stats") async def get_stats(): """Упрощенная статистика""" return { "total_hotels": 33773, "crawled_sites": 115, "audited_hotels": 239, "avg_score": 11.0, "regions": [ {"region_name": "Камчатский край", "total_hotels": 159, "crawled": 82, "audited": 159, "avg_score": 10.8}, {"region_name": "Орловская область", "total_hotels": 68, "crawled": 29, "audited": 68, "avg_score": 10.6}, {"region_name": "Чукотский автономный округ", "total_hotels": 12, "crawled": 4, "audited": 12, "avg_score": 11.7} ] } @app.get("/api/audit/download/{region}") async def download_audit(region: str): """Скачать Excel отчет по аудиту""" import os from fastapi.responses import FileResponse # Ищем последний файл аудита для региона region_safe = region.replace(' ', '_') audit_dir = '/root/engine/public_oversight/hotels' try: files = [f for f in os.listdir(audit_dir) if f.startswith(f'audit_{region_safe}') and f.endswith('.xlsx')] if not files: return {"error": f"Файл аудита для региона '{region}' не найден. Сначала запустите аудит."} # Берем последний файл (по дате в имени) files.sort(reverse=True) latest_file = files[0] file_path = os.path.join(audit_dir, latest_file) return FileResponse( path=file_path, filename=latest_file, media_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' ) except Exception as e: return {"error": str(e)} if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8889)