mirror of
https://github.com/jackwener/OpenCLI.git
synced 2026-09-14 18:25:42 +08:00
d36a43e805
* feat(pixiv): add Pixiv adapter with 6 commands Add support for Pixiv (pixiv.net) with the following commands: - ranking: daily/weekly/monthly illustration rankings - search: search illustrations by keyword/tag - user: view artist profile info - illusts: list illustrations by artist - detail: view illustration details (tags, stats) - download: download original-quality images All commands use COOKIE strategy to reuse Chrome's logged-in session. YAML adapters for simple API fetches (ranking, detail, user), TypeScript for complex logic (search, illusts, download with Referer header). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * test(pixiv): add unit tests and E2E auth failure tests - search.test.ts: auth error, result parsing, limit, empty results (4 tests) - illusts.test.ts: auth error, empty user, two-step fetch, limit (4 tests) - download.test.ts: auth error, no images, Referer header, partial failure (4 tests) - Add pixiv to vitest adapter project include list - Add 5 pixiv commands to E2E browser-auth graceful failure tests Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(pixiv): correct ranking API path and YAML arg naming - ranking: use /ranking.php?format=json (not /ajax/ranking which 404s) - ranking: fix JSON path from data.body.contents to data.contents - user/detail: rename hyphenated args (user-id → uid, illust-id → id) to fix YAML template evaluation (dot access doesn't support hyphens) All 6 commands verified working against live Pixiv API. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(pixiv): use JSON.stringify to prevent code injection in page.evaluate Address CodeRabbit review: all user inputs (query, userId, illustId, idsParam) passed to page.evaluate are now serialized via JSON.stringify instead of direct string interpolation, preventing code injection in browser context. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor(pixiv): address code review feedback - ranking.yaml: add | json filter to page/limit args for defense-in-depth - user.yaml: guard illusts/manga/novels with typeof check for robustness - Extract shared createPageMock to test-utils.ts, deduplicate across 3 test files Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor(pixiv): use minimal page mock and add download E2E test - test-utils.ts: slim down to minimal mock (goto, evaluate, getCookies) with overrides support, matching upstream's pragmatic mock style - Add missing download command to E2E browser-auth graceful failure tests Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(pixiv): address all remaining CodeRabbit review comments - detail.yaml: add url to columns to match description mentioning "URLs" - All adapters: differentiate HTTP errors — 401/403 → AuthRequiredError, 404 → "not found", others → generic "request failed (HTTP N)" - Tests: use beforeAll to cache registry lookup, avoiding repeated reads from global singleton - Tests: assert error type (AuthRequiredError) not just message content - Tests: add dedicated test cases for non-auth errors (500) and 404 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs(pixiv): add adapter docs and indexes - Add pixiv.md documentation page under docs/adapters/browser/ - Update docs/adapters/index.md with pixiv entry - Add Pixiv to sidebar in docs/.vitepress/config.mts - Update README.md and README.zh-CN.md adapter tables - Add pixiv to download support tables in both READMEs Completes the documentation checklist for the pixiv adapter PR. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(pixiv): address code review findings - Use CommandExecutionError instead of raw Error for HTTP failures - Add page.goto() before page.evaluate() to establish browser context - Fix search keyword double-encoding in URL construction - Fix ranking.yaml using rating_count instead of illust_bookmark_count - Throw on batch detail fetch failure instead of silent empty return - Add beforeEach mock reset in download tests - Add novels column to user.yaml output Ensures pixiv adapter follows upstream CliError conventions and handles edge cases correctly before submitting to upstream. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs(pixiv): improve download description in READMEs - Replace technical Referer header detail with user-facing description - Describe what users care about: original quality and multi-page support Technical details belong in code comments, not user-facing docs. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs(pixiv): expand usage examples with all options - Add ranking mode examples including R18 variants - Add search filter examples (mode, order, pagination) - Organize examples by command category for readability Users need to know available options without reading source code. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(pixiv): address second round of CodeRabbit review comments - Validate illust-id is numeric to prevent path traversal - Move URL parsing inside per-item try block for graceful error handling - Add auth error handling for batch detail request (consistent with step 1) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * refactor(pixiv): extract shared pixivFetch helper, add input validation & batch support - Create utils.ts with pixivFetch() for unified navigate + fetch + error handling - Refactor search.ts, illusts.ts, download.ts to use pixivFetch (DRY) - Add user-id/illust-id numeric validation in TS adapters - Add batch pagination in illusts.ts for limit > 48 (Pixiv server limit) - Add comment explaining Pixiv search API dual keyword requirement - Update tests: new invalid-ID test cases, aligned mock format with pixivFetch --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: jackwener <jakevingoo@gmail.com>
2.1 KiB
2.1 KiB
Pixiv
Mode: 🔐 Browser · Domain: www.pixiv.net
Commands
| Command | Description |
|---|---|
opencli pixiv ranking |
Daily/weekly/monthly illustration rankings |
opencli pixiv search <query> |
Search illustrations by keyword or tag |
opencli pixiv user <uid> |
View artist profile info |
opencli pixiv illusts <user-id> |
List illustrations by artist |
opencli pixiv detail <id> |
View illustration details |
opencli pixiv download <illust-id> |
Download original-quality images |
Usage Examples
Ranking
# Daily rankings (default)
opencli pixiv ranking --limit 10
# Weekly / monthly rankings
opencli pixiv ranking --mode weekly
opencli pixiv ranking --mode monthly
# R18 rankings
opencli pixiv ranking --mode daily_r18
opencli pixiv ranking --mode weekly_r18
# Other modes: rookie, original, male, female
opencli pixiv ranking --mode rookie
Search
# Search by keyword or tag
opencli pixiv search "初音ミク" --limit 20
# Filter by content rating
opencli pixiv search "風景" --mode safe # Safe-for-work only
opencli pixiv search "風景" --mode r18 # R18 only
opencli pixiv search "風景" --mode all # All (default)
# Sort by popularity
opencli pixiv search "VOCALOID" --order popular_d
# All sort options: date_d (newest), date (oldest), popular_d, popular_male_d, popular_female_d
# Pagination
opencli pixiv search "オリジナル" --page 2 --limit 30
User & Illustrations
# View artist profile
opencli pixiv user 11
# List artist's illustrations (newest first)
opencli pixiv illusts 11 --limit 10
# View illustration details (tags, stats, type)
opencli pixiv detail 12345678
Download
# Download all images from an illustration
opencli pixiv download 12345678
# Download to a custom directory
opencli pixiv download 12345678 --output ./my-images
Output Formats
# JSON output
opencli pixiv ranking -f json
# Verbose mode
opencli pixiv search "test" -v
Prerequisites
- Chrome running and logged into pixiv.net
- Browser Bridge extension installed