From 899e8a0d5401dcb3ea6c539617fdb0ade667946d Mon Sep 17 00:00:00 2001 From: Lucas Winther Date: Thu, 15 Oct 2026 14:17:16 +0200 Subject: [PATCH] docs: spec 004 (KakaoPage source), its plan, and captured KakaoPage fixtures Co-Authored-By: Claude Opus 5.5 --- docs/plans/004-kakaopage.md | 34 ++++++++++ docs/specs/004-kakaopage.md | 64 +++++++++++++++++++ .../kakaopage/overview-52654302-novel.json | 1 + .../fixtures/kakaopage/overview-54845189.json | 1 + .../kakaopage/overview-63659962-19.json | 1 + .../wayback/kakaopage-54845189-2020.html | 32 ++++++++++ .../wayback/kakaopage-54845189-2022.html | 28 ++++++++ .../wayback/kakaopage-54845189-2024.html | 29 +++++++++ .../kakaopage-54845189-cdx-content.txt | 48 ++++++++++++++ .../wayback/kakaopage-54845189-cdx-home.txt | 17 +++++ 10 files changed, 255 insertions(+) create mode 100644 docs/plans/004-kakaopage.md create mode 100644 docs/specs/004-kakaopage.md create mode 100644 test/fixtures/kakaopage/overview-52654302-novel.json create mode 100644 test/fixtures/kakaopage/overview-54845189.json create mode 100644 test/fixtures/kakaopage/overview-63659962-19.json create mode 100644 test/fixtures/wayback/kakaopage-54845189-2020.html create mode 100644 test/fixtures/wayback/kakaopage-54845189-2022.html create mode 100644 test/fixtures/wayback/kakaopage-54845189-2024.html create mode 100644 test/fixtures/wayback/kakaopage-54845189-cdx-content.txt create mode 100644 test/fixtures/wayback/kakaopage-54845189-cdx-home.txt diff --git a/docs/plans/004-kakaopage.md b/docs/plans/004-kakaopage.md new file mode 100644 index 0000000..ba974ba --- /dev/null +++ b/docs/plans/004-kakaopage.md @@ -0,0 +1,34 @@ +# KakaoPage source — implementation plan + +> superpowers:executing-plans (native). **Spec:** [`docs/specs/004-kakaopage.md`](../specs/004-kakaopage.md). + +**Goal:** a `kakaopage` Source registered next to `webtoons` and `tapas`, plus per-host request headers. + +## Global constraints +`src/core` pure; tests offline on captured fixtures (done); no new dependencies. + +## Review focus +1. `seriesId=N` must not match `N0` in Wayback rows. → Task 1 test, Task 4 history test. +2. A series without `land_thumbnail` (19+ edition) → one cover, no crash. → Task 3 test. +3. Old `dn-img-page.kakao.com …&filename=th3` URLs normalise to the original. → Task 1 test. +4. The Referer reaches `bff-page.kakao.com` through both the server proxy and the userscript. → Task 2 tests. +5. An unknown id gives a clear error. → Task 4 test. + +### Task 1: URLs (`kakaopage/urls.ts`) +- [ ] Links (`/content/N`, `/home?seriesId=N`, `m.`), rejects; `normalizeImageUrl`; `isSameKakaoSeries`; + `overviewUrl(id)`. RED → GREEN → commit. + +### Task 2: Request headers (`core/transport.ts`, `server/app.ts`, `userscript/gm.ts`) +- [ ] `requestHeadersFor(url)`; the server proxy and `gmTransport` send it (tests on both). RED → GREEN → commit. + +### Task 3: Parsing (`kakaopage/parse.ts`) +- [ ] `parseOverview(json)` (comic, novel, 19+ without land thumbnail, error body); `extractCovers(html, pageUrl)` + for 2020/2022/2024 captures. RED → GREEN → commit. + +### Task 4: Source and registry +- [ ] `kakaopage` Source through `FakeTransport` (resolve, currentCovers, unknown id, Wayback over both CDX + fixtures keeps only this id); registry, allowlists, `@connect`, hint copy; README, ARCHITECTURE, DECISIONS. + RED → GREEN → commit. + +### Task 5: Verify and finish +- [ ] Real run in headless Chrome; final review; remove this plan; merge; push. diff --git a/docs/specs/004-kakaopage.md b/docs/specs/004-kakaopage.md new file mode 100644 index 0000000..2f59889 --- /dev/null +++ b/docs/specs/004-kakaopage.md @@ -0,0 +1,64 @@ +--- +status: approved +--- + +# 004 — KakaoPage source + +A third source (spec 001 §4.1): covers of a [KakaoPage](https://page.kakao.com) series, comics (웹툰) and +novels (웹소설). Design approved by the user in chat on 2026-10-15. Kakao Webtoon (`webtoon.kakao.com`) is a +different site and out of scope. + +## 1. Verified facts (2026-10-15) + +Checked against *악역의 엔딩은 죽음뿐* (Villains Are Destined to Die; comic 54845189, novel 52654302) and +*울프 인더 하우스 [19세 완전판]* (63659962, 19+). Fixtures in `test/fixtures/kakaopage/` and +`test/fixtures/wayback/kakaopage-*`. + +- **Pages are rendered in the browser.** `page.kakao.com/content/` is an 11 KB shell with a generic + `og:image`; the data comes from + `GET https://bff-page.kakao.com/api/gateway/api/v1/content/overview?series_id=`. +- **That endpoint needs a `page.kakao.com` Referer (or Origin)**; without one it answers 403. It answers 19+ + series without a login. +- **Its `result.content`:** `series_id`, `title`, `category` (`웹툰` / `웹소설`), `age_grade` (0, 12, 15, 19), + `lang` (`ko`), `thumbnail` (portrait key, e.g. 720×1030), `land_thumbnail` (landscape key, 540×370; may be null). + An unknown id answers with an error (`상품 정보를 찾을 수 없습니다`, "product not found"). +- **Images:** `https://page-images.kakaoentcdn.com/download/resource?kid=&filename=o1` is the original + (`th2`, `th3` and `/dims/resize/…` are smaller). No Referer needed. Older pages use `dn-img-page.kakao.com` with + the same query; old keys answer on the new host. +- **Wayback:** `page.kakao.com/home?seriesId=` (the old address, 2020–2022) and `page.kakao.com/content/` + (2022 on) are captured server-rendered. Every capture's `og:image` is this series' image (landscape in 2020–22, + portrait in 2024). 2020 captures also hold `props.initialState.series.series.thumbnailUrl` and + `landThumbnailUrl` in `__NEXT_DATA__`. Other images on the page (`sameSeriesList`, comments) are other series + or users. + +## 2. Behaviour + +- **Links:** `page.kakao.com/content/` (with or without a trailing path/query) and + `page.kakao.com/home?seriesId=`; `m.` hosts too. +- **Series:** from the overview endpoint: `externalId` = id, `title`, `language` = `lang` (`ko`), + `canonicalUrl` = `https://page.kakao.com/content/`, `mature` = `age_grade >= 15` (the rating warning), + `flags.novel`, `archiveUrls` = [`page.kakao.com/content/`, `page.kakao.com/home?seriesId=`]. +- **Current covers:** `thumbnail` → role `poster` (the suggested main cover), `land_thumbnail` → role `banner`. +- **History:** from a capture: `og:image` (role `other`: portrait or landscape, the shape decides the type) and, + when present, the series' own `thumbnailUrl` (`poster`) and `landThumbnailUrl` (`banner`). +- **Same series:** a link is the same series when its id (`/content/` or `seriesId=`) equals ours exactly, + so `seriesId=548451890` is another series. +- **Image URLs:** both hosts → `page-images.kakaoentcdn.com`, `filename=o1`, the `kid` kept, any `/dims/…` + dropped. +- **Request headers per host:** `requestHeadersFor(url)` in `core/transport.ts` (User-Agent as before, plus + `Referer: https://page.kakao.com/` for `bff-page.kakao.com`). The server proxy and the userscript send them. +- **Hosts:** fetch `page.kakao.com`, `m.page.kakao.com`, `bff-page.kakao.com`, `page-images.kakaoentcdn.com`, + `dn-img-page.kakao.com`; images the last two. The userscript `@connect`s `kakao.com` and `kakaoentcdn.com`. +- **Chrome:** the link hint names "WEBTOON, Tapas or KakaoPage". + +## 3. Testing + +Offline unit tests on the captures: link parsing, URL normalisation, same-series, overview parsing (comic, +novel, 19+, unknown id), archived pages (2020, 2022, 2024), Wayback rows through both prefixes, request headers. +Then a real run in headless Chrome (current covers, then yearly history). + +## 4. Risks + +- The overview endpoint is an internal API: its shape or its Referer check can change. +- Sending a `page.kakao.com` Referer is what KakaoPage's own page sends; like the browser User-Agent for + Webtoons, it is a browser-like header, not an identity. diff --git a/test/fixtures/kakaopage/overview-52654302-novel.json b/test/fixtures/kakaopage/overview-52654302-novel.json new file mode 100644 index 0000000..8edd581 --- /dev/null +++ b/test/fixtures/kakaopage/overview-52654302-novel.json @@ -0,0 +1 @@ +{"result":{"page_continue":{"first_read_product_id":52664650,"first_read_product_title":"악역의 엔딩은 죽음뿐 1화","first_read_is_free":true,"has_new_single":true,"has_unread_single":true},"related_series":{"code":"O","item":{"service_property":{},"operator_property":{},"asset_property":{},"series_id":54845189,"title":"악역의 엔딩은 죽음뿐","thumbnail":"mW3j5/dJMcaacSrAK/WVoJJAYNlS9rayXUWi6AY0","category_uid":10,"category":"웹툰","sub_category_uid":69,"sub_category":"로판","is_all_free":false,"is_waitfree":true,"age_grade":0,"state":"ST61","on_issue":"Y","series_type":"P","business_model":"T","authors":"수월,권겨을","description":"역하렘 공략 게임의 악역, \n에카르트 공작가의 하나뿐인 공녀이자 입양아\n페넬로페로 빙의했다. \n\n그런데 하필 난이도는 극악! \n뭘 해도 엔딩은 죽음뿐! \n\n‘진짜 공녀’가 나타나기 전에\n여주의 어장 중 한 명을 공략해서 살아남아야 한다.\n\n사사건건 시비를 거는 오빠 1, 2.\n모든 루트가 죽음으로 이어지는 미친 황태자.\n여주바라기 마법사와 충직한 노예 기사까지!\n\n‘일단 가망성 없는 놈들은 바로 버리자.’\n\n“그동안 제 주제를 잘 몰랐어요.\n앞으로는 쭉, 신경 쓰실 일 없이,\n쥐죽은 듯 살겠습니다.”\n\n근데 왜 자꾸 선을 그을수록 호감도가 오르는 거야?!\n악역 페넬로페의 미친 역하렘 공략 게임 생존기!\n\n==============================\n\n[표지 및 타이틀 로고 디자인] 디자인그룹 헌드레드","free_slide_count":4,"last_slide_added_dt":"2026-07-10T00:05:12+09:00","start_sale_dt":"2020-05-01T00:00:07+09:00","waitfree_block_count":10,"waitfree_period_by_minute":1440,"sale_method":"TICKET","publisher_uid":14487,"on_sale_count":216,"talk_viewer_type":"TAP_SCROLL","first_product_id":54846128,"per_price_type":"S","translate_property":{"category":{"th":"เว็บตูน","ko":"웹툰","en":"Comic"},"sub_category":{"th":"โรแมนซ์แฟนตาซี","ko":"로판","en":"Romance Fantasy"}},"lang":"ko","id":54845189}},"last_notice_date":"2022-09-21T12:55:04+09:00","display_ad":{"section_uid":"A15","banner_uid":"A15","trevi_uid":"","moment_uid":"DAN-9PaWqQNQpqtf5FFM"},"content":{"service_property":{"view_count":166542245,"rating_count":690967,"bookmark_count":0,"highlighter_count":0,"rating_sum":6878919,"comment_count":227325,"preview":{"item":{"service_property":{},"operator_property":{},"asset_property":{},"uid":12111420,"product_id":52664650,"title":"악역의 엔딩은 죽음뿐 1화","thumbnail":"EteEl/hAJjEcOmGY/nxkIlkW9VKMDswOBPp20W0","is_free":true,"state":"ST61","slide_type":"SD02","last_release_dt":"2025-03-14T15:03:34+09:00","size":0.747417,"page_count":1,"hidden":false,"free_change_dt":"1980-01-01T00:00:00+09:00","start_sale_dt":"2019-03-31T11:00:20+09:00","order_value":1,"version":"1.0"},"next_item":{"service_property":{},"operator_property":{},"asset_property":{},"uid":12111421,"product_id":52664655,"title":"악역의 엔딩은 죽음뿐 2화","thumbnail":"EteEl/hAJjEcOmGY/nxkIlkW9VKMDswOBPp20W0","is_free":true,"state":"ST61","slide_type":"SD02","last_release_dt":"2025-03-14T15:03:35+09:00","size":0.545509,"page_count":1,"hidden":false,"free_change_dt":"1980-01-01T00:00:00+09:00","start_sale_dt":"2019-03-31T11:00:20+09:00","order_value":2,"version":"1.0"},"using_scroll":true}},"operator_property":{"is_manga":false},"asset_property":{},"series_id":52654302,"title":"악역의 엔딩은 죽음뿐","thumbnail":"bqnocF/hyqDpMAsjf/Kscud578X1bVPDoEmetLK0","land_thumbnail":"23bbM/hyqFdyASTt/yNB8gZOIQNkKapKwHnW0qK","category_uid":11,"category":"웹소설","sub_category_uid":117,"sub_category":"로판","is_all_free":false,"is_waitfree":true,"age_grade":0,"state":"ST61","on_issue":"N","series_type":"P","business_model":"T","authors":"권겨을","description":"역하렘 공략 게임의 악역, \n에카르트 공작가의 하나뿐인 공녀이자 입양아 페넬로페로 빙의했다.\n\n그런데 하필 난이도는 극악!\n뭘 해도 엔딩은 죽음뿐이다.\n\n‘진짜 공녀’가 나타나기 전에 어떻게든 여주의 어장 중 한 명을 공략해서 이어져야 한다!\n\n사사건건 시비를 거는 오빠 1, 2.\n모든 루트가 죽음으로 이어지는 미친 황태자.\n여주바라기 마법사와 충직한 노예 기사까지!\n\n‘일단 가망성 없는 놈들은 바로 버리자.’\n\n“그동안 제 주제를 잘 몰랐어요. 앞으로는 쭉, 신경 쓰실 일 없이, 쥐죽은 듯 살겠습니다.”\n\n근데 왜 자꾸 선을 그을수록 호감도가 오르는 거야?!\n\n\n#게임빙의 #악역빙의 #역하렘 #남주후보들의_후회물\n\n\n[일러스트] 무트\n[로고 및 표지 디자인] 매진","pub_period":"화, 수, 금, 토","free_slide_count":3,"last_slide_added_dt":"2020-08-03T22:00:12+09:00","start_sale_dt":"2019-03-31T11:00:20+09:00","waitfree_block_count":20,"waitfree_period_by_minute":720,"sale_method":"TICKET","publisher_uid":14487,"on_sale_count":279,"talk_viewer_type":"TAP_SCROLL","first_product_id":52664650,"per_price_type":"S","translate_property":{"sub_category":{"th":"โรแมนซ์แฟนตาซี","ko":"로판","en":"Romance Fantasy"},"category":{"th":"นิยาย","ko":"웹소설","en":"Novel"}},"lang":"ko","id":52654302}},"result_code":0,"response_time":"2026-10-15T21:16:35+09:00","message":"성공","message_key":"api_common_success"} \ No newline at end of file diff --git a/test/fixtures/kakaopage/overview-54845189.json b/test/fixtures/kakaopage/overview-54845189.json new file mode 100644 index 0000000..159af1a --- /dev/null +++ b/test/fixtures/kakaopage/overview-54845189.json @@ -0,0 +1 @@ +{"result":{"page_continue":{"first_read_product_id":54846128,"first_read_product_title":"악역의 엔딩은 죽음뿐 동영상 트레일러","first_read_is_free":true,"has_new_single":true,"has_unread_single":true},"related_series":{"code":"D","item":{"service_property":{},"operator_property":{},"asset_property":{},"series_id":52654302,"title":"악역의 엔딩은 죽음뿐","thumbnail":"bqnocF/hyqDpMAsjf/Kscud578X1bVPDoEmetLK0","category_uid":11,"category":"웹소설","sub_category_uid":117,"sub_category":"로판","is_all_free":false,"is_waitfree":true,"age_grade":0,"state":"ST61","on_issue":"N","series_type":"P","business_model":"T","authors":"권겨을","description":"역하렘 공략 게임의 악역, \n에카르트 공작가의 하나뿐인 공녀이자 입양아 페넬로페로 빙의했다.\n\n그런데 하필 난이도는 극악!\n뭘 해도 엔딩은 죽음뿐이다.\n\n‘진짜 공녀’가 나타나기 전에 어떻게든 여주의 어장 중 한 명을 공략해서 이어져야 한다!\n\n사사건건 시비를 거는 오빠 1, 2.\n모든 루트가 죽음으로 이어지는 미친 황태자.\n여주바라기 마법사와 충직한 노예 기사까지!\n\n‘일단 가망성 없는 놈들은 바로 버리자.’\n\n“그동안 제 주제를 잘 몰랐어요. 앞으로는 쭉, 신경 쓰실 일 없이, 쥐죽은 듯 살겠습니다.”\n\n근데 왜 자꾸 선을 그을수록 호감도가 오르는 거야?!\n\n\n#게임빙의 #악역빙의 #역하렘 #남주후보들의_후회물\n\n\n[일러스트] 무트\n[로고 및 표지 디자인] 매진","free_slide_count":3,"last_slide_added_dt":"2020-08-03T22:00:12+09:00","start_sale_dt":"2019-03-31T11:00:20+09:00","waitfree_block_count":20,"waitfree_period_by_minute":720,"sale_method":"TICKET","publisher_uid":14487,"on_sale_count":279,"talk_viewer_type":"TAP_SCROLL","first_product_id":52664650,"per_price_type":"S","translate_property":{"category":{"th":"นิยาย","ko":"웹소설","en":"Novel"},"sub_category":{"th":"โรแมนซ์แฟนตาซี","ko":"로판","en":"Romance Fantasy"}},"lang":"ko","id":52654302}},"last_notice_date":"2026-07-10T00:01:03+09:00","display_ad":{"section_uid":"A15","banner_uid":"A15","trevi_uid":"","moment_uid":"DAN-9PaWqQNQpqtf5FFM"},"content":{"service_property":{"view_count":124572740,"rating_count":679612,"bookmark_count":0,"highlighter_count":0,"rating_sum":6781160,"comment_count":112171,"preview":{"item":{"service_property":{},"operator_property":{},"asset_property":{},"uid":14272167,"product_id":54865385,"title":"악역의 엔딩은 죽음뿐 프롤로그","thumbnail":"bLC0tD/hyCvjfWl5G/ySmY8ZP8Qf0EmHGBLAtiZk","is_free":true,"state":"ST61","slide_type":"SD03","last_release_dt":"2026-07-27T09:44:33+09:00","size":4.88567,"page_count":73,"hidden":false,"free_change_dt":"1980-01-01T00:00:00+09:00","start_sale_dt":"2020-05-01T00:00:07+09:00","order_value":2,"version":"1.0"},"next_item":{"service_property":{},"operator_property":{},"asset_property":{},"uid":12951860,"product_id":54848086,"title":"악역의 엔딩은 죽음뿐 1화","thumbnail":"cgSDlO/hyCvnP9tSZ/Z506VKvc8iUkOXI6dkmzrk","is_free":true,"state":"ST61","slide_type":"SD03","last_release_dt":"2025-09-25T16:01:57+09:00","size":4.55721,"page_count":83,"hidden":false,"free_change_dt":"1980-01-01T00:00:00+09:00","start_sale_dt":"2020-05-01T00:00:07+09:00","order_value":3,"version":"1.0"},"using_scroll":true}},"operator_property":{"is_manga":false},"asset_property":{},"series_id":54845189,"title":"악역의 엔딩은 죽음뿐","thumbnail":"mW3j5/dJMcaacSrAK/WVoJJAYNlS9rayXUWi6AY0","land_thumbnail":"RmobN/hzCtfKUqaD/6XgE5RjbBGMOn6thodamr0","category_uid":10,"category":"웹툰","sub_category_uid":69,"sub_category":"로판","is_all_free":false,"is_waitfree":true,"age_grade":0,"state":"ST61","on_issue":"Y","series_type":"P","business_model":"T","authors":"수월,권겨을","description":"역하렘 공략 게임의 악역, \n에카르트 공작가의 하나뿐인 공녀이자 입양아\n페넬로페로 빙의했다. \n\n그런데 하필 난이도는 극악! \n뭘 해도 엔딩은 죽음뿐! \n\n‘진짜 공녀’가 나타나기 전에\n여주의 어장 중 한 명을 공략해서 살아남아야 한다.\n\n사사건건 시비를 거는 오빠 1, 2.\n모든 루트가 죽음으로 이어지는 미친 황태자.\n여주바라기 마법사와 충직한 노예 기사까지!\n\n‘일단 가망성 없는 놈들은 바로 버리자.’\n\n“그동안 제 주제를 잘 몰랐어요.\n앞으로는 쭉, 신경 쓰실 일 없이,\n쥐죽은 듯 살겠습니다.”\n\n근데 왜 자꾸 선을 그을수록 호감도가 오르는 거야?!\n악역 페넬로페의 미친 역하렘 공략 게임 생존기!\n\n==============================\n\n[표지 및 타이틀 로고 디자인] 디자인그룹 헌드레드","pub_period":"금","free_slide_count":4,"last_slide_added_dt":"2026-07-10T00:05:12+09:00","start_sale_dt":"2020-05-01T00:00:07+09:00","waitfree_block_count":10,"waitfree_period_by_minute":1440,"sale_method":"TICKET","publisher_uid":14487,"on_sale_count":216,"talk_viewer_type":"TAP_SCROLL","first_product_id":54846128,"per_price_type":"S","translate_property":{"category":{"th":"เว็บตูน","ko":"웹툰","en":"Comic"},"sub_category":{"th":"โรแมนซ์แฟนตาซี","ko":"로판","en":"Romance Fantasy"}},"lang":"ko","id":54845189}},"result_code":0,"response_time":"2026-10-15T21:16:33+09:00","message":"성공","message_key":"api_common_success"} \ No newline at end of file diff --git a/test/fixtures/kakaopage/overview-63659962-19.json b/test/fixtures/kakaopage/overview-63659962-19.json new file mode 100644 index 0000000..bb0e8b2 --- /dev/null +++ b/test/fixtures/kakaopage/overview-63659962-19.json @@ -0,0 +1 @@ +{"result":{"page_continue":{"first_read_product_id":63709590,"first_read_product_title":"울프 인 더 하우스 1화","first_read_is_free":true,"has_new_single":true,"has_unread_single":true},"display_ad":{"section_uid":"A15","banner_uid":"A15","trevi_uid":"","moment_uid":"DAN-9PaWqQNQpqtf5FFM"},"content":{"service_property":{"view_count":364548,"rating_count":3568,"bookmark_count":0,"highlighter_count":0,"rating_sum":35634,"comment_count":420,"preview":{"item":{"service_property":{},"operator_property":{},"asset_property":{},"uid":10525027,"product_id":63709590,"title":"울프 인 더 하우스 1화","thumbnail":"fg3Uw/hAdNQaSK14/b3yEf3a7xB6yICVVjkd5Hk","is_free":true,"state":"ST61","slide_type":"SD03","last_release_dt":"2024-03-18T18:01:47+09:00","size":3.0148,"page_count":33,"hidden":false,"free_change_dt":"1980-01-01T00:00:00+09:00","start_sale_dt":"2024-03-25T22:00:05+09:00","order_value":1,"version":"1.0"},"next_item":{"service_property":{},"operator_property":{},"asset_property":{},"uid":10525028,"product_id":63709592,"title":"울프 인 더 하우스 2화","thumbnail":"yffS8/hAd47i5f5Z/JwevO0PEbZFUa7hX7sRGEK","is_free":false,"state":"ST61","slide_type":"SD03","last_release_dt":"2024-03-18T18:01:47+09:00","size":2.9127,"page_count":33,"hidden":false,"free_change_dt":"1980-01-01T00:00:00+09:00","start_sale_dt":"2024-03-25T22:00:05+09:00","order_value":2,"version":"1.0"},"using_scroll":true}},"operator_property":{"is_manga":false},"asset_property":{},"series_id":63659962,"title":"울프 인더 하우스 [19세 완전판] ","thumbnail":"bn2lQs/hAd4XgsZ5Z/MtPVaiw3jf5BioxFC2tA91","category_uid":10,"category":"웹툰","sub_category_uid":119,"sub_category":"BL","is_all_free":false,"is_waitfree":true,"age_grade":19,"state":"ST61","on_issue":"N","series_type":"P","business_model":"T","authors":"박지연","description":"마지못해 사귀어왔던 애인과의 뻔한 이별. 후련한 마음으로 삶의 전환점을 찾던 민석은 대형견 백산이를 임시로 보호하게 된다. \n구질구질 구남친 대신 귀여운 멍멍이와 함께 자유를 만끽할 줄 알았는데... 생각보다 많이 엉뚱한 존재가 삶에 들어와버렸다!","free_slide_count":1,"last_slide_added_dt":"2024-03-25T22:00:05+09:00","start_sale_dt":"2024-03-25T22:00:05+09:00","waitfree_block_count":10,"waitfree_period_by_minute":1440,"sale_method":"TICKET","publisher_uid":33761,"on_sale_count":79,"talk_viewer_type":"TAP_SCROLL","first_product_id":63709590,"per_price_type":"S","translate_property":{"sub_category":{"th":"วาย","ko":"BL","en":"BL"},"category":{"th":"เว็บตูน","ko":"웹툰","en":"Comic"}},"lang":"ko","id":63659962}},"result_code":0,"response_time":"2026-10-15T21:15:32+09:00","message":"성공","message_key":"api_common_success"} \ No newline at end of file diff --git a/test/fixtures/wayback/kakaopage-54845189-2020.html b/test/fixtures/wayback/kakaopage-54845189-2020.html new file mode 100644 index 0000000..a3d4ae8 --- /dev/null +++ b/test/fixtures/wayback/kakaopage-54845189-2020.html @@ -0,0 +1,32 @@ +악역의 엔딩은 죽음뿐 - 웹툰 | 카카오페이지

kakaopage logo

검색 버튼
악역의 엔딩은 죽음뿐

악역의 엔딩은 죽음뿐

78.3만명
2.2만
금 연재 | 독점
수월,권겨을
첫편부터 4편 무료
7일마다 무료
show wait free detail
댓글 (22,085)
좋아요순
|
최신순
노아무열아젶에디레이번칼토이시드
·
2020.05.01
원작 소설 안본 사람들을 위해 말합니다. +악엔죽은 완전 C급입니다. +. +. +. +모든 사람들에게 배포가 시급하거든요. +안 본 사람 없게 해주세요.
악역의 엔딩은 죽음뿐 1화
4264
72
신고
권겨을
·
2020.05.01
안녕하세요! <악역의 엔딩은 죽음뿐> 원작자 권겨을입니다. +드디어 웹툰이 런칭 됐다니 실감이 잘 안납니다ㅠㅠ + +수월 작가님의 멋진 작화로 재탄생한, 게임 속 다섯 남주들 사이에서 살아남기 위해 고군분투하는 페페의 일대기! + +많은 사랑과 관심 부탁드립니다❤ +감사합니다!
악역의 엔딩은 죽음뿐 동영상 트레일러
3471
144
신고
아르
·
1시간전
봤는데 또 대여권 써버렸다ㅠㅜㅜ
악역의 엔딩은 죽음뿐 39화
좋아요
신고
다솜
·
1시간전
수갑을 찬 것은 끊었을 때의 추진력을 얻기 위함이었다
악역의 엔딩은 죽음뿐 24화
좋아요
신고
한편만더보자
·
1시간전
완결없는 대작은 손을 안대는 타입이라서.. 이틀동안 소설 정주행 끝내고 왔네요ㅋㅋㅋ +제 선택은~ 집착노예망사랑연하남입니닷✌
악역의 엔딩은 죽음뿐 프롤로그
좋아요
신고
(∂ω∂)
·
1시간전
남주낙찰
악역의 엔딩은 죽음뿐 22화
좋아요
신고
다음생엔여주로...
·
2시간전
이클리스는 왠지 친해지는게아닌 큰 댕댕이를 길들려야할것 같아....
악역의 엔딩은 죽음뿐 23화
1
신고
리아라
·
2시간전
오 봐주고 있었던 거네
악역의 엔딩은 죽음뿐 24화
좋아요
신고
벗어
·
4시간전
내가 활약할 날만 기다림
악역의 엔딩은 죽음뿐 25화
좋아요
신고
빨간망토차차❤️
·
4시간전
아니 식기 안보이냐? 눈 장식이네
악역의 엔딩은 죽음뿐 39화
좋아요
신고
웹툰덕후
·
5시간전
이클리스 때린 놈 나와!!!아주 그냥!!
악역의 엔딩은 죽음뿐 23화
1
신고
오늘밤너의겨털세가닥을가져가겠다
·
7시간전
아..주인님 소리 너무 좋아 귀여워 쓰담쓰담 해주고싶다 키우고싶다
악역의 엔딩은 죽음뿐 25화
3
신고
Fantana
·
7시간전
넌 나에게 목욕값을 줬어~~
악역의 엔딩은 죽음뿐 12화
1
신고
어공주와왕딸,그오빠는표절작이다
·
7시간전
애정하는 딸이 갑자기 사라져서 찾은거야? +그럴거면 처음부터 잘했어야지 +애가 본인한테 맞춰주니까 애지중지하지말고 +내가 꼬인것도 있지만 행동이 1초에 한번씩 바뀌는것같은 사람도 문제이겠지
악역의 엔딩은 죽음뿐 25화
2
신고
미안..이클리스가조아...
·
8시간전
아.. 잘못눌렀어..ㅜㅜ 봤던거 또 봤어..ㅜㅜ 다시 일주일 기다료야대ㅜㅜ 으엉~~
악역의 엔딩은 죽음뿐 10화
좋아요
신고
라즈베리
·
9시간전
작화너무이뻐요 ㅠ ㅠ
악역의 엔딩은 죽음뿐 12화
좋아요
신고
감정이입너무심한웹툰웹소설중독자
·
9시간전
아 진짜 역시 게임속의 오빠는 현실과 거리가 멀고도 멀구나
악역의 엔딩은 죽음뿐 21화
좋아요
신고
\ No newline at end of file diff --git a/test/fixtures/wayback/kakaopage-54845189-2022.html b/test/fixtures/wayback/kakaopage-54845189-2022.html new file mode 100644 index 0000000..11b0a47 --- /dev/null +++ b/test/fixtures/wayback/kakaopage-54845189-2022.html @@ -0,0 +1,28 @@ +악역의 엔딩은 죽음뿐 - 웹툰 | 카카오페이지
카카오페이지 로고
검색
스테이지보관함내 정보
님다음
0
충전
컬러모드다크모드
로그아웃
로딩중
pc 앱 다운로드
\ No newline at end of file diff --git a/test/fixtures/wayback/kakaopage-54845189-2024.html b/test/fixtures/wayback/kakaopage-54845189-2024.html new file mode 100644 index 0000000..c681721 --- /dev/null +++ b/test/fixtures/wayback/kakaopage-54845189-2024.html @@ -0,0 +1,29 @@ +악역의 엔딩은 죽음뿐 - 웹툰 | 카카오페이지
로딩중
\ No newline at end of file diff --git a/test/fixtures/wayback/kakaopage-54845189-cdx-content.txt b/test/fixtures/wayback/kakaopage-54845189-cdx-content.txt new file mode 100644 index 0000000..9a022b3 --- /dev/null +++ b/test/fixtures/wayback/kakaopage-54845189-cdx-content.txt @@ -0,0 +1,48 @@ +20220930003210 https://page.kakao.com/content/54845189 +20221008033151 https://page.kakao.com/content/54845189 +20221101090844 https://page.kakao.com/content/54845189 +20221205234140 https://page.kakao.com/content/54845189 +20230324163551 https://page.kakao.com/content/54845189 +20230531233552 https://page.kakao.com/content/54845189 +20231001142338 https://page.kakao.com/content/54845189 +20240226032102 https://page.kakao.com/content/54845189 +20240318073658 https://page.kakao.com/content/54845189 +20240523032432 https://page.kakao.com/content/54845189 +20240601102321 https://page.kakao.com/content/54845189 +20240701122409 https://page.kakao.com/content/54845189 +20240801000811 https://page.kakao.com/content/54845189 +20240901010746 https://page.kakao.com/content/54845189 +20241001105828 https://page.kakao.com/content/54845189 +20241101010508 https://page.kakao.com/content/54845189 +20241203053728 https://page.kakao.com/content/54845189 +20250314051917 https://page.kakao.com/content/54845189 +20250406172928 https://page.kakao.com/content/54845189 +20250530014613 https://page.kakao.com/content/54845189 +20250714081524 https://page.kakao.com/content/54845189 +20250905000510 https://page.kakao.com/content/54845189 +20251007180706 https://page.kakao.com/content/54845189 +20251105010252 https://page.kakao.com/content/54845189 +20260115194553 https://page.kakao.com/content/54845189 +20260219143912 https://page.kakao.com/content/54845189 +20260510090433 https://page.kakao.com/content/54845189 +20260815043603 https://page.kakao.com/content/54845189 +20250116002021 https://page.kakao.com/content/54845189%0A +20260222073655 https://page.kakao.com/content/54845189/viewer/54846128 +20221112093759 https://page.kakao.com/content/54845189/viewer/54848086 +20260218104652 https://page.kakao.com/content/54845189/viewer/54848086 +20221112093801 https://page.kakao.com/content/54845189/viewer/54848086?utm_source=68413516352 +20260116045007 https://page.kakao.com/content/54845189/viewer/54872355 +20230316171512 https://page.kakao.com/content/54845189/viewer/60579636 +20230505142706 https://page.kakao.com/content/54845189/viewer/61824808 +20241220095541 https://page.kakao.com/content/54845189?utm_source=sh_clip&plpu=https%3A%2F%2Flink-page.kakao.com%2Fopen%2Fcontent%3Fseries_id%3D54845189%26utm_source%3Dsh_clip%26alfallback%3Dstore +20260908183105 https://page.kakao.com/content/54845189?orderby=desc +20221013131308 https://page.kakao.com/content/54845189?utm_source=sh_clip&pscme=kakaopage%3A%2F%2Fopen%2Fcontent%3Fseries_id%3D54845189%26utm_source%3Dsh_clip +20250813010346 https://page.kakao.com/content/54845189?tab_type=about +20260613024948 https://page.kakao.com/content/54845189?tab_type=about +20241204083755 https://page.kakao.com/content/54845189?tab_type=notice +20250813014455 https://page.kakao.com/content/54845189?tab_type=notice +20260317095133 https://page.kakao.com/content/54845189?tab_type=notice +20250812030043 https://page.kakao.com/content/54845189?tab_type=overview +20260119153727 https://page.kakao.com/content/54845189?tab_type=overview +20260224113711 https://page.kakao.com/content/54845189?tab_type=overview +20240522172309 https://page.kakao.com/content/54845189?tab_type=product diff --git a/test/fixtures/wayback/kakaopage-54845189-cdx-home.txt b/test/fixtures/wayback/kakaopage-54845189-cdx-home.txt new file mode 100644 index 0000000..1efdcd5 --- /dev/null +++ b/test/fixtures/wayback/kakaopage-54845189-cdx-home.txt @@ -0,0 +1,17 @@ +20200928100812 https://page.kakao.com/home?seriesId=54845189 +20201001065424 https://page.kakao.com/home?seriesId=54845189 +20201101082642 https://page.kakao.com/home?seriesId=54845189 +20210402034928 https://page.kakao.com/home?seriesId=54845189 +20210523164837 https://page.kakao.com/home?seriesId=54845189 +20211210081733 https://page.kakao.com/home?seriesId=54845189 +20220506064341 https://page.kakao.com/home?seriesId=54845189 +20220608173932 https://page.kakao.com/home?seriesId=54845189 +20220902101346 https://page.kakao.com/home?seriesId=54845189 +20210906090332 https://page.kakao.com/home?seriesId=54845189&utm_source=tw&utm_medium=thread&utm_campaign=09&utm_id=kakao +20210825154421 https://page.kakao.com/home?seriesId=54845189&utm_source=tw&utm_medium=thread&utm_campaign=endingdeath&utm_id=kakao +20210903094133 https://page.kakao.com/home?seriesId=54845189&utm_source=tw&utm_medium=thread&utm_campaign=endingdeath&utm_id=kakao +20210825185306 https://page.kakao.com/home?seriesId=54845189&utm_id=kakao +20220331090657 https://page.kakao.com/home?seriesId=54845189&utm_source=%E3%85%81%E3%84%B4%E3%84%B7%E3%84%B9 +20211201094036 https://page.kakao.com/home?seriesId=54845189&utm_source=11 +20220331122250 https://page.kakao.com/home?seriesId=54845189&utm_source=23%E3%85%87 +20220601111259 https://page.kakao.com/home?seriesId=54845189&utm_source=5968