summaryrefslogtreecommitdiff
path: root/app/scrapers/warp-kichijoji.ts
diff options
context:
space:
mode:
authoryyamashita <yyamashita@mosquit.one>2026-05-07 19:27:50 +0900
committeryyamashita <yyamashita@mosquit.one>2026-05-07 19:27:50 +0900
commitd5e975b601e70adf901c8e1eb7e61f0388941195 (patch)
treef1778ff15b6540b44c354cb76c44aac795448c4a /app/scrapers/warp-kichijoji.ts
parentbffc2c74408ff7163cea0c0392dfc4b15c620a5f (diff)
Add 5 new venue scrapers; extract artist info for WARP, shibuya-o, MOON STEP, mod
New scrapers: Fever 下北沢, Nine Spices 下北沢, 西荻窪 JAM, mod 柴崎, 中野 MOON STEP Artist extraction added/fixed: - warp-kichijoji: parse div.w-flyer (clone + remove nested notes-wrapper) - shibuya-o: rewrite to scrape each sub-venue; artist from li.p-scheduled-card__artist-item - moon-step-nakano: parse 出演 section from WordPress API description HTML - mod-shibasaki: fetch individual event pages in parallel; handle live:/出演:/・ bullet formats Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'app/scrapers/warp-kichijoji.ts')
-rw-r--r--app/scrapers/warp-kichijoji.ts20
1 files changed, 19 insertions, 1 deletions
diff --git a/app/scrapers/warp-kichijoji.ts b/app/scrapers/warp-kichijoji.ts
index 8a828ea..8929fef 100644
--- a/app/scrapers/warp-kichijoji.ts
+++ b/app/scrapers/warp-kichijoji.ts
@@ -76,10 +76,28 @@ export const scraper: Scraper = {
? rawImg.replace(/^https?:\/\/sp-ao\.shortpixel\.ai\/client\/[^/]+\//, "")
: null;
+ // Artists in <div class="w-flyer"> separated by <br>
+ // notes-wrapper and detail-texts are nested inside w-flyer — clone and strip them
+ const $wFlyer = $el.find("div.w-flyer").first().clone();
+ $wFlyer.find("section.notes-wrapper, div.detail-texts").remove();
+ $wFlyer.find("br").replaceWith("\n");
+ const rawArtist = $wFlyer.text();
+ const artistLines: string[] = [];
+ for (const raw of rawArtist.split("\n")) {
+ const l = raw.trim();
+ if (!l) {
+ if (artistLines.length > 0) break; // stop at first blank line after artists
+ continue;
+ }
+ if (/^[■▼◼▶◆]|チケット|ticket|TICKET|予約|http|\d{1,2}:\d{2}|[¥¥]/i.test(l)) break;
+ artistLines.push(l);
+ }
+ const artist = artistLines.length > 0 ? artistLines.join(" / ") : null;
+
events.push({
venue_id: venue.id,
title,
- artist: null,
+ artist,
date,
open_time: isTime(openTime) ? openTime : null,
start_time: isTime(startTime) ? startTime : null,