github nmcassa/letterboxdpy v6.6.0

2 hours ago

What's Changed

Major Features & Additions

  • User Data Excel Exporter (export_user_data_excel.py) (@fastfingertips in 67843f4)

    • Comprehensive multi-sheet workbook generation across 12 distinct datasets: Overview, Watched Films, Diary, Reviews, Watchlist, Ratings Breakdown, Liked Films, Liked Reviews, Lists, Liked Lists, Following, Followers.
    • Professional Layout & Typography: Fixed frozen headers (A2), auto-filter dropdowns, 26pt header padding, 21pt data rows, and alternating zebra striping (#F8FAFC).
    • Conditional Formatting:
      • In-cell Letterboxd-green Data Bars on rating distribution counts (00E054).
      • 3-color soft gradient for film ratings (1.0 peach -> 3.0 yellow -> 5.0 soft green).
      • Status highlights for "Yes" (liked, rewatch, reviewed) and "Spoiler" flags.
      • Subtle blue gradient for film runtimes.
    • Smart Data Types: True numeric formatting (#,##0 counts, 0.0 ratings, raw text years/IDs) allowing native Excel formulas (SUM, AVERAGE, COUNT) and number filters.
    • Clickable Hyperlinks: Automatically converts movie, review, and profile URLs into native clickable links (#0969DA).
    • Tab Colors: Themed sheet tabs matching Letterboxd's visual identity (green for films, orange for reviews, cyan for lists, slate for social).
    • Robust CLI & File Locking: Added --force (-f), --runtime (-r), and --open (-o) flags with non-crashing PermissionError recovery when the spreadsheet is currently open in Excel.
  • Multithreaded Diary Runtime Forwarding (@fastfingertips in 1b681eb)

    • User.get_diary and related diary methods (get_diary_year, get_diary_month, get_diary_day, get_wrapped) now expose fetch_runtime: bool = False and max_workers: int | None = None.
    • Allows resolving missing film runtimes concurrently using a worker pool, drastically cutting down runtime extraction time.
  • Profile Badges & Backdrop Support (@fastfingertips in 6f7c485, 9c65189, 88785f3)

    • Replaced binary is_hq boolean with badge: str ("member", "pro", "patron", "hq").
    • Added backdrop URL extraction on User profile.
    • Introduced generic @skip_if and @skip_if_hq decorators to gracefully bypass endpoints unavailable for specific subscription tiers.
  • New CLI Tools & Options (@fastfingertips in c2fb86a, 9c4ffea)

    • Added --open (-o) flag across example scripts to automatically launch generated HTML and Excel reports in the default system viewer.
    • Added network_balance_analyzer.py example tool with HTML reporting for mutual follower analysis.

Bug Fixes & Improvements

  • List Comments & Likes Count Parsing: Updated CSS selectors in lists_extractor.py and user_likes.py to match Letterboxd's updated DOM structure, restoring like and comment count extraction on list summaries (@fastfingertips in 364e333).
  • Liked Reviews Parsing: Corrected user display name/author extraction and added robust star rating parsing helper (parse_rating) (@fastfingertips in 0340bee).
  • Display Name Sanitization: Fixed display name extraction to use the header element and properly strip badge suffixes (HQ, PRO, PATRON) from user display names (@fastfingertips in c83c2e6, 7e5b7ae).
  • Full Data Export: Enhanced export_user_data.py (v0.1.1) with structured error handling and complete JSON endpoint exports (@fastfingertips in 19c6651).
  • Watchlist Comparison Optimization: Optimized compare_watchlists.py (v0.1.5) performance for HQ and private accounts with improved sort arrow visibility (@fastfingertips in 510b960, fd28a4d, 3506cfd).

Dependencies

  • Added openpyxl>=3.0.0 under optional dependency extra: pip install "letterboxdpy[examples]" (@fastfingertips in 67843f4).

Commit Details

  • ba7cbc0 chore: bump version to 6.6.0 by @fastfingertips
  • 67843f4 feat(examples): add user data excel exporter (v0.1.0) by @fastfingertips
  • 19c6651 feat(examples): improve export_user_data with error handling and full data export (v0.1.1) by @fastfingertips
  • 1b681eb feat(user): forward fetch_runtime and max_workers across diary methods by @fastfingertips
  • 364e333 fix(lists): update likes and comments selectors for list summaries by @fastfingertips
  • 0340bee fix(likes): fix liked reviews parsing and add parse_rating helper by @fastfingertips
  • 3506cfd style(templates): improve sort arrow visibility in tables by @fastfingertips
  • 510b960 feat(examples): improve compare_watchlists report (v0.1.5) by @fastfingertips
  • c2fb86a feat(examples): add --open flag to launch html reports in browser by @fastfingertips
  • fd28a4d perf(examples): optimize compare_watchlists for hq and private accounts (v0.1.3) by @fastfingertips
  • 9c65189 feat(user): add backdrop support and generic skip_if decorator by @fastfingertips
  • 6f7c485 feat(user): replace is_hq with badge attribute by @fastfingertips
  • 88785f3 feat(user_profile): add skip_if_hq decorator by @fastfingertips
  • c83c2e6 fix(user_profile): improve display name extraction using header element and suffix cleanup by @fastfingertips
  • 7e5b7ae fix(user_profile): update hq status extraction with badge and body class check by @fastfingertips
  • 02c926a docs: update star history chart in README by @fastfingertips
  • 9c4ffea feat(examples): add network balance analyzer script and template by @fastfingertips
  • f12804d docs: update examples README with usage and output details by @fastfingertips
  • 5045c58 feat(examples): make target username linkable in header partial by @fastfingertips

Full Changelog: v6.5.13...v6.6.0

Don't miss a new letterboxdpy release

NewReleases is sending notifications on new releases.