feat(pixiv): native app-API client — gallery-dl-parity profile, post-first seams (#129 step 1)
PixivClient mirrors gallery-dl 1.32.5's PixivAppAPI request profile exactly (iOS app headers, OAuth refresh with X-Client-Time/X-Client-Hash, /v1/user/illusts pagination via next_url — whose query string doubles as the resumable page cursor). Post-first seams (post_record_key / post_is_gated / post_meta) + extract_media covering multi-page, single-page, ugoira zip (600x600→1920x1080 swap, frame delays memoized for the post record), and limit_* placeholder gating. No PHPSESSID web fallback: FC holds only the refresh token, same effective coverage as the gallery-dl path. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CDgx8bQS5YrGRK76v8HUnM
This commit is contained in:
+129
@@ -0,0 +1,129 @@
|
||||
{
|
||||
"illusts": [
|
||||
{
|
||||
"id": 111,
|
||||
"title": "Multi Page Adventure",
|
||||
"type": "illust",
|
||||
"caption": "Two-page set. <a href=\"https://example.com/wip\">WIP thread</a>",
|
||||
"create_date": "2026-06-20T18:00:00+09:00",
|
||||
"user": {"id": 99, "name": "Example Artist", "account": "exartist"},
|
||||
"tags": [
|
||||
{"name": "オリジナル", "translated_name": "original"},
|
||||
{"name": "女の子", "translated_name": "girl"}
|
||||
],
|
||||
"page_count": 2,
|
||||
"width": 1200,
|
||||
"height": 1600,
|
||||
"x_restrict": 0,
|
||||
"series": {"id": 4242, "title": "Adventure Series"},
|
||||
"total_view": 1000,
|
||||
"total_bookmarks": 250,
|
||||
"is_bookmarked": false,
|
||||
"illust_ai_type": 1,
|
||||
"meta_single_page": {},
|
||||
"meta_pages": [
|
||||
{
|
||||
"image_urls": {
|
||||
"square_medium": "https://i.pximg.net/c/360x360_70/img-master/img/2026/06/20/18/00/00/111_p0_square1200.jpg",
|
||||
"original": "https://i.pximg.net/img-original/img/2026/06/20/18/00/00/111_p0.png"
|
||||
}
|
||||
},
|
||||
{
|
||||
"image_urls": {
|
||||
"square_medium": "https://i.pximg.net/c/360x360_70/img-master/img/2026/06/20/18/00/00/111_p1_square1200.jpg",
|
||||
"original": "https://i.pximg.net/img-original/img/2026/06/20/18/00/00/111_p1.png"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": 222,
|
||||
"title": "Single Piece",
|
||||
"type": "illust",
|
||||
"caption": "",
|
||||
"create_date": "2026-06-18T12:30:00+09:00",
|
||||
"user": {"id": 99, "name": "Example Artist", "account": "exartist"},
|
||||
"tags": [{"name": "落書き", "translated_name": "doodle"}],
|
||||
"page_count": 1,
|
||||
"width": 900,
|
||||
"height": 900,
|
||||
"x_restrict": 1,
|
||||
"series": null,
|
||||
"total_view": 500,
|
||||
"total_bookmarks": 60,
|
||||
"is_bookmarked": true,
|
||||
"illust_ai_type": 0,
|
||||
"meta_single_page": {
|
||||
"original_image_url": "https://i.pximg.net/img-original/img/2026/06/18/12/30/00/222_p0.jpg"
|
||||
},
|
||||
"meta_pages": []
|
||||
},
|
||||
{
|
||||
"id": 333,
|
||||
"title": "Wiggle Loop",
|
||||
"type": "ugoira",
|
||||
"caption": "animated",
|
||||
"create_date": "2026-06-15T09:00:00+09:00",
|
||||
"user": {"id": 99, "name": "Example Artist", "account": "exartist"},
|
||||
"tags": [{"name": "うごイラ", "translated_name": "ugoira"}],
|
||||
"page_count": 1,
|
||||
"width": 600,
|
||||
"height": 600,
|
||||
"x_restrict": 0,
|
||||
"series": null,
|
||||
"total_view": 300,
|
||||
"total_bookmarks": 40,
|
||||
"is_bookmarked": false,
|
||||
"illust_ai_type": 0,
|
||||
"meta_single_page": {
|
||||
"original_image_url": "https://i.pximg.net/img-original/img/2026/06/15/09/00/00/333_ugoira0.jpg"
|
||||
},
|
||||
"meta_pages": []
|
||||
},
|
||||
{
|
||||
"id": 444,
|
||||
"title": "Blocked Work",
|
||||
"type": "illust",
|
||||
"caption": "",
|
||||
"create_date": "2026-06-10T00:00:00+09:00",
|
||||
"user": {"id": 99, "name": "Example Artist", "account": "exartist"},
|
||||
"tags": [],
|
||||
"page_count": 1,
|
||||
"width": 0,
|
||||
"height": 0,
|
||||
"x_restrict": 2,
|
||||
"series": null,
|
||||
"total_view": 0,
|
||||
"total_bookmarks": 0,
|
||||
"is_bookmarked": false,
|
||||
"illust_ai_type": 0,
|
||||
"meta_single_page": {
|
||||
"original_image_url": "https://s.pximg.net/common/images/limit_sanity_level_360.png"
|
||||
},
|
||||
"meta_pages": []
|
||||
},
|
||||
{
|
||||
"id": 555,
|
||||
"title": "Ghost Work",
|
||||
"type": "illust",
|
||||
"caption": "",
|
||||
"create_date": "2026-06-01T00:00:00+09:00",
|
||||
"user": {"id": 0, "name": "", "account": ""},
|
||||
"tags": [],
|
||||
"page_count": 1,
|
||||
"width": 0,
|
||||
"height": 0,
|
||||
"x_restrict": 0,
|
||||
"series": null,
|
||||
"total_view": 0,
|
||||
"total_bookmarks": 0,
|
||||
"is_bookmarked": false,
|
||||
"illust_ai_type": 0,
|
||||
"meta_single_page": {
|
||||
"original_image_url": "https://i.pximg.net/img-original/img/2026/06/01/00/00/00/555_p0.png"
|
||||
},
|
||||
"meta_pages": []
|
||||
}
|
||||
],
|
||||
"next_url": "https://app-api.pixiv.net/v1/user/illusts?user_id=99&offset=30"
|
||||
}
|
||||
Reference in New Issue
Block a user