# bundle_checker.py import logging import os from datetime import datetime from bundle_parser import BundleParser from models import Base, Bundle, BundleVersion, BundleSalesHistory, BundleItem # === Logging-Konfiguration === # Eigener Formatter, der lange Nachrichten für den Konsolen-Output kürzt class TruncateFormatter(logging.Formatter): def __init__(self, fmt=None, datefmt=None, max_length=300): super().__init__(fmt, datefmt) self.max_length = max_length def format(self, record): message = super().format(record) if len(message) > self.max_length: return message[:self.max_length] + " ... [truncated]" return message # Erstelle einen Logger logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) # Datei-Handler: Schreibt alle Logeinträge in eine Datei mit Zeitstempel im Dateinamen timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") log_filename = f"bundle_checker_{timestamp}.log" file_handler = logging.FileHandler(log_filename) file_handler.setLevel(logging.DEBUG) file_formatter = logging.Formatter("%(asctime)s [%(levelname)s] %(message)s", "%Y-%m-%d %H:%M:%S") file_handler.setFormatter(file_formatter) # Konsolen-Handler: Gibt verkürzte Nachrichten aus console_handler = logging.StreamHandler() console_handler.setLevel(logging.DEBUG) console_formatter = TruncateFormatter("%(asctime)s [%(levelname)s] %(message)s", "%Y-%m-%d %H:%M:%S", max_length=300) console_handler.setFormatter(console_formatter) # Füge beide Handler zum Logger hinzu logger.addHandler(file_handler) logger.addHandler(console_handler) # === Ende Logging-Konfiguration === def main(): overview_url = "https://www.humblebundle.com/bundles" # Wähle hier die gewünschte Kategorie, z. B. "books", "games" oder "software" category = "books" logger.info("Extrahiere Bundle-URLs von der Übersichtsseite ...") overview_parser = BundleParser(overview_url, category=category) bundle_urls = overview_parser.get_bundle_urls() logger.info(f"Gefundene {len(bundle_urls)} Bundle-URLs für Kategorie '{category}'.") for url in bundle_urls: logger.info(f"Verarbeite Bundle: {url}") parser = BundleParser(url) try: bundle_data = parser.get_relevant_bundle_data() logger.info(f"Detaildaten: {bundle_data}") items = parser.parse_items() logger.info(f"Extrahierte Items: {items}") except Exception as e: logger.error(f"Fehler bei {url}: {e}") if __name__ == "__main__": main()