42 lines
No EOL
1.3 KiB
Python
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) |