Exports your Douban collections (books, movies, music, games) to local CSV files because Douban killed their official API in 2018 and has no export feature. Uses the Frodo mobile API with proper HMAC auth since web scraping hits proof-of-work challenges. Handles full historical exports plus RSS for incremental syncs of recent items. No login needed, just a user ID from the profile URL. Works cross-platform with Excel-compatible UTF-8 output. Won't grab reviews or private profiles, and counts may be slightly off due to delisted items. The troubleshooting doc is thorough, documenting seven failed approaches before landing on this one. Solid choice if you're backing up years of Douban data or migrating to another system.
npx -y skills add daymade/claude-code-skills --skill douban-skill --agent claude-codeInstalls into .claude/skills of the current project.
Export Douban user collections (books, movies, music, games) to CSV files. Douban has no official data export; the official API shut down in 2018.
Douban uses PoW (Proof of Work) challenges on web pages, blocking all HTTP scraping.
We tested 7 approaches — only the Frodo API works. Do NOT attempt web scraping,
browser_cookie3+requests, curl with cookies, or Jina Reader.
See references/troubleshooting.md for the complete failure log of all 7 tested approaches and why each failed.
The API key and HMAC secret in the script are Douban's public mobile app credentials,
extracted from the APK. They are shared by all Douban app users and do not identify you.
No personal credentials are used or stored. Data is fetched only from frodo.douban.com.
DOUBAN_USER=<user_id> python3 scripts/douban-frodo-export.py
Finding the user ID: Profile URL douban.com/people/<ID>/ — the ID is after /people/.
If the user provides a full URL, the script auto-extracts the ID.
Environment variables:
DOUBAN_USER (required): Douban user ID (alphanumeric or numeric, or full profile URL)DOUBAN_OUTPUT_DIR (optional): Override output directoryDefault output (auto-detected per platform):
~/Downloads/douban-sync/<user_id>/%USERPROFILE%\Downloads\douban-sync\<user_id>\~/Downloads/douban-sync/<user_id>/Dependencies: Python 3.6+ standard library only (works with python3 or uv run).
Example console output:
Douban Export for user: your_douban_id
Output directory: /Users/you/Downloads/douban-sync/your_douban_id
=== 读过 (book) ===
Total: 639
Fetched 0-50 (50/639)
Fetched 50-100 (100/639)
...
Fetched 597-639 (639/639)
Collected: 639
=== 在读 (book) ===
Total: 75
...
--- Writing CSV files ---
书.csv: 996 rows
影视.csv: 238 rows
音乐.csv: 0 rows
游戏.csv: 0 rows
Done! 1234 total items exported to /Users/you/Downloads/douban-sync/your_douban_id
DOUBAN_USER=<user_id> node scripts/douban-rss-sync.mjs
RSS returns only the latest ~10 items (no pagination). Use Full Export first, then RSS for daily updates.
Four CSV files per user:
Downloads/douban-sync/<user_id>/
├── 书.csv (读过 + 在读 + 想读)
├── 影视.csv (看过 + 在看 + 想看)
├── 音乐.csv (听过 + 在听 + 想听)
└── 游戏.csv (玩过 + 在玩 + 想玩)
Columns: title, url, date, rating, status, comment
rating: ★ to ★★★★★ (empty if unrated)date: YYYY-MM-DD (when the user marked it)DOUBAN_USER=<id> python3 scripts/douban-frodo-export.pywc -l <output_dir>/*.csvSee references/troubleshooting.md for:
juliusbrussee/caveman
mattpocock/skills
shadcn/improve
obra/superpowers
forrestchang/andrej-karpathy-skills
vercel-labs/skills