diff --git a/src/mb_enhanced_cover_art_uploads/docs/supported_providers.md b/src/mb_enhanced_cover_art_uploads/docs/supported_providers.md index ab8d1937..74fd0c56 100644 --- a/src/mb_enhanced_cover_art_uploads/docs/supported_providers.md +++ b/src/mb_enhanced_cover_art_uploads/docs/supported_providers.md @@ -14,6 +14,7 @@ The following table describes the types of links supported by MB: Upload to CAA | Audiomack | ✔️ | ✔️ | Doesn't check for track images, these may be singles. | Bandcamp | ✔️ | ✔️ | Grabs custom track images. For non-square covers, a square thumbnail will be added too. Custom domains currently not supported. | | Beatport | ✔️ | ✔️ | Beware of upscales. 1400x1400 on older releases is probably upscaled. | +| Booth | ✔ | ❌ | Types only filled for the first image. Note that Booth also contains products that aren't music albums (comics, stickers, etc.). | | Bugs! | ✔️ | ✔️ | | DatPiff | ✔️ | ✔️ | | Deezer | ✔️ | ✔️ | diff --git a/src/mb_enhanced_cover_art_uploads/providers/booth.ts b/src/mb_enhanced_cover_art_uploads/providers/booth.ts new file mode 100644 index 00000000..4a214b37 --- /dev/null +++ b/src/mb_enhanced_cover_art_uploads/providers/booth.ts @@ -0,0 +1,41 @@ +import { ArtworkTypeIDs } from '@lib/MB/CoverArt'; +import { assertDefined } from '@lib/util/assert'; +import { safeParseJSON } from '@lib/util/json'; + +import type { CoverArt } from '../types'; +import { CoverArtProvider } from './base'; + +interface BoothAPIInformation { + id: number; + images: Array<{ + original: string; + resized: string; + caption: string | null; // TODO: Can we do something with this? + }>; +} + +export class BoothProvider extends CoverArtProvider { + public readonly supportedDomains = ['*.booth.pm']; + public readonly favicon = 'https://booth.pm/static-images/pwa/icon_size_96.png'; + public readonly name = 'Booth'; + protected readonly urlRegex = /items\/(\d+)/; + + public async findImages(url: URL): Promise { + const itemId = this.extractId(url); + assertDefined(itemId); + const apiJson = await this.fetchPage(this.createApiUrl(itemId)); + const apiData = safeParseJSON(apiJson, 'Failed to parse Booth API response'); + const covers: CoverArt[] = apiData.images.map((img) => ({ url: new URL(img.original) })); + + if (covers.length > 0) { + // Assume first image is front cover. + covers[0].types = [ArtworkTypeIDs.Front]; + } + + return covers; + } + + private createApiUrl(itemId: string): URL { + return new URL(`https://booth.pm/en/items/${itemId}.json`); + } +} diff --git a/src/mb_enhanced_cover_art_uploads/providers/index.ts b/src/mb_enhanced_cover_art_uploads/providers/index.ts index 217baac2..d0a736aa 100644 --- a/src/mb_enhanced_cover_art_uploads/providers/index.ts +++ b/src/mb_enhanced_cover_art_uploads/providers/index.ts @@ -10,6 +10,7 @@ import { ArchiveProvider } from './archive'; import { AudiomackProvider } from './audiomack'; import { BandcampProvider } from './bandcamp'; import { BeatportProvider } from './beatport'; +import { BoothProvider } from './booth'; import { BugsProvider } from './bugs'; import { DatPiffProvider } from './datpiff'; import { DeezerProvider } from './deezer'; @@ -44,6 +45,7 @@ addProvider(new ArchiveProvider()); addProvider(new AudiomackProvider()); addProvider(new BandcampProvider()); addProvider(new BeatportProvider()); +addProvider(new BoothProvider()); addProvider(new BugsProvider()); addProvider(new CoverArtArchiveProvider()); addProvider(new DatPiffProvider()); diff --git a/tests/test-data/__recordings__/booth-provider_1223894492/extracting-images_1310741912/extracts-covers-for-album-with-multiple-images-and-YouTube-embedded-video_2223334374.warc b/tests/test-data/__recordings__/booth-provider_1223894492/extracting-images_1310741912/extracts-covers-for-album-with-multiple-images-and-YouTube-embedded-video_2223334374.warc new file mode 100644 index 00000000..0bef975f --- /dev/null +++ b/tests/test-data/__recordings__/booth-provider_1223894492/extracting-images_1310741912/extracts-covers-for-album-with-multiple-images-and-YouTube-embedded-video_2223334374.warc @@ -0,0 +1,91 @@ +WARC/1.1 +WARC-Filename: booth provider/extracting images/extracts covers for album with multiple images and YouTube embedded video +WARC-Date: 2023-04-23T08:03:08.476Z +WARC-Type: warcinfo +WARC-Record-ID: +Content-Type: application/warc-fields +Content-Length: 119 + +software: warcio.js +harVersion: 1.2 +harCreator: {"name":"Polly.JS","version":"6.0.5","comment":"persister:fs-warc"} + + +WARC/1.1 +WARC-Concurrent-To: +WARC-Target-URI: https://booth.pm/en/items/1973472.json +WARC-Date: 2023-04-23T08:03:08.477Z +WARC-Type: request +WARC-Record-ID: +Content-Type: application/http; msgtype=request +WARC-Payload-Digest: sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +WARC-Block-Digest: sha256:ad26aeda62d23d759077224b4055a9f98e14e5667ca30ec896f7cc55088c43c0 +Content-Length: 39 + +GET /en/items/1973472.json HTTP/1.1 + + + +WARC/1.1 +WARC-Concurrent-To: +WARC-Target-URI: https://booth.pm/en/items/1973472.json +WARC-Date: 2023-04-23T08:03:08.477Z +WARC-Type: metadata +WARC-Record-ID: +Content-Type: application/warc-fields +WARC-Payload-Digest: sha256:838864e7d8cf52a59aa77216ac1fc102f51a7d85f96d2f32c89bd367997d3180 +WARC-Block-Digest: sha256:838864e7d8cf52a59aa77216ac1fc102f51a7d85f96d2f32c89bd367997d3180 +Content-Length: 1200 + +harEntryId: 4d3062c1c2baeb766a1ac3e4b4b2b672 +harEntryOrder: 0 +cache: {} +startedDateTime: 2023-04-23T08:03:06.922Z +time: 1552 +timings: {"blocked":-1,"dns":-1,"connect":-1,"send":0,"wait":1552,"receive":0,"ssl":-1} +warcRequestHeadersSize: 57 +warcRequestCookies: [] +warcResponseHeadersSize: 2932 +warcResponseCookies: [{"name":"recent_items","value":"1973472","domain":".booth.pm","path":"/","expires":"2023-04-23T08:33:08.000Z","secure, _plaza_session_nktz7u":"377qow9Cf%2Fc%2BFLhL%2FI1dSNBAjZ9hZJeTZc3Y3P45VM5i3MWZn5Y7w%2BEI6cztnTVBICUkkMnNclJNXyTDkTYAaY3JPRQMsjz1%2BempLheWdqAtNkRAorW37AfVOcXN86ZzWd0emtjj1kdwzY41ck7GLoPbrBvxTGJsGv%2FnNcmWpV0XfAQESLfrjiF2JWiKLXUr5kq3W6mWUAo27RPxwqjNP31JW2anVkzlCy70%2BZTHYXSdkzrPO%2FUN3FHnxqnM2%2FJZ5U6ktZfA9b4VBR8CU3wisy5v%2BKCK9gE9N1FtUedvxuIVTvW83AI9FidknsYcnb%2BQwHCMy5D2yTf6ntAAtH%2BiGSRTjiwF3RsBs3tp99BHhhtl%2BSFwIZfomXeb4ZrG%2ByBHpKQ%2BgSJBQvVYh17DYcMO--bZEBPAs1Ze%2BhMgcb--%2F2P2cMafOjaVGy%2BMZiJNYA%3D%3D","secure":true,"httponly, __cf_bm":"J7Evmrv7yB2ymbl3rRAFiIQwLSzAHEiSZsiEJkvyPM8-1682236988-0-AVODLtrxX0jIjfooB24PRwSZvg9/ldXa7lLLOyzHqeRmpLMp298xHlUTrXPHOce2RUC9UjmXXH0OOiUGyg+Fz74=","httpOnly":true,"sameSite":"None"}] +responseDecoded: false + + +WARC/1.1 +WARC-Target-URI: https://booth.pm/en/items/1973472.json +WARC-Date: 2023-04-23T08:03:08.476Z +WARC-Type: response +WARC-Record-ID: +Content-Type: application/http; msgtype=response +WARC-Payload-Digest: sha256:d4cbb8183168707e689a7b5c970efdb811552e47cbfa1172aedde6764b448660 +WARC-Block-Digest: sha256:0ad6ba7cbac86d44e17490bbcc1055fb82ee7bc2692ce3081585f0ec83f6a8e7 +Content-Length: 15320 + +HTTP/1.1 200 OK +alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400 +cache-control: max-age=0, private, must-revalidate +cf-cache-status: DYNAMIC +cf-ray: 7bc496913a68b930-AMS +connection: close +content-encoding: gzip +content-language: en +content-security-policy: script-src 'strict-dynamic' 'unsafe-eval' 'unsafe-inline' https: 'report-sample' 'nonce-afbFnNr3xcU4ail5KQi26XzEYtR6tIpUBezk6ZtZIac='; object-src 'none'; base-uri 'self'; frame-src player.vimeo.com w.soundcloud.com www.slideshare.net www.youtube.com bandcamp.com sketchfab.com *.google.com *.facebook.com *.facebook.net *.twitter.com social-plugins.line.me *.g.doubleclick.net www.googletagmanager.com booth.karakuri.ai manage-booth.karakuri.ai point.widget.rakuten.co.jp hub.vroid.com ext.nicovideo.jp www.recaptcha.net https://booth.pm https://*.booth.pm https://factory.pixiv.net https://booth.pximg.net https://connect.buyee.jp https://www.googletagmanager.com; connect-src 'self' data: *.pixiv.net *.pawoo.net www.google-analytics.com analytics.google.com www.facebook.com connect.facebook.net www.googletagmanager.com www.googleadservices.com www.google.co.jp b92.yahoo.co.jp *.buyee.jp d.line-scdn.net stats.g.doubleclick.net ekr.zdassets.com *.zendesk.com errortrace.dev https://booth.pm https://*.booth.pm https://factory.pixiv.net https://booth.pximg.net https://connect.buyee.jp https://www.googletagmanager.com +content-type: application/json; charset=utf-8 +date: Sun, 23 Apr 2023 08:03:08 GMT +etag: W/"d4cbb8183168707e689a7b5c970efdb8" +referrer-policy: strict-origin-when-cross-origin +server: cloudflare +set-cookie: recent_items=1973472; domain=.booth.pm; path=/; expires=Thu, 23 Apr 2043 08:03:07 GMT; secure, _plaza_session_nktz7u=377qow9Cf%2Fc%2BFLhL%2FI1dSNBAjZ9hZJeTZc3Y3P45VM5i3MWZn5Y7w%2BEI6cztnTVBICUkkMnNclJNXyTDkTYAaY3JPRQMsjz1%2BempLheWdqAtNkRAorW37AfVOcXN86ZzWd0emtjj1kdwzY41ck7GLoPbrBvxTGJsGv%2FnNcmWpV0XfAQESLfrjiF2JWiKLXUr5kq3W6mWUAo27RPxwqjNP31JW2anVkzlCy70%2BZTHYXSdkzrPO%2FUN3FHnxqnM2%2FJZ5U6ktZfA9b4VBR8CU3wisy5v%2BKCK9gE9N1FtUedvxuIVTvW83AI9FidknsYcnb%2BQwHCMy5D2yTf6ntAAtH%2BiGSRTjiwF3RsBs3tp99BHhhtl%2BSFwIZfomXeb4ZrG%2ByBHpKQ%2BgSJBQvVYh17DYcMO--bZEBPAs1Ze%2BhMgcb--%2F2P2cMafOjaVGy%2BMZiJNYA%3D%3D; domain=.booth.pm; path=/; expires=Tue, 23 Apr 2024 08:03:08 GMT; secure; HttpOnly, __cf_bm=J7Evmrv7yB2ymbl3rRAFiIQwLSzAHEiSZsiEJkvyPM8-1682236988-0-AVODLtrxX0jIjfooB24PRwSZvg9/ldXa7lLLOyzHqeRmpLMp298xHlUTrXPHOce2RUC9UjmXXH0OOiUGyg+Fz74=; path=/; expires=Sun, 23-Apr-23 08:33:08 GMT; domain=.booth.pm; HttpOnly; Secure; SameSite=None +strict-transport-security: max-age=63072000; includeSubDomains +transfer-encoding: chunked +vary: Origin +x-content-type-options: nosniff +x-download-options: noopen +x-frame-options: SAMEORIGIN +x-permitted-cross-domain-policies: none +x-request-id: 6419b9b4-58cf-4efa-bee8-0b2f3c2955d4 +x-runtime: 0.251292 +x-xss-protection: 1; mode=block +x-pollyjs-finalurl: https://booth.pm/en/items/1973472.json + +{"description":"最強ミックスCD 第二弾!\n\nイオシスの東方アレンジ人気曲から隠れた名曲までDJ sadaがセレクトした良い曲を24曲をノンストップDJミックス!","factory_description":null,"id":1973472,"is_adult":false,"is_buyee_possible":false,"is_end_of_sale":false,"is_placeholder":false,"is_sold_out":false,"name":"IO-0324_IOSYS TOHO MEGAMIX - GENSOKYO IIKYOKU EDITION - Mixed by DJ sada","price":"1,500 JPY","purchase_limit":null,"shipping_info":"Ships within 15 days","small_stock":null,"url":"https://iosys.booth.pm/items/1973472","wish_list_url":"https://booth.pm/items/1973472/wish_list","wish_lists_count":12,"wished":false,"buyee_variations":[],"category":{"id":34,"name":"Game Music","parent":{"name":"Music","url":"https://booth.pm/en/browse/Music"},"url":"https://booth.pm/en/browse/Game%20Music"},"embeds":["\u003ciframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/chYUB02tNn4\" frameborder=\"0\" allowfullscreen sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation\" class=\"wide-content\"\u003e\u003c/iframe\u003e"],"images":[{"caption":null,"original":"https://booth.pximg.net/917a258c-3e6d-4c0e-90bf-0f56db689da6/i/1973472/80eef6e0-2ac9-4e0a-95ce-47163efe9717_base_resized.jpg","resized":"https://booth.pximg.net/c/72x72_a2_g5/917a258c-3e6d-4c0e-90bf-0f56db689da6/i/1973472/80eef6e0-2ac9-4e0a-95ce-47163efe9717_base_resized.jpg"},{"caption":null,"original":"https://booth.pximg.net/917a258c-3e6d-4c0e-90bf-0f56db689da6/i/1973472/0cb0b6fa-647d-4300-9c04-35a78c3c9fce_base_resized.jpg","resized":"https://booth.pximg.net/c/72x72_a2_g5/917a258c-3e6d-4c0e-90bf-0f56db689da6/i/1973472/0cb0b6fa-647d-4300-9c04-35a78c3c9fce_base_resized.jpg"}],"order":null,"share":{"hashtags":["booth_pm"],"text":"IO-0324_IOSYS TOHO MEGAMIX - GENSOKYO IIKYOKU EDITION - Mixed by DJ sada | イオシスショップ"},"shop":{"name":"イオシスショップ","subdomain":"iosys","thumbnail_url":"https://booth.pximg.net/c/48x48/users/1150414/icon_image/508163b0-0457-406d-b29c-c8390e25814d_base_resized.jpg","url":"https://iosys.booth.pm/","verified":false},"sound":null,"tags":[{"name":"Touhou","url":"https://booth.pm/en/items?tags%5B%5D=Touhou"},{"name":"minami","url":"https://booth.pm/en/items?tags%5B%5D=minami"},{"name":"IOSYS","url":"https://booth.pm/en/items?tags%5B%5D=IOSYS"},{"name":"鯛の小骨","url":"https://booth.pm/en/items?tags%5B%5D=%E9%AF%9B%E3%81%AE%E5%B0%8F%E9%AA%A8"},{"name":"miko(Alternative ending)","url":"https://booth.pm/en/items?tags%5B%5D=miko%28Alternative+ending%29"},{"name":"ARM(IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=ARM%28IOSYS%29"},{"name":"D.watt(IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=D.watt%28IOSYS%29"},{"name":"void(IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=void%28IOSYS%29"},{"name":"uno(IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=uno%28IOSYS%29"},{"name":"ココ(Innocent Key)","url":"https://booth.pm/en/items?tags%5B%5D=%E3%82%B3%E3%82%B3%28Innocent+Key%29"},{"name":"夕野ヨシミ(IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=%E5%A4%95%E9%87%8E%E3%83%A8%E3%82%B7%E3%83%9F%28IOSYS%29"},{"name":"あゆ(IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=%E3%81%82%E3%82%86%28IOSYS%29"},{"name":"NU-KO","url":"https://booth.pm/en/items?tags%5B%5D=NU-KO"},{"name":"GIGYO(IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=GIGYO%28IOSYS%29"},{"name":"岩杉夏","url":"https://booth.pm/en/items?tags%5B%5D=%E5%B2%A9%E6%9D%89%E5%A4%8F"},{"name":"3L","url":"https://booth.pm/en/items?tags%5B%5D=3L"},{"name":"オミ織葉","url":"https://booth.pm/en/items?tags%5B%5D=%E3%82%AA%E3%83%9F%E7%B9%94%E8%91%89"},{"name":"Aikapin","url":"https://booth.pm/en/items?tags%5B%5D=Aikapin"},{"name":"一ノ瀬月琉(monotone)","url":"https://booth.pm/en/items?tags%5B%5D=%E4%B8%80%E3%83%8E%E7%80%AC%E6%9C%88%E7%90%89%28monotone%29"},{"name":"IOSYS_東方アレンジ","url":"https://booth.pm/en/items?tags%5B%5D=IOSYS_%E6%9D%B1%E6%96%B9%E3%82%A2%E3%83%AC%E3%83%B3%E3%82%B8"},{"name":"愛原千尋(天然ジェミニ)","url":"https://booth.pm/en/items?tags%5B%5D=%E6%84%9B%E5%8E%9F%E5%8D%83%E5%B0%8B%28%E5%A4%A9%E7%84%B6%E3%82%B8%E3%82%A7%E3%83%9F%E3%83%8B%29"},{"name":"めらみぽっぷ(こすもぽりたん)","url":"https://booth.pm/en/items?tags%5B%5D=%E3%82%81%E3%82%89%E3%81%BF%E3%81%BD%E3%81%A3%E3%81%B7%28%E3%81%93%E3%81%99%E3%82%82%E3%81%BD%E3%82%8A%E3%81%9F%E3%82%93%29"},{"name":"しゃばだば(Sound CYCLONE)","url":"https://booth.pm/en/items?tags%5B%5D=%E3%81%97%E3%82%83%E3%81%B0%E3%81%A0%E3%81%B0%28Sound+CYCLONE%29"},{"name":"あさな(IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=%E3%81%82%E3%81%95%E3%81%AA%28IOSYS%29"},{"name":"john=hive(八月二雪)","url":"https://booth.pm/en/items?tags%5B%5D=john%3Dhive%28%E5%85%AB%E6%9C%88%E4%BA%8C%E9%9B%AA%29"},{"name":"七条レタス","url":"https://booth.pm/en/items?tags%5B%5D=%E4%B8%83%E6%9D%A1%E3%83%AC%E3%82%BF%E3%82%B9"},{"name":"山本椛 (IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=%E5%B1%B1%E6%9C%AC%E6%A4%9B+%28IOSYS%29"},{"name":"とぴあ","url":"https://booth.pm/en/items?tags%5B%5D=%E3%81%A8%E3%81%B4%E3%81%82"},{"name":"第16回博麗神社例大祭","url":"https://booth.pm/en/items?tags%5B%5D=%E7%AC%AC16%E5%9B%9E%E5%8D%9A%E9%BA%97%E7%A5%9E%E7%A4%BE%E4%BE%8B%E5%A4%A7%E7%A5%AD"},{"name":"IOSYS_CD","url":"https://booth.pm/en/items?tags%5B%5D=IOSYS_CD"},{"name":"IOSYS_東方_MEGAMIXシリーズ","url":"https://booth.pm/en/items?tags%5B%5D=IOSYS_%E6%9D%B1%E6%96%B9_MEGAMIX%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA"},{"name":"DJ sada","url":"https://booth.pm/en/items?tags%5B%5D=DJ+sada"},{"name":"イザベル(IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=%E3%82%A4%E3%82%B6%E3%83%99%E3%83%AB%28IOSYS%29"},{"name":"咲希","url":"https://booth.pm/en/items?tags%5B%5D=%E5%92%B2%E5%B8%8C"},{"name":"ゆか","url":"https://booth.pm/en/items?tags%5B%5D=%E3%82%86%E3%81%8B"},{"name":"まり","url":"https://booth.pm/en/items?tags%5B%5D=%E3%81%BE%E3%82%8A"},{"name":"安田陽子","url":"https://booth.pm/en/items?tags%5B%5D=%E5%AE%89%E7%94%B0%E9%99%BD%E5%AD%90"},{"name":"住友真介(Office Clear Tone)","url":"https://booth.pm/en/items?tags%5B%5D=%E4%BD%8F%E5%8F%8B%E7%9C%9F%E4%BB%8B%28Office+Clear+Tone%29"}],"tag_banners":[{"image_url":"https://booth.pximg.net/c/150x150/13546184-06a2-41c8-beaa-702f67e3a76d/i/1727554/aadc8081-b6e7-4e3e-aa04-cd51d32f4bcf_base_resized.jpg","name":"Touhou","url":"https://booth.pm/en/items?tags%5B%5D=Touhou"},{"image_url":null,"name":"minami","url":"https://booth.pm/en/items?tags%5B%5D=minami"},{"image_url":"https://booth.pximg.net/c/150x150/ce868886-9202-4025-927e-224895a4f49c/i/3834387/64e9f2ff-bd8f-4b76-b9f5-2a40630fbd84_base_resized.jpg","name":"IOSYS","url":"https://booth.pm/en/items?tags%5B%5D=IOSYS"},{"image_url":null,"name":"鯛の小骨","url":"https://booth.pm/en/items?tags%5B%5D=%E9%AF%9B%E3%81%AE%E5%B0%8F%E9%AA%A8"},{"image_url":null,"name":"miko(Alternative ending)","url":"https://booth.pm/en/items?tags%5B%5D=miko%28Alternative+ending%29"},{"image_url":"https://booth.pximg.net/c/150x150/a22ddf50-5eaf-447a-9e87-2e578be4bbae/i/2368076/9ac19c2a-14ed-4796-8da3-b4ef6e954ccd_base_resized.jpg","name":"ARM(IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=ARM%28IOSYS%29"},{"image_url":null,"name":"D.watt(IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=D.watt%28IOSYS%29"},{"image_url":null,"name":"void(IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=void%28IOSYS%29"},{"image_url":null,"name":"uno(IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=uno%28IOSYS%29"},{"image_url":null,"name":"ココ(Innocent Key)","url":"https://booth.pm/en/items?tags%5B%5D=%E3%82%B3%E3%82%B3%28Innocent+Key%29"},{"image_url":"https://booth.pximg.net/c/150x150/917a258c-3e6d-4c0e-90bf-0f56db689da6/i/643961/0eb2494b-5377-48b4-a9c1-c4098518f815_base_resized.jpg","name":"夕野ヨシミ(IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=%E5%A4%95%E9%87%8E%E3%83%A8%E3%82%B7%E3%83%9F%28IOSYS%29"},{"image_url":null,"name":"あゆ(IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=%E3%81%82%E3%82%86%28IOSYS%29"},{"image_url":null,"name":"NU-KO","url":"https://booth.pm/en/items?tags%5B%5D=NU-KO"},{"image_url":null,"name":"GIGYO(IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=GIGYO%28IOSYS%29"},{"image_url":null,"name":"岩杉夏","url":"https://booth.pm/en/items?tags%5B%5D=%E5%B2%A9%E6%9D%89%E5%A4%8F"},{"image_url":null,"name":"3L","url":"https://booth.pm/en/items?tags%5B%5D=3L"},{"image_url":null,"name":"オミ織葉","url":"https://booth.pm/en/items?tags%5B%5D=%E3%82%AA%E3%83%9F%E7%B9%94%E8%91%89"},{"image_url":null,"name":"Aikapin","url":"https://booth.pm/en/items?tags%5B%5D=Aikapin"},{"image_url":null,"name":"一ノ瀬月琉(monotone)","url":"https://booth.pm/en/items?tags%5B%5D=%E4%B8%80%E3%83%8E%E7%80%AC%E6%9C%88%E7%90%89%28monotone%29"},{"image_url":"https://booth.pximg.net/c/150x150/917a258c-3e6d-4c0e-90bf-0f56db689da6/i/3785899/1184b83c-e250-425c-810d-1e94e9164d7f_base_resized.jpg","name":"IOSYS_東方アレンジ","url":"https://booth.pm/en/items?tags%5B%5D=IOSYS_%E6%9D%B1%E6%96%B9%E3%82%A2%E3%83%AC%E3%83%B3%E3%82%B8"},{"image_url":null,"name":"愛原千尋(天然ジェミニ)","url":"https://booth.pm/en/items?tags%5B%5D=%E6%84%9B%E5%8E%9F%E5%8D%83%E5%B0%8B%28%E5%A4%A9%E7%84%B6%E3%82%B8%E3%82%A7%E3%83%9F%E3%83%8B%29"},{"image_url":null,"name":"めらみぽっぷ(こすもぽりたん)","url":"https://booth.pm/en/items?tags%5B%5D=%E3%82%81%E3%82%89%E3%81%BF%E3%81%BD%E3%81%A3%E3%81%B7%28%E3%81%93%E3%81%99%E3%82%82%E3%81%BD%E3%82%8A%E3%81%9F%E3%82%93%29"},{"image_url":null,"name":"しゃばだば(Sound CYCLONE)","url":"https://booth.pm/en/items?tags%5B%5D=%E3%81%97%E3%82%83%E3%81%B0%E3%81%A0%E3%81%B0%28Sound+CYCLONE%29"},{"image_url":null,"name":"あさな(IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=%E3%81%82%E3%81%95%E3%81%AA%28IOSYS%29"},{"image_url":null,"name":"john=hive(八月二雪)","url":"https://booth.pm/en/items?tags%5B%5D=john%3Dhive%28%E5%85%AB%E6%9C%88%E4%BA%8C%E9%9B%AA%29"},{"image_url":null,"name":"七条レタス","url":"https://booth.pm/en/items?tags%5B%5D=%E4%B8%83%E6%9D%A1%E3%83%AC%E3%82%BF%E3%82%B9"},{"image_url":null,"name":"山本椛 (IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=%E5%B1%B1%E6%9C%AC%E6%A4%9B+%28IOSYS%29"},{"image_url":null,"name":"とぴあ","url":"https://booth.pm/en/items?tags%5B%5D=%E3%81%A8%E3%81%B4%E3%81%82"},{"image_url":null,"name":"第16回博麗神社例大祭","url":"https://booth.pm/en/items?tags%5B%5D=%E7%AC%AC16%E5%9B%9E%E5%8D%9A%E9%BA%97%E7%A5%9E%E7%A4%BE%E4%BE%8B%E5%A4%A7%E7%A5%AD"},{"image_url":"https://booth.pximg.net/c/150x150/917a258c-3e6d-4c0e-90bf-0f56db689da6/i/3785899/1184b83c-e250-425c-810d-1e94e9164d7f_base_resized.jpg","name":"IOSYS_CD","url":"https://booth.pm/en/items?tags%5B%5D=IOSYS_CD"},{"image_url":null,"name":"IOSYS_東方_MEGAMIXシリーズ","url":"https://booth.pm/en/items?tags%5B%5D=IOSYS_%E6%9D%B1%E6%96%B9_MEGAMIX%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA"},{"image_url":null,"name":"DJ sada","url":"https://booth.pm/en/items?tags%5B%5D=DJ+sada"},{"image_url":null,"name":"イザベル(IOSYS)","url":"https://booth.pm/en/items?tags%5B%5D=%E3%82%A4%E3%82%B6%E3%83%99%E3%83%AB%28IOSYS%29"},{"image_url":null,"name":"咲希","url":"https://booth.pm/en/items?tags%5B%5D=%E5%92%B2%E5%B8%8C"},{"image_url":null,"name":"ゆか","url":"https://booth.pm/en/items?tags%5B%5D=%E3%82%86%E3%81%8B"},{"image_url":null,"name":"まり","url":"https://booth.pm/en/items?tags%5B%5D=%E3%81%BE%E3%82%8A"},{"image_url":null,"name":"安田陽子","url":"https://booth.pm/en/items?tags%5B%5D=%E5%AE%89%E7%94%B0%E9%99%BD%E5%AD%90"},{"image_url":null,"name":"住友真介(Office Clear Tone)","url":"https://booth.pm/en/items?tags%5B%5D=%E4%BD%8F%E5%8F%8B%E7%9C%9F%E4%BB%8B%28Office+Clear+Tone%29"}],"tag_combination":{"category":"Game Music","tag":"Touhou","url":"https://booth.pm/en/browse/Game%20Music?tags%5B%5D=Touhou"},"tracks":null,"variations":[{"buyee_html":null,"downloadable":null,"factory_image_url":null,"has_download_code":false,"id":3161888,"is_anshin_booth_pack":false,"is_empty_allocatable_stock_with_preorder":false,"is_empty_stock":false,"is_factory_item":false,"is_mailbin":false,"is_waiting_on_arrival":false,"name":null,"order_url":null,"price":1500,"small_stock":null,"status":"addable_to_cart","type":"direct"}]} + diff --git a/tests/test-data/__recordings__/booth-provider_1223894492/extracting-images_1310741912/extracts-covers-for-album-with-one-image_853668334.warc b/tests/test-data/__recordings__/booth-provider_1223894492/extracting-images_1310741912/extracts-covers-for-album-with-one-image_853668334.warc new file mode 100644 index 00000000..1d33f7c5 --- /dev/null +++ b/tests/test-data/__recordings__/booth-provider_1223894492/extracting-images_1310741912/extracts-covers-for-album-with-one-image_853668334.warc @@ -0,0 +1,91 @@ +WARC/1.1 +WARC-Filename: booth provider/extracting images/extracts covers for album with one image +WARC-Date: 2023-04-23T08:03:06.915Z +WARC-Type: warcinfo +WARC-Record-ID: +Content-Type: application/warc-fields +Content-Length: 119 + +software: warcio.js +harVersion: 1.2 +harCreator: {"name":"Polly.JS","version":"6.0.5","comment":"persister:fs-warc"} + + +WARC/1.1 +WARC-Concurrent-To: +WARC-Target-URI: https://booth.pm/en/items/2969400.json +WARC-Date: 2023-04-23T08:03:06.916Z +WARC-Type: request +WARC-Record-ID: +Content-Type: application/http; msgtype=request +WARC-Payload-Digest: sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +WARC-Block-Digest: sha256:3cdb8209bdf34c8feda2eb7dcccd503e47ea16f1a8894a8dc8000f621fe6cc21 +Content-Length: 39 + +GET /en/items/2969400.json HTTP/1.1 + + + +WARC/1.1 +WARC-Concurrent-To: +WARC-Target-URI: https://booth.pm/en/items/2969400.json +WARC-Date: 2023-04-23T08:03:06.916Z +WARC-Type: metadata +WARC-Record-ID: +Content-Type: application/warc-fields +WARC-Payload-Digest: sha256:17caea15f4d304ebf85db1dd98fca1a382dd03e7fe87512737121e1d5e94fd73 +WARC-Block-Digest: sha256:17caea15f4d304ebf85db1dd98fca1a382dd03e7fe87512737121e1d5e94fd73 +Content-Length: 1192 + +harEntryId: 822c484ad12a96d4448d3bbeee020c9c +harEntryOrder: 0 +cache: {} +startedDateTime: 2023-04-23T08:03:05.629Z +time: 1280 +timings: {"blocked":-1,"dns":-1,"connect":-1,"send":0,"wait":1280,"receive":0,"ssl":-1} +warcRequestHeadersSize: 57 +warcRequestCookies: [] +warcResponseHeadersSize: 3020 +warcResponseCookies: [{"name":"recent_items","value":"2969400","domain":".booth.pm","path":"/","expires":"2023-04-23T08:33:07.000Z","secure, _plaza_session_nktz7u":"GcX2B88jozErHRX%2BYwiFWhhIGvr0TYQyPa2lbLyJd6sds3x0RjAMC8CMRXlNc%2BqlFwc4Wya%2Fa6z69BLgB8cI2Cb%2FFrk%2F%2FKhxkICQY67v8kQcs5HIe7bbkLhoHKn%2BuNMz5GsaVgTnTgD8utA%2BKGveURmqEYsVorsC9w%2By5cS9JKSu1mhdOvflogS2js07fYbv3A3FCd6bfWyW2v5TMmrTigc6bNqIK%2BPkWGj3K8q6iCHCD8i6xkF4Mt%2BOJYT63iiP3L6h40dI8DzgQqD%2Be3j8CO5MqNgB%2FCw9WHnunhLmlrN8E86k5tIewU3Bg2lGHLCF74LXzKNbWSfLBA1r7ShpEtF3O7tvYG4GBAHvMWpFY4WnLRFUI3ns3UHLUgyg3x4wDiDWcMmzhz39g%2Ff3f3Qf--H1O7mJD2K2xP6PHf--TTDVRmNUxjmZxzhEVXFt5Q%3D%3D","secure":true,"httponly, __cf_bm":"gfXE18ranULzwZPI4Yjdgw7qvvtjD2K9CVRXjms3cgE-1682236987-0-AXD1WtFN4gr9QgJ/VVveJI8ThOGWmIfvlVOMeLeJ/KMGR3pj8QPRH2N0lJP/cNsxu9BDlAIhWTZZIt99rLAsLio=","httpOnly":true,"sameSite":"None"}] +responseDecoded: false + + +WARC/1.1 +WARC-Target-URI: https://booth.pm/en/items/2969400.json +WARC-Date: 2023-04-23T08:03:06.915Z +WARC-Type: response +WARC-Record-ID: +Content-Type: application/http; msgtype=response +WARC-Payload-Digest: sha256:3fd6a1b2fcee33c6d46ed3194e7455df55285a8c9d7588282c492681e400605c +WARC-Block-Digest: sha256:35d97fc6ab15a7f626d40414209cbf550976eeea2b5e75a7be4dd57fd20bec74 +Content-Length: 9360 + +HTTP/1.1 200 OK +alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400 +cache-control: max-age=0, private, must-revalidate +cf-cache-status: DYNAMIC +cf-ray: 7bc496899d5eb97a-AMS +connection: close +content-encoding: gzip +content-language: en +content-security-policy: script-src 'strict-dynamic' 'unsafe-eval' 'unsafe-inline' https: 'report-sample' 'nonce-iYT1x2/1wKYSLcE1mHwcw99Nxhkq7g2TLUHQ/rE4syw='; object-src 'none'; base-uri 'self'; frame-src player.vimeo.com w.soundcloud.com www.slideshare.net www.youtube.com bandcamp.com sketchfab.com *.google.com *.facebook.com *.facebook.net *.twitter.com social-plugins.line.me *.g.doubleclick.net www.googletagmanager.com booth.karakuri.ai manage-booth.karakuri.ai point.widget.rakuten.co.jp hub.vroid.com ext.nicovideo.jp www.recaptcha.net https://booth.pm https://*.booth.pm https://factory.pixiv.net https://booth.pximg.net https://connect.buyee.jp https://www.googletagmanager.com; connect-src 'self' data: *.pixiv.net *.pawoo.net www.google-analytics.com analytics.google.com www.facebook.com connect.facebook.net www.googletagmanager.com www.googleadservices.com www.google.co.jp b92.yahoo.co.jp *.buyee.jp d.line-scdn.net stats.g.doubleclick.net ekr.zdassets.com *.zendesk.com errortrace.dev https://booth.pm https://*.booth.pm https://factory.pixiv.net https://booth.pximg.net https://connect.buyee.jp https://www.googletagmanager.com; report-uri https://errortrace.dev/api/34/security/?sentry_key=257cb7e4ddeb4cfdb29279c839542cb5 +content-type: application/json; charset=utf-8 +date: Sun, 23 Apr 2023 08:03:07 GMT +etag: W/"3fd6a1b2fcee33c6d46ed3194e7455df" +referrer-policy: strict-origin-when-cross-origin +server: cloudflare +set-cookie: recent_items=2969400; domain=.booth.pm; path=/; expires=Thu, 23 Apr 2043 08:03:06 GMT; secure, _plaza_session_nktz7u=GcX2B88jozErHRX%2BYwiFWhhIGvr0TYQyPa2lbLyJd6sds3x0RjAMC8CMRXlNc%2BqlFwc4Wya%2Fa6z69BLgB8cI2Cb%2FFrk%2F%2FKhxkICQY67v8kQcs5HIe7bbkLhoHKn%2BuNMz5GsaVgTnTgD8utA%2BKGveURmqEYsVorsC9w%2By5cS9JKSu1mhdOvflogS2js07fYbv3A3FCd6bfWyW2v5TMmrTigc6bNqIK%2BPkWGj3K8q6iCHCD8i6xkF4Mt%2BOJYT63iiP3L6h40dI8DzgQqD%2Be3j8CO5MqNgB%2FCw9WHnunhLmlrN8E86k5tIewU3Bg2lGHLCF74LXzKNbWSfLBA1r7ShpEtF3O7tvYG4GBAHvMWpFY4WnLRFUI3ns3UHLUgyg3x4wDiDWcMmzhz39g%2Ff3f3Qf--H1O7mJD2K2xP6PHf--TTDVRmNUxjmZxzhEVXFt5Q%3D%3D; domain=.booth.pm; path=/; expires=Tue, 23 Apr 2024 08:03:06 GMT; secure; HttpOnly, __cf_bm=gfXE18ranULzwZPI4Yjdgw7qvvtjD2K9CVRXjms3cgE-1682236987-0-AXD1WtFN4gr9QgJ/VVveJI8ThOGWmIfvlVOMeLeJ/KMGR3pj8QPRH2N0lJP/cNsxu9BDlAIhWTZZIt99rLAsLio=; path=/; expires=Sun, 23-Apr-23 08:33:07 GMT; domain=.booth.pm; HttpOnly; Secure; SameSite=None +strict-transport-security: max-age=63072000; includeSubDomains +transfer-encoding: chunked +vary: Origin +x-content-type-options: nosniff +x-download-options: noopen +x-frame-options: SAMEORIGIN +x-permitted-cross-domain-policies: none +x-request-id: 99f41522-8fb7-4a9d-938f-9a5dc63bebcd +x-runtime: 0.215211 +x-xss-protection: 1; mode=block +x-pollyjs-finalurl: https://booth.pm/en/items/2969400.json + +{"description":"【ダウンロード音源付き!!】\n\n【送料応援特別価格 ¥2,750→¥2,500】\n\n「それでも、愛。」\n\nまっすぐな愛、いびつな愛、ありふれた愛。\n5thアルバムとなる本作『ラヴ』は、人類愛などマクロな視点から「愛」を描くことが多かったピノキオピーが、息苦しいまでの「正しさ」で溢れ、分断が加速する社会の中で日々生まれる、さまざまな「愛」に焦点を当てた意欲作。\n\n前作『零号』の艶のあるエレクトロサウンドを更に深化させ、余計な情報を削ぎ落とした、ビートの輪郭が際立つメロディアスかつソリッドな作品に仕上がっている。\n\nTikTokで2億回以上再生されている「推し」への恋心を描いた『ラヴィット』、不器用な自己愛を綴った『アルティメットセンパイ』など、正解のない感情を肯定するでも否定するでもなく、ピノキオピーは、確かにそこに存在する「愛」を謡う。\n\n収録楽曲は、動画共有サイトへ投稿した人気楽曲を含む12曲入り。公開動画の累計再生回数は1,800万回を超えている(2021年5月現在)。\n\nころんへの提供楽曲『404』、スマホゲーム「#コンパス 戦闘摂理解析システム」書き下ろし楽曲『リアルにぶっとばす』に加え、スマホゲーム「プロジェクトセカイ」書き下ろし楽曲『セカイはまだ始まってすらいない』、マジカルミライ2020テーマソング『愛されなくても君がいる』のセルフリミックスver.を収録。","factory_description":null,"id":2969400,"is_adult":false,"is_buyee_possible":true,"is_end_of_sale":false,"is_placeholder":false,"is_sold_out":false,"name":"ラヴ","price":"2,500 JPY","purchase_limit":null,"shipping_info":"Ships within 7 days","small_stock":null,"url":"https://pinocchiop.booth.pm/items/2969400","wish_list_url":"https://booth.pm/items/2969400/wish_list","wish_lists_count":709,"wished":false,"buyee_variations":[{"buyee_html":"\u003ciframe src=\"https://connect.buyee.jp/booth/iframe_button.html?bgcolor=%23FF5c67\u0026amp;code=4900797\u0026amp;fontcolor=%23FFFFFF\u0026amp;image=https%3A%2F%2Fbooth.pximg.net%2Fd7c1a1c3-4d48-4540-ae47-17a7829e5bc6%2Fi%2F2969400%2Fcb2b3f79-e5d1-4186-811f-229bc4a8cdad_base_resized.jpg\u0026amp;is_limited=false\u0026amp;price=2500\u0026amp;seller=%E3%83%94%E3%83%8E%E3%82%AD%E3%82%AA%E3%83%94%E3%83%BC+%2F+PinocchioP+Official+Shop\u0026amp;seller_id=d7c1a1c3-4d48-4540-ae47-17a7829e5bc6\u0026amp;style=booth1\u0026amp;text=Add+to+Buyee+Cart\u0026amp;title=%E3%83%A9%E3%83%B4\u0026amp;url=https%3A%2F%2Fbooth.pm%2Fja%2Fitems%2F2969400\u0026amp;variations=default\" height=\"60px\" width=\"100%\" style=\"border:0;\"\u003e\u003c/iframe\u003e","downloadable":null,"factory_image_url":null,"has_download_code":false,"id":4900797,"is_anshin_booth_pack":false,"is_empty_allocatable_stock_with_preorder":false,"is_empty_stock":false,"is_factory_item":false,"is_mailbin":true,"is_waiting_on_arrival":false,"name":null,"order_url":null,"price":2500,"small_stock":null,"status":"addable_to_cart","type":"via_warehouse"}],"category":{"id":35,"name":"Vocaloid","parent":{"name":"Music","url":"https://booth.pm/en/browse/Music"},"url":"https://booth.pm/en/browse/Vocaloid"},"embeds":[],"images":[{"caption":null,"original":"https://booth.pximg.net/d7c1a1c3-4d48-4540-ae47-17a7829e5bc6/i/2969400/cb2b3f79-e5d1-4186-811f-229bc4a8cdad_base_resized.jpg","resized":"https://booth.pximg.net/c/72x72_a2_g5/d7c1a1c3-4d48-4540-ae47-17a7829e5bc6/i/2969400/cb2b3f79-e5d1-4186-811f-229bc4a8cdad_base_resized.jpg"}],"order":null,"share":{"hashtags":["booth_pm"],"text":"ラヴ | ピノキオピー / PinocchioP Official Shop"},"shop":{"name":"ピノキオピー / PinocchioP Official Shop","subdomain":"pinocchiop","thumbnail_url":"https://booth.pximg.net/c/48x48/users/141387/icon_image/b5541a0d-a768-4e01-beac-07c3abaf578c_base_resized.jpg","url":"https://pinocchiop.booth.pm/","verified":false},"sound":null,"tags":[{"name":"VOCALOID","url":"https://booth.pm/en/items?tags%5B%5D=VOCALOID"},{"name":"Hatsune Miku","url":"https://booth.pm/en/items?tags%5B%5D=Hatsune+Miku"},{"name":"ピノキオピー","url":"https://booth.pm/en/items?tags%5B%5D=%E3%83%94%E3%83%8E%E3%82%AD%E3%82%AA%E3%83%94%E3%83%BC"}],"tag_banners":[{"image_url":"https://booth.pximg.net/c/150x150/01b481cf-ad99-42e7-91a6-1b2361828496/i/277127/751eacdc-04be-454c-91d5-07e69b8e184f_base_resized.jpg","name":"VOCALOID","url":"https://booth.pm/en/items?tags%5B%5D=VOCALOID"},{"image_url":"https://booth.pximg.net/c/150x150/d7c1a1c3-4d48-4540-ae47-17a7829e5bc6/i/177668/cb5d56c9-de84-4914-8007-3c8cd3ee5d64_base_resized.jpg","name":"Hatsune Miku","url":"https://booth.pm/en/items?tags%5B%5D=Hatsune+Miku"},{"image_url":null,"name":"ピノキオピー","url":"https://booth.pm/en/items?tags%5B%5D=%E3%83%94%E3%83%8E%E3%82%AD%E3%82%AA%E3%83%94%E3%83%BC"}],"tag_combination":{"category":"Vocaloid","tag":"VOCALOID","url":"https://booth.pm/en/browse/Vocaloid?tags%5B%5D=VOCALOID"},"tracks":null,"variations":[{"buyee_html":"\u003ciframe src=\"https://connect.buyee.jp/booth/iframe_button.html?bgcolor=%23FF5c67\u0026amp;code=4900797\u0026amp;fontcolor=%23FFFFFF\u0026amp;image=https%3A%2F%2Fbooth.pximg.net%2Fd7c1a1c3-4d48-4540-ae47-17a7829e5bc6%2Fi%2F2969400%2Fcb2b3f79-e5d1-4186-811f-229bc4a8cdad_base_resized.jpg\u0026amp;is_limited=false\u0026amp;price=2500\u0026amp;seller=%E3%83%94%E3%83%8E%E3%82%AD%E3%82%AA%E3%83%94%E3%83%BC+%2F+PinocchioP+Official+Shop\u0026amp;seller_id=d7c1a1c3-4d48-4540-ae47-17a7829e5bc6\u0026amp;style=booth1\u0026amp;text=Add+to+Buyee+Cart\u0026amp;title=%E3%83%A9%E3%83%B4\u0026amp;url=https%3A%2F%2Fbooth.pm%2Fja%2Fitems%2F2969400\u0026amp;variations=default\" height=\"60px\" width=\"100%\" style=\"border:0;\"\u003e\u003c/iframe\u003e","downloadable":null,"factory_image_url":null,"has_download_code":false,"id":4900797,"is_anshin_booth_pack":false,"is_empty_allocatable_stock_with_preorder":false,"is_empty_stock":false,"is_factory_item":false,"is_mailbin":true,"is_waiting_on_arrival":false,"name":null,"order_url":null,"price":2500,"small_stock":null,"status":"addable_to_cart","type":"via_warehouse"}]} + diff --git a/tests/test-data/__recordings__/booth-provider_1223894492/extracting-images_1310741912/extracts-covers-for-item-on-custom-shop-domain_1974256441.warc b/tests/test-data/__recordings__/booth-provider_1223894492/extracting-images_1310741912/extracts-covers-for-item-on-custom-shop-domain_1974256441.warc new file mode 100644 index 00000000..c2195f6d --- /dev/null +++ b/tests/test-data/__recordings__/booth-provider_1223894492/extracting-images_1310741912/extracts-covers-for-item-on-custom-shop-domain_1974256441.warc @@ -0,0 +1,91 @@ +WARC/1.1 +WARC-Filename: booth provider/extracting images/extracts covers for item on custom shop domain +WARC-Date: 2023-04-23T08:11:29.153Z +WARC-Type: warcinfo +WARC-Record-ID: +Content-Type: application/warc-fields +Content-Length: 119 + +software: warcio.js +harVersion: 1.2 +harCreator: {"name":"Polly.JS","version":"6.0.5","comment":"persister:fs-warc"} + + +WARC/1.1 +WARC-Concurrent-To: +WARC-Target-URI: https://booth.pm/en/items/4182601.json +WARC-Date: 2023-04-23T08:11:29.155Z +WARC-Type: request +WARC-Record-ID: +Content-Type: application/http; msgtype=request +WARC-Payload-Digest: sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +WARC-Block-Digest: sha256:fe1a3f523eee283906477fcedf10a48ab6b6fb35d6f304a43eacfa231c3f0d1e +Content-Length: 39 + +GET /en/items/4182601.json HTTP/1.1 + + + +WARC/1.1 +WARC-Concurrent-To: +WARC-Target-URI: https://booth.pm/en/items/4182601.json +WARC-Date: 2023-04-23T08:11:29.155Z +WARC-Type: metadata +WARC-Record-ID: +Content-Type: application/warc-fields +WARC-Payload-Digest: sha256:af64e2639d6dc572a4da640d2c5759e062283fb4c679d8e77d2b1e8b240e0348 +WARC-Block-Digest: sha256:af64e2639d6dc572a4da640d2c5759e062283fb4c679d8e77d2b1e8b240e0348 +Content-Length: 1190 + +harEntryId: da5508ba5d648e613b402e50b697599b +harEntryOrder: 0 +cache: {} +startedDateTime: 2023-04-23T08:11:27.917Z +time: 1232 +timings: {"blocked":-1,"dns":-1,"connect":-1,"send":0,"wait":1232,"receive":0,"ssl":-1} +warcRequestHeadersSize: 57 +warcRequestCookies: [] +warcResponseHeadersSize: 2922 +warcResponseCookies: [{"name":"recent_items","value":"4182601","domain":".booth.pm","path":"/","expires":"2023-04-23T08:41:29.000Z","secure, _plaza_session_nktz7u":"QYzICUJiLm9y9sJ%2BDL1Vn3JAux0psc%2BWi36fNERhesBJ%2FYHHA2HxGPMDyObJi558Ws7YAjjwqdnEfzCdVigVXNmIe5iZY%2B9lATxRSGtIhEwfaVyLIhgvKPkVCxTtX4S6DlnyD8aw4jUORU97IS7O1Z9Rj3hMMpOK%2FHCfPVg%2BIM4VjXcH3htbu4GdvcA1IiFqZeWVeF88A7%2FsJku8klHzmh%2FQfbpHLqXV9meBbdyVxscdAqPJmmHe70TDPxtd5vOrc6sSSB3a2%2BmLrRr1HfK2EVHvQZrO36Gxe6KzgIW2MlFQE24cmVveUuO1%2Fgq5FZ836luDc1Y%2BZuc9HJ7fpHo3LG70MqLsr3ZeMuEv9Q5r32QklaTWKOvo4QCbaOyypyyImW4FqTtPWTmnO1fAPlhd--oH6qFOPbXkNdP%2FAq--f4LooQlWTWOZU%2Fbh8x8WmA%3D%3D","secure":true,"httponly, __cf_bm":"nnB_JqukBWaRh_9g50DQXSaQKvCJSutefqi6osKruyE-1682237489-0-ARFXysLrrvVHoIu7JmiIkvQnMbhRctKDnPgJAlCOV1FMJ56qidpKYiA3vPJJChoOZF7NH8UaHpzncBioSI8YwOU=","httpOnly":true,"sameSite":"None"}] +responseDecoded: false + + +WARC/1.1 +WARC-Target-URI: https://booth.pm/en/items/4182601.json +WARC-Date: 2023-04-23T08:11:29.154Z +WARC-Type: response +WARC-Record-ID: +Content-Type: application/http; msgtype=response +WARC-Payload-Digest: sha256:94e8c0ad6720539ed71166409480f296f8fa68cd25bbde4da5a04bd83f5f9a58 +WARC-Block-Digest: sha256:4c0f49cf1768ede2461dd0e5cc5e018f00cc52cd597ec40f734983887b212b04 +Content-Length: 9913 + +HTTP/1.1 200 OK +alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400 +cache-control: max-age=0, private, must-revalidate +cf-cache-status: DYNAMIC +cf-ray: 7bc4a2ccfa77b74e-AMS +connection: close +content-encoding: gzip +content-language: en +content-security-policy: script-src 'strict-dynamic' 'unsafe-eval' 'unsafe-inline' https: 'report-sample' 'nonce-fau8YF9gCL//oqXdFrWYtNLo4GzOrdICIR1plW7z6Dc='; object-src 'none'; base-uri 'self'; frame-src player.vimeo.com w.soundcloud.com www.slideshare.net www.youtube.com bandcamp.com sketchfab.com *.google.com *.facebook.com *.facebook.net *.twitter.com social-plugins.line.me *.g.doubleclick.net www.googletagmanager.com booth.karakuri.ai manage-booth.karakuri.ai point.widget.rakuten.co.jp hub.vroid.com ext.nicovideo.jp www.recaptcha.net https://booth.pm https://*.booth.pm https://factory.pixiv.net https://booth.pximg.net https://connect.buyee.jp https://www.googletagmanager.com; connect-src 'self' data: *.pixiv.net *.pawoo.net www.google-analytics.com analytics.google.com www.facebook.com connect.facebook.net www.googletagmanager.com www.googleadservices.com www.google.co.jp b92.yahoo.co.jp *.buyee.jp d.line-scdn.net stats.g.doubleclick.net ekr.zdassets.com *.zendesk.com errortrace.dev https://booth.pm https://*.booth.pm https://factory.pixiv.net https://booth.pximg.net https://connect.buyee.jp https://www.googletagmanager.com +content-type: application/json; charset=utf-8 +date: Sun, 23 Apr 2023 08:11:29 GMT +etag: W/"94e8c0ad6720539ed71166409480f296" +referrer-policy: strict-origin-when-cross-origin +server: cloudflare +set-cookie: recent_items=4182601; domain=.booth.pm; path=/; expires=Thu, 23 Apr 2043 08:11:29 GMT; secure, _plaza_session_nktz7u=QYzICUJiLm9y9sJ%2BDL1Vn3JAux0psc%2BWi36fNERhesBJ%2FYHHA2HxGPMDyObJi558Ws7YAjjwqdnEfzCdVigVXNmIe5iZY%2B9lATxRSGtIhEwfaVyLIhgvKPkVCxTtX4S6DlnyD8aw4jUORU97IS7O1Z9Rj3hMMpOK%2FHCfPVg%2BIM4VjXcH3htbu4GdvcA1IiFqZeWVeF88A7%2FsJku8klHzmh%2FQfbpHLqXV9meBbdyVxscdAqPJmmHe70TDPxtd5vOrc6sSSB3a2%2BmLrRr1HfK2EVHvQZrO36Gxe6KzgIW2MlFQE24cmVveUuO1%2Fgq5FZ836luDc1Y%2BZuc9HJ7fpHo3LG70MqLsr3ZeMuEv9Q5r32QklaTWKOvo4QCbaOyypyyImW4FqTtPWTmnO1fAPlhd--oH6qFOPbXkNdP%2FAq--f4LooQlWTWOZU%2Fbh8x8WmA%3D%3D; domain=.booth.pm; path=/; expires=Tue, 23 Apr 2024 08:11:29 GMT; secure; HttpOnly, __cf_bm=nnB_JqukBWaRh_9g50DQXSaQKvCJSutefqi6osKruyE-1682237489-0-ARFXysLrrvVHoIu7JmiIkvQnMbhRctKDnPgJAlCOV1FMJ56qidpKYiA3vPJJChoOZF7NH8UaHpzncBioSI8YwOU=; path=/; expires=Sun, 23-Apr-23 08:41:29 GMT; domain=.booth.pm; HttpOnly; Secure; SameSite=None +strict-transport-security: max-age=63072000; includeSubDomains +transfer-encoding: chunked +vary: Origin +x-content-type-options: nosniff +x-download-options: noopen +x-frame-options: SAMEORIGIN +x-permitted-cross-domain-policies: none +x-request-id: 00f31d17-1f44-4236-a640-9654ae25a6a6 +x-runtime: 0.129163 +x-xss-protection: 1; mode=block +x-pollyjs-finalurl: https://booth.pm/en/items/4182601.json + +{"description":"イオシスが手がける、最新型東方クラブミュージックアレンジシリーズ!\n\n「唯一無二の【現場主義】スタイル」をテーマに贈る東方クラブアレンジ・コンピレーション第5弾!\n あらゆるサウンドを現場でキャッチアップする本格派プロデューサー陣による書き下ろし曲を今回もコンパイルしました。\n 徐々にですが、街では夜のイベントも息を吹き返してきている昨今。\n「久しぶりに、朝まで東方でしっかり踊りてえ...」\n そんな感じ、最近あったりしませんか?","factory_description":null,"id":4182601,"is_adult":false,"is_buyee_possible":false,"is_end_of_sale":false,"is_placeholder":false,"is_sold_out":false,"name":"IO-0334_TOHO BOOTLEGS 5","price":"1,500 JPY","purchase_limit":null,"shipping_info":"Ships within 15 days","small_stock":null,"url":"https://iosys.booth.pm/items/4182601","wish_list_url":"https://booth.pm/items/4182601/wish_list","wish_lists_count":8,"wished":false,"buyee_variations":[],"category":{"id":34,"name":"Game Music","parent":{"name":"Music","url":"https://booth.pm/en/browse/Music"},"url":"https://booth.pm/en/browse/Game%20Music"},"embeds":["\u003ciframe width=\"560\" height=\"315\" src=\"https://www.youtube.com/embed/C__zbt8CYAM\" frameborder=\"0\" allowfullscreen sandbox=\"allow-scripts allow-same-origin allow-popups allow-presentation\" class=\"wide-content\"\u003e\u003c/iframe\u003e"],"images":[{"caption":null,"original":"https://booth.pximg.net/917a258c-3e6d-4c0e-90bf-0f56db689da6/i/4182601/f03d93f8-0b45-4848-a23b-53d5320fb2d1_base_resized.jpg","resized":"https://booth.pximg.net/c/72x72_a2_g5/917a258c-3e6d-4c0e-90bf-0f56db689da6/i/4182601/f03d93f8-0b45-4848-a23b-53d5320fb2d1_base_resized.jpg"},{"caption":null,"original":"https://booth.pximg.net/917a258c-3e6d-4c0e-90bf-0f56db689da6/i/4182601/6131c0c0-aaa1-4351-9cbf-352abe945f83_base_resized.jpg","resized":"https://booth.pximg.net/c/72x72_a2_g5/917a258c-3e6d-4c0e-90bf-0f56db689da6/i/4182601/6131c0c0-aaa1-4351-9cbf-352abe945f83_base_resized.jpg"}],"order":null,"share":{"hashtags":["booth_pm"],"text":"IO-0334_TOHO BOOTLEGS 5 | イオシスショップ"},"shop":{"name":"イオシスショップ","subdomain":"iosys","thumbnail_url":"https://booth.pximg.net/c/48x48/users/1150414/icon_image/508163b0-0457-406d-b29c-c8390e25814d_base_resized.jpg","url":"https://iosys.booth.pm/","verified":false},"sound":null,"tags":[{"name":"Touhou","url":"https://booth.pm/en/items?tags%5B%5D=Touhou"},{"name":"IOSYS","url":"https://booth.pm/en/items?tags%5B%5D=IOSYS"},{"name":"D.watt","url":"https://booth.pm/en/items?tags%5B%5D=D.watt"},{"name":"IOSYS_東方アレンジ","url":"https://booth.pm/en/items?tags%5B%5D=IOSYS_%E6%9D%B1%E6%96%B9%E3%82%A2%E3%83%AC%E3%83%B3%E3%82%B8"},{"name":"Tomoyuki Sakakida","url":"https://booth.pm/en/items?tags%5B%5D=Tomoyuki+Sakakida"},{"name":"IOSYS_東方_クラブアレンジシリーズ","url":"https://booth.pm/en/items?tags%5B%5D=IOSYS_%E6%9D%B1%E6%96%B9_%E3%82%AF%E3%83%A9%E3%83%96%E3%82%A2%E3%83%AC%E3%83%B3%E3%82%B8%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA"},{"name":"uno","url":"https://booth.pm/en/items?tags%5B%5D=uno"},{"name":"IOSYS_CD","url":"https://booth.pm/en/items?tags%5B%5D=IOSYS_CD"},{"name":"IOSYS_東方_BOOTLEGSシリーズ","url":"https://booth.pm/en/items?tags%5B%5D=IOSYS_%E6%9D%B1%E6%96%B9_BOOTLEGS%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA"},{"name":"だてるーにゃん","url":"https://booth.pm/en/items?tags%5B%5D=%E3%81%A0%E3%81%A6%E3%82%8B%E3%83%BC%E3%81%AB%E3%82%83%E3%82%93"},{"name":"The Herb Shop","url":"https://booth.pm/en/items?tags%5B%5D=The+Herb+Shop"},{"name":"ハナカミリュウ","url":"https://booth.pm/en/items?tags%5B%5D=%E3%83%8F%E3%83%8A%E3%82%AB%E3%83%9F%E3%83%AA%E3%83%A5%E3%82%A6"},{"name":"monolith slip","url":"https://booth.pm/en/items?tags%5B%5D=monolith+slip"},{"name":"DC Mizey","url":"https://booth.pm/en/items?tags%5B%5D=DC+Mizey"},{"name":"NiesoX","url":"https://booth.pm/en/items?tags%5B%5D=NiesoX"}],"tag_banners":[{"image_url":"https://booth.pximg.net/c/150x150/13546184-06a2-41c8-beaa-702f67e3a76d/i/1727554/aadc8081-b6e7-4e3e-aa04-cd51d32f4bcf_base_resized.jpg","name":"Touhou","url":"https://booth.pm/en/items?tags%5B%5D=Touhou"},{"image_url":"https://booth.pximg.net/c/150x150/ce868886-9202-4025-927e-224895a4f49c/i/3834387/64e9f2ff-bd8f-4b76-b9f5-2a40630fbd84_base_resized.jpg","name":"IOSYS","url":"https://booth.pm/en/items?tags%5B%5D=IOSYS"},{"image_url":null,"name":"D.watt","url":"https://booth.pm/en/items?tags%5B%5D=D.watt"},{"image_url":"https://booth.pximg.net/c/150x150/917a258c-3e6d-4c0e-90bf-0f56db689da6/i/3785899/1184b83c-e250-425c-810d-1e94e9164d7f_base_resized.jpg","name":"IOSYS_東方アレンジ","url":"https://booth.pm/en/items?tags%5B%5D=IOSYS_%E6%9D%B1%E6%96%B9%E3%82%A2%E3%83%AC%E3%83%B3%E3%82%B8"},{"image_url":null,"name":"Tomoyuki Sakakida","url":"https://booth.pm/en/items?tags%5B%5D=Tomoyuki+Sakakida"},{"image_url":null,"name":"IOSYS_東方_クラブアレンジシリーズ","url":"https://booth.pm/en/items?tags%5B%5D=IOSYS_%E6%9D%B1%E6%96%B9_%E3%82%AF%E3%83%A9%E3%83%96%E3%82%A2%E3%83%AC%E3%83%B3%E3%82%B8%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA"},{"image_url":null,"name":"uno","url":"https://booth.pm/en/items?tags%5B%5D=uno"},{"image_url":"https://booth.pximg.net/c/150x150/917a258c-3e6d-4c0e-90bf-0f56db689da6/i/3785899/1184b83c-e250-425c-810d-1e94e9164d7f_base_resized.jpg","name":"IOSYS_CD","url":"https://booth.pm/en/items?tags%5B%5D=IOSYS_CD"},{"image_url":null,"name":"IOSYS_東方_BOOTLEGSシリーズ","url":"https://booth.pm/en/items?tags%5B%5D=IOSYS_%E6%9D%B1%E6%96%B9_BOOTLEGS%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA"},{"image_url":null,"name":"だてるーにゃん","url":"https://booth.pm/en/items?tags%5B%5D=%E3%81%A0%E3%81%A6%E3%82%8B%E3%83%BC%E3%81%AB%E3%82%83%E3%82%93"},{"image_url":null,"name":"The Herb Shop","url":"https://booth.pm/en/items?tags%5B%5D=The+Herb+Shop"},{"image_url":null,"name":"ハナカミリュウ","url":"https://booth.pm/en/items?tags%5B%5D=%E3%83%8F%E3%83%8A%E3%82%AB%E3%83%9F%E3%83%AA%E3%83%A5%E3%82%A6"},{"image_url":null,"name":"monolith slip","url":"https://booth.pm/en/items?tags%5B%5D=monolith+slip"},{"image_url":null,"name":"DC Mizey","url":"https://booth.pm/en/items?tags%5B%5D=DC+Mizey"},{"image_url":null,"name":"NiesoX","url":"https://booth.pm/en/items?tags%5B%5D=NiesoX"}],"tag_combination":{"category":"Game Music","tag":"Touhou","url":"https://booth.pm/en/browse/Game%20Music?tags%5B%5D=Touhou"},"tracks":null,"variations":[{"buyee_html":null,"downloadable":null,"factory_image_url":null,"has_download_code":false,"id":6998173,"is_anshin_booth_pack":false,"is_empty_allocatable_stock_with_preorder":false,"is_empty_stock":false,"is_factory_item":false,"is_mailbin":false,"is_waiting_on_arrival":false,"name":null,"order_url":null,"price":1500,"small_stock":null,"status":"addable_to_cart","type":"direct"}]} + diff --git a/tests/test-data/__recordings__/booth-provider_1223894492/extracting-images_1310741912/extracts-covers-for-item-with-no-images_1490749324.warc b/tests/test-data/__recordings__/booth-provider_1223894492/extracting-images_1310741912/extracts-covers-for-item-with-no-images_1490749324.warc new file mode 100644 index 00000000..2553d10a --- /dev/null +++ b/tests/test-data/__recordings__/booth-provider_1223894492/extracting-images_1310741912/extracts-covers-for-item-with-no-images_1490749324.warc @@ -0,0 +1,91 @@ +WARC/1.1 +WARC-Filename: booth provider/extracting images/extracts covers for item with no images +WARC-Date: 2023-04-23T08:03:09.586Z +WARC-Type: warcinfo +WARC-Record-ID: +Content-Type: application/warc-fields +Content-Length: 119 + +software: warcio.js +harVersion: 1.2 +harCreator: {"name":"Polly.JS","version":"6.0.5","comment":"persister:fs-warc"} + + +WARC/1.1 +WARC-Concurrent-To: +WARC-Target-URI: https://booth.pm/en/items/4710069.json +WARC-Date: 2023-04-23T08:03:09.586Z +WARC-Type: request +WARC-Record-ID: +Content-Type: application/http; msgtype=request +WARC-Payload-Digest: sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +WARC-Block-Digest: sha256:2646bae935ce2499c3b70e2835b7ab34f950846a74e97c0413459e6837bd1f09 +Content-Length: 39 + +GET /en/items/4710069.json HTTP/1.1 + + + +WARC/1.1 +WARC-Concurrent-To: +WARC-Target-URI: https://booth.pm/en/items/4710069.json +WARC-Date: 2023-04-23T08:03:09.586Z +WARC-Type: metadata +WARC-Record-ID: +Content-Type: application/warc-fields +WARC-Payload-Digest: sha256:b329c70bae8769218014efd935b006c80fbdc73657a5354dddb242f7221dc3e0 +WARC-Block-Digest: sha256:b329c70bae8769218014efd935b006c80fbdc73657a5354dddb242f7221dc3e0 +Content-Length: 1186 + +harEntryId: c88394e0e0085d1680141a1dae87e988 +harEntryOrder: 0 +cache: {} +startedDateTime: 2023-04-23T08:03:08.480Z +time: 1105 +timings: {"blocked":-1,"dns":-1,"connect":-1,"send":0,"wait":1105,"receive":0,"ssl":-1} +warcRequestHeadersSize: 57 +warcRequestCookies: [] +warcResponseHeadersSize: 2918 +warcResponseCookies: [{"name":"recent_items","value":"4710069","domain":".booth.pm","path":"/","expires":"2023-04-23T08:33:09.000Z","secure, _plaza_session_nktz7u":"g8qOmMSYG%2BH1OHUCc4otcBnkuhHaz05byfKCq71nkWRnSRg39Y2HSZQhjs12rMHec%2BsZnBfmXwbWkgK9unhK9ff2ssPpL7ZPdH1wSlPhPCGcnTpkxdfxrpn1g49bLPVYeWeDv4NB5kJltapCpZQcjMH%2BtdYXFFTbGYY0kLG%2BVr86ymU7aiVOM5lHRJvDepX%2BPK9a4EXSeJsc8hzWQtn03agbq3jN99rC67PN3DJtbUs8ppwytFqMTFLKg0nUCK5h0YdCKI19TQwu7uhqOAp2FlDlYI%2F%2BjoHBvQi2UMsdp%2BVH91Nl2x%2FhvM4HTkddnbvBZSeyNiFtGJHsRMsA7ttEeLiaIwmavUjwTLiwMQzWpjbcQEwNtOeXHa8KlOy8usMeD8BOchA1fDvm%2BTPqsfIS--8BWnWrF%2Bdv5n7RBB--tgmt460Q0GGby6to6OqaPg%3D%3D","secure":true,"httponly, __cf_bm":"fr4n.LaTL.V2s9j32a8TwbnmDg2NlkUI1B1Qzr.F34o-1682236989-0-AczmBQh7EbPebRT68nCmmaTPa03xI+ol8RUjdYK5kH+7t99iBmXFExxp7yw9Qn4G3/zEcpUMAHsBKbO1yvulHZY=","httpOnly":true,"sameSite":"None"}] +responseDecoded: false + + +WARC/1.1 +WARC-Target-URI: https://booth.pm/en/items/4710069.json +WARC-Date: 2023-04-23T08:03:09.586Z +WARC-Type: response +WARC-Record-ID: +Content-Type: application/http; msgtype=response +WARC-Payload-Digest: sha256:09ff8cd2a78187adb36f199d2cb6b04138a6c62216c8e1a2792f329a5278a209 +WARC-Block-Digest: sha256:f2e65a34a5a350d01b65758c8cd4a25a8ad745e80cb5dfdca15bcf267bb3d293 +Content-Length: 4535 + +HTTP/1.1 200 OK +alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400 +cache-control: max-age=0, private, must-revalidate +cf-cache-status: DYNAMIC +cf-ray: 7bc4969afbb62868-AMS +connection: close +content-encoding: gzip +content-language: en +content-security-policy: script-src 'strict-dynamic' 'unsafe-eval' 'unsafe-inline' https: 'report-sample' 'nonce-8ptSwv12HkENnpgjWOVdMPaA42TrjztYckpJzPI30pA='; object-src 'none'; base-uri 'self'; frame-src player.vimeo.com w.soundcloud.com www.slideshare.net www.youtube.com bandcamp.com sketchfab.com *.google.com *.facebook.com *.facebook.net *.twitter.com social-plugins.line.me *.g.doubleclick.net www.googletagmanager.com booth.karakuri.ai manage-booth.karakuri.ai point.widget.rakuten.co.jp hub.vroid.com ext.nicovideo.jp www.recaptcha.net https://booth.pm https://*.booth.pm https://factory.pixiv.net https://booth.pximg.net https://connect.buyee.jp https://www.googletagmanager.com; connect-src 'self' data: *.pixiv.net *.pawoo.net www.google-analytics.com analytics.google.com www.facebook.com connect.facebook.net www.googletagmanager.com www.googleadservices.com www.google.co.jp b92.yahoo.co.jp *.buyee.jp d.line-scdn.net stats.g.doubleclick.net ekr.zdassets.com *.zendesk.com errortrace.dev https://booth.pm https://*.booth.pm https://factory.pixiv.net https://booth.pximg.net https://connect.buyee.jp https://www.googletagmanager.com +content-type: application/json; charset=utf-8 +date: Sun, 23 Apr 2023 08:03:09 GMT +etag: W/"09ff8cd2a78187adb36f199d2cb6b041" +referrer-policy: strict-origin-when-cross-origin +server: cloudflare +set-cookie: recent_items=4710069; domain=.booth.pm; path=/; expires=Thu, 23 Apr 2043 08:03:09 GMT; secure, _plaza_session_nktz7u=g8qOmMSYG%2BH1OHUCc4otcBnkuhHaz05byfKCq71nkWRnSRg39Y2HSZQhjs12rMHec%2BsZnBfmXwbWkgK9unhK9ff2ssPpL7ZPdH1wSlPhPCGcnTpkxdfxrpn1g49bLPVYeWeDv4NB5kJltapCpZQcjMH%2BtdYXFFTbGYY0kLG%2BVr86ymU7aiVOM5lHRJvDepX%2BPK9a4EXSeJsc8hzWQtn03agbq3jN99rC67PN3DJtbUs8ppwytFqMTFLKg0nUCK5h0YdCKI19TQwu7uhqOAp2FlDlYI%2F%2BjoHBvQi2UMsdp%2BVH91Nl2x%2FhvM4HTkddnbvBZSeyNiFtGJHsRMsA7ttEeLiaIwmavUjwTLiwMQzWpjbcQEwNtOeXHa8KlOy8usMeD8BOchA1fDvm%2BTPqsfIS--8BWnWrF%2Bdv5n7RBB--tgmt460Q0GGby6to6OqaPg%3D%3D; domain=.booth.pm; path=/; expires=Tue, 23 Apr 2024 08:03:09 GMT; secure; HttpOnly, __cf_bm=fr4n.LaTL.V2s9j32a8TwbnmDg2NlkUI1B1Qzr.F34o-1682236989-0-AczmBQh7EbPebRT68nCmmaTPa03xI+ol8RUjdYK5kH+7t99iBmXFExxp7yw9Qn4G3/zEcpUMAHsBKbO1yvulHZY=; path=/; expires=Sun, 23-Apr-23 08:33:09 GMT; domain=.booth.pm; HttpOnly; Secure; SameSite=None +strict-transport-security: max-age=63072000; includeSubDomains +transfer-encoding: chunked +vary: Origin +x-content-type-options: nosniff +x-download-options: noopen +x-frame-options: SAMEORIGIN +x-permitted-cross-domain-policies: none +x-request-id: 0ad01cf2-a984-4861-b382-d59d270101da +x-runtime: 0.098859 +x-xss-protection: 1; mode=block +x-pollyjs-finalurl: https://booth.pm/en/items/4710069.json + +{"description":"アクスタ 1000円\n缶バッジ 500円\n難ありセット 500円\n☆4特典のクリアファイル\nの2000円になります。送料もかかります。","factory_description":null,"id":4710069,"is_adult":false,"is_buyee_possible":false,"is_end_of_sale":false,"is_placeholder":false,"is_sold_out":false,"name":"シクロさん","price":"2,000 JPY","purchase_limit":null,"shipping_info":"Ships within 60 days","small_stock":1,"url":"https://kyoraishi.booth.pm/items/4710069","wish_list_url":"https://booth.pm/items/4710069/wish_list","wish_lists_count":0,"wished":false,"buyee_variations":[],"category":{"id":181,"name":"Acrylic Figure","parent":{"name":"Goods","url":"https://booth.pm/en/browse/Goods"},"url":"https://booth.pm/en/browse/Acrylic%20Figure"},"embeds":[],"images":[],"order":null,"share":{"hashtags":["booth_pm"],"text":"シクロさん | こまーと"},"shop":{"name":"こまーと","subdomain":"kyoraishi","thumbnail_url":"https://booth.pximg.net/c/48x48/users/10285041/icon_image/ea5f97fb-b0d1-4a93-92ce-76b4aba8415b_base_resized.jpg","url":"https://kyoraishi.booth.pm/","verified":false},"sound":null,"tags":[],"tag_banners":[],"tag_combination":null,"tracks":null,"variations":[{"buyee_html":null,"downloadable":null,"factory_image_url":null,"has_download_code":false,"id":7896690,"is_anshin_booth_pack":true,"is_empty_allocatable_stock_with_preorder":false,"is_empty_stock":false,"is_factory_item":false,"is_mailbin":false,"is_waiting_on_arrival":false,"name":null,"order_url":null,"price":2000,"small_stock":1,"status":"addable_to_cart","type":"direct"}]} + diff --git a/tests/test-data/__recordings__/booth-provider_1223894492/extracting-images_1310741912/throws-on-non-existent-release_1189313548.warc b/tests/test-data/__recordings__/booth-provider_1223894492/extracting-images_1310741912/throws-on-non-existent-release_1189313548.warc new file mode 100644 index 00000000..43de43e3 --- /dev/null +++ b/tests/test-data/__recordings__/booth-provider_1223894492/extracting-images_1310741912/throws-on-non-existent-release_1189313548.warc @@ -0,0 +1,149 @@ +WARC/1.1 +WARC-Filename: booth provider/extracting images/throws on non-existent release +WARC-Date: 2023-04-23T08:03:10.625Z +WARC-Type: warcinfo +WARC-Record-ID: +Content-Type: application/warc-fields +Content-Length: 119 + +software: warcio.js +harVersion: 1.2 +harCreator: {"name":"Polly.JS","version":"6.0.5","comment":"persister:fs-warc"} + + +WARC/1.1 +WARC-Concurrent-To: +WARC-Target-URI: https://booth.pm/en/items/404.json +WARC-Date: 2023-04-23T08:03:10.625Z +WARC-Type: request +WARC-Record-ID: +Content-Type: application/http; msgtype=request +WARC-Payload-Digest: sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 +WARC-Block-Digest: sha256:263d2746ded6adaeb4d1721e012c1799ac7535a828fbf0c7aa405a4c4739e794 +Content-Length: 35 + +GET /en/items/404.json HTTP/1.1 + + + +WARC/1.1 +WARC-Concurrent-To: +WARC-Target-URI: https://booth.pm/en/items/404.json +WARC-Date: 2023-04-23T08:03:10.625Z +WARC-Type: metadata +WARC-Record-ID: +Content-Type: application/warc-fields +WARC-Payload-Digest: sha256:575963f11be9ea7eb76947ec0de63b10b8e1535f33ed915894aeaedf5bb8bf5a +WARC-Block-Digest: sha256:575963f11be9ea7eb76947ec0de63b10b8e1535f33ed915894aeaedf5bb8bf5a +Content-Length: 1127 + +harEntryId: 8206210ef0062222bb5383e6c14581f6 +harEntryOrder: 0 +cache: {} +startedDateTime: 2023-04-23T08:03:09.591Z +time: 1033 +timings: {"blocked":-1,"dns":-1,"connect":-1,"send":0,"wait":1033,"receive":0,"ssl":-1} +warcRequestHeadersSize: 53 +warcRequestCookies: [] +warcResponseHeadersSize: 2719 +warcResponseCookies: [{"name":"_plaza_session_nktz7u","value":"Et5kv59WvWh4DqcJpmK4apeYVAkQK4Fl4shwoqy2AO8dEZMxRhaUaBiHSJx+6wbqM6qgMGDFpUp/o0otuo31F6336TFq498UW7i9J2veHff/18HRNCAIgbir2zmWCFsH6sBNEFMFnYE1sccBvUldHasX8xXbQ5CeBHonWYLDtzmFaP4225VwHHoPBBfR70e1w6ONeOKhmV39Qaxt1DZ47q7DvwwSpUC+NjwznYQQF/6q19SHZ7O904mhedP4IQV7HdGTZ73opeCIsFBFVGdUCmmeuqRQGHSindEVMzLI7n75RX9r1U1d8cfk19lSwxToH4BYDU67IHwqv8YqmS8dRi9YqRtZFo0GQGl+5EIK42CJLvMvztd3bpK5DjiuN/kTmtdsI1IKoPGEh7tpTO1+--COpP+UPH3OydQKse--QytlYBUG+o/VAyZnC9aYuw==","domain":".booth.pm","path":"/","expires":"2023-04-23T08:33:10.000Z","secure":true,"httponly, __cf_bm":"Afrmz4PVyjyUSg7NLcsh2db0Sk_rU8e2PJuuclmeHxg-1682236990-0-AYDh+GtOMa5a+RkvCx/+Zr4yCaIYa8y2TYfuiLcjlaoaA8oIYoW+k1Ir8TvZruVl5qW4mVdDSW4ArlKPHbTXvH4=","httpOnly":true,"sameSite":"None"}] +responseDecoded: false + + +WARC/1.1 +WARC-Target-URI: https://booth.pm/en/items/404.json +WARC-Date: 2023-04-23T08:03:10.625Z +WARC-Type: response +WARC-Record-ID: +Content-Type: application/http; msgtype=response +WARC-Payload-Digest: sha256:8af37e1560e2d1d5f2f1d983b7d4efeeab1d6457df4cbc61589aa447fd692f77 +WARC-Block-Digest: sha256:15c6639423c9acf7be6ae4e52b18b5f8d7d71bc2a8bbad66bf8302c444289929 +Content-Length: 4470 + +HTTP/1.1 404 Not Found +alt-svc: h3=":443"; ma=86400, h3-29=":443"; ma=86400 +cache-control: no-cache +cf-cache-status: DYNAMIC +cf-ray: 7bc496a1ef3db89a-AMS +connection: close +content-encoding: gzip +content-security-policy: script-src 'strict-dynamic' 'unsafe-eval' 'unsafe-inline' https: 'report-sample' 'nonce-dPJKM7qcUXG23wkc+v1GqMza2Su5La1dkLX1xwNJsdE='; object-src 'none'; base-uri 'self'; frame-src player.vimeo.com w.soundcloud.com www.slideshare.net www.youtube.com bandcamp.com sketchfab.com *.google.com *.facebook.com *.facebook.net *.twitter.com social-plugins.line.me *.g.doubleclick.net www.googletagmanager.com booth.karakuri.ai manage-booth.karakuri.ai point.widget.rakuten.co.jp hub.vroid.com ext.nicovideo.jp www.recaptcha.net https://booth.pm https://*.booth.pm https://factory.pixiv.net https://booth.pximg.net https://connect.buyee.jp https://www.googletagmanager.com; connect-src 'self' data: *.pixiv.net *.pawoo.net www.google-analytics.com analytics.google.com www.facebook.com connect.facebook.net www.googletagmanager.com www.googleadservices.com www.google.co.jp b92.yahoo.co.jp *.buyee.jp d.line-scdn.net stats.g.doubleclick.net ekr.zdassets.com *.zendesk.com errortrace.dev https://booth.pm https://*.booth.pm https://factory.pixiv.net https://booth.pximg.net https://connect.buyee.jp https://www.googletagmanager.com +content-type: text/html; charset=utf-8 +date: Sun, 23 Apr 2023 08:03:10 GMT +referrer-policy: strict-origin-when-cross-origin +server: cloudflare +set-cookie: _plaza_session_nktz7u=Et5kv59WvWh4DqcJpmK4apeYVAkQK4Fl4shwoqy2AO8dEZMxRhaUaBiHSJx%2B6wbqM6qgMGDFpUp%2Fo0otuo31F6336TFq498UW7i9J2veHff%2F18HRNCAIgbir2zmWCFsH6sBNEFMFnYE1sccBvUldHasX8xXbQ5CeBHonWYLDtzmFaP4225VwHHoPBBfR70e1w6ONeOKhmV39Qaxt1DZ47q7DvwwSpUC%2BNjwznYQQF%2F6q19SHZ7O904mhedP4IQV7HdGTZ73opeCIsFBFVGdUCmmeuqRQGHSindEVMzLI7n75RX9r1U1d8cfk19lSwxToH4BYDU67IHwqv8YqmS8dRi9YqRtZFo0GQGl%2B5EIK42CJLvMvztd3bpK5DjiuN%2FkTmtdsI1IKoPGEh7tpTO1%2B--COpP%2BUPH3OydQKse--QytlYBUG%2Bo%2FVAyZnC9aYuw%3D%3D; domain=.booth.pm; path=/; expires=Tue, 23 Apr 2024 08:03:10 GMT; secure; HttpOnly, __cf_bm=Afrmz4PVyjyUSg7NLcsh2db0Sk_rU8e2PJuuclmeHxg-1682236990-0-AYDh+GtOMa5a+RkvCx/+Zr4yCaIYa8y2TYfuiLcjlaoaA8oIYoW+k1Ir8TvZruVl5qW4mVdDSW4ArlKPHbTXvH4=; path=/; expires=Sun, 23-Apr-23 08:33:10 GMT; domain=.booth.pm; HttpOnly; Secure; SameSite=None +strict-transport-security: max-age=63072000; includeSubDomains +transfer-encoding: chunked +vary: Origin +x-content-type-options: nosniff +x-download-options: noopen +x-frame-options: SAMEORIGIN +x-permitted-cross-domain-policies: none +x-request-id: 87dbbe6e-da2b-4335-92fc-f284b3edf31d +x-runtime: 0.009637 +x-xss-protection: 1; mode=block +x-pollyjs-finalurl: https://booth.pm/en/items/404.json + + + +BOOTH | お探しの商品が見つかりませんでした… (404) + + + + +
+ + +

お探しの商品が見つかりませんでした…

+

誠に申し訳ございません。

+

お探しの商品は削除されたか、移動された可能性があります。

+

5秒後にBOOTHに移動します。

+
+ + diff --git a/tests/unit/mb_enhanced_cover_art_uploads/providers/booth.test.ts b/tests/unit/mb_enhanced_cover_art_uploads/providers/booth.test.ts new file mode 100644 index 00000000..aaafddf2 --- /dev/null +++ b/tests/unit/mb_enhanced_cover_art_uploads/providers/booth.test.ts @@ -0,0 +1,91 @@ +import { ArtworkTypeIDs } from '@lib/MB/CoverArt'; +import { BoothProvider } from '@src/mb_enhanced_cover_art_uploads/providers/booth'; +import { itBehavesLike } from '@test-utils/shared_behaviour'; + +import { findImagesSpec } from './find_images_spec'; +import { urlMatchingSpec } from './url_matching_spec'; + +describe('booth provider', () => { + const provider = new BoothProvider(); + + describe('url matching', () => { + const supportedUrls = [{ + desc: 'item URLs in Japanese', + url: 'https://booth.pm/ja/items/1973472', + id: '1973472', + }, { + desc: 'item URLs in English', + url: 'https://booth.pm/en/items/2969400', + id: '2969400', + }, { + desc: 'item URLs with shop subdomain', + url: 'https://iosys.booth.pm/items/4182601', + id: '4182601', + }]; + + const unsupportedUrls = [{ + desc: 'browse URLs', + url: 'https://booth.pm/en/browse/Vocaloid', + }, { + desc: 'items URLs without item ID', + url: 'https://booth.pm/en/items?sort=new', + }, { + desc: 'shop subdomains without item', + url: 'https://iosys.booth.pm/', + }]; + + // eslint-disable-next-line jest/require-hook + itBehavesLike(urlMatchingSpec, { provider, supportedUrls, unsupportedUrls }); + }); + + describe('extracting images', () => { + const extractionCases = [{ + desc: 'album with one image', + url: 'https://booth.pm/en/items/2969400', + numImages: 1, + expectedImages: [{ + index: 0, + urlPart: 'cb2b3f79-e5d1-4186-811f-229bc4a8cdad', + types: [ArtworkTypeIDs.Front], + }], + }, { + desc: 'album with multiple images and YouTube embedded video', + url: 'https://booth.pm/ja/items/1973472', + numImages: 2, + expectedImages: [{ + index: 0, + urlPart: '80eef6e0-2ac9-4e0a-95ce-47163efe9717', + types: [ArtworkTypeIDs.Front], + }, { + index: 1, + urlPart: '0cb0b6fa-647d-4300-9c04-35a78c3c9fce', + }], + }, { + desc: 'item with no images', + // Not really an album + url: 'https://booth.pm/en/items/4710069', + numImages: 0, + expectedImages: [], + }, { + desc: 'item on custom shop domain', + url: 'https://iosys.booth.pm/items/4182601', + numImages: 2, + expectedImages: [{ + index: 0, + urlPart: 'f03d93f8-0b45-4848-a23b-53d5320fb2d1', + types: [ArtworkTypeIDs.Front], + }, { + index: 1, + urlPart: '6131c0c0-aaa1-4351-9cbf-352abe945f83', + }], + }]; + + const extractionFailedCases = [{ + desc: 'non-existent release', + url: 'https://booth.pm/ja/items/404', + }]; + + // eslint-disable-next-line jest/require-hook + itBehavesLike(findImagesSpec, { provider, extractionCases, extractionFailedCases }); + }); +});