sheets/downloader.py
2025-08-22 04:42:18 +03:00

42 lines
No EOL
1.3 KiB
Python

# downloader.py
import logging
import zipfile
import requests
from config import HTML_FILENAME, XLSX_FILENAME, XLSX_URL, ZIP_FILENAME, ZIP_URL
logger = logging.getLogger(__name__)
def _download_file(url: str, filename: str, timeout: int = 30) -> bool:
logger.info(f"🔄 Downloading {filename}...")
try:
with requests.get(url, timeout=timeout) as r:
r.raise_for_status()
with open(filename, "wb") as f:
f.write(r.content)
logger.info(f"✅ Saved {filename}")
return True
except requests.RequestException as e:
logger.error(f"❌ Failed to download {filename}: {e}")
return False
def download_zip_and_extract_html():
if not _download_file(ZIP_URL, ZIP_FILENAME):
return
logger.info(f"📦 Extracting {HTML_FILENAME} from {ZIP_FILENAME}...")
try:
with zipfile.ZipFile(ZIP_FILENAME, "r") as z:
html_content = z.read(HTML_FILENAME)
with open(HTML_FILENAME, "wb") as f:
f.write(html_content)
logger.info(f"✅ Extracted {HTML_FILENAME}")
except (zipfile.BadZipFile, KeyError, FileNotFoundError) as e:
logger.error(f"❌ Failed to extract {HTML_FILENAME}: {e}")
def download_xlsx():
_download_file(XLSX_URL, XLSX_FILENAME)