feat(sources): ZZZ's City Fund pass windows from Fandom
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
9f8150fda7
commit
a6a8efa661
7 files changed
+69
-1
No files matched your search
@@ -158,6 +158,32 @@ const SOURCES: SourceSpec[] = [
|
||||
url: "https://genshin-impact.fandom.com/api.php?action=parse&page=Miliastra_Pass&prop=text&formatversion=2&format=json",
|
||||
parserId: "fandomtable",
|
||||
},
|
||||
{
|
||||
id: "zzz-fandom-city-fund",
|
||||
game: "zzz",
|
||||
// The API, as every Fandom source (AGENTS.md § Fandom). This host's
|
||||
// robots.txt answers our client (`RobotsCache`, the real User-Agent) with
|
||||
// 403, the interstitial challenge. The repository owner read
|
||||
// https://zenless-zone-zero.fandom.com/robots.txt in a browser on
|
||||
// 2026-10-16: the `User-agent: *` group has `Allow: /api.php?`,
|
||||
// `Allow: /api.php?action=` and `Allow: /api.php?*&action=`, then
|
||||
// `Disallow:` only for /wiki/Special:, /wiki/User_talk:, /wiki/Template:,
|
||||
// /wiki/Template_talk:, /wiki/Help:, /wiki/User: and /wiki/UserProfile:
|
||||
// (and their language variants); no `Disallow: /` for `*`. `Disallow: /`
|
||||
// applies only to named crawlers (SemrushBot, serpstatbot, GPTBot,
|
||||
// ImagesiftBot, CCBot, OAI-SearchBot, ClaudeBot, GrokBot, xAI-SearchBot,
|
||||
// xAI-Grok, GrokApp, xAI-Bot), none of which we are; `ias_crawler` has
|
||||
// `Crawl-delay: 1`. That reading and the standing `--assume-robots-on-403`
|
||||
// decision (scripts/refresh-sources.ts, AGENTS.md § Scraping conduct) are
|
||||
// what cover this source. The API path answered 200 to the real
|
||||
// User-Agent for the single fixture fetch; no browser-shaped headers.
|
||||
//
|
||||
// A pass history: the `fandomtable` reader finds the `Name | Start | End |
|
||||
// Version` table by heading; the constant title comes from `PASS_SOURCES`
|
||||
// in `parsers/fandomTable.ts`, keyed by this id.
|
||||
url: "https://zenless-zone-zero.fandom.com/api.php?action=parse&page=New_Eridu_City_Fund&prop=text&formatversion=2&format=json",
|
||||
parserId: "fandomtable",
|
||||
},
|
||||
{
|
||||
id: "r1999-fandom-events",
|
||||
game: "r1999",
|
||||
|
||||
@@ -58,6 +58,11 @@ export const PASS_SOURCES: Readonly<Record<string, PassSource>> = {
|
||||
pass: "Miliastra Pass",
|
||||
title: (rowName) => `Miliastra Pass: ${rowName}`,
|
||||
},
|
||||
"zzz-fandom-city-fund": {
|
||||
// One fund, one name; the Name cell is the run's own label, so a constant.
|
||||
pass: "New Eridu City Fund",
|
||||
title: () => "New Eridu City Fund",
|
||||
},
|
||||
};
|
||||
|
||||
/** The columns a pass table is recognised by, as normalised heading text. */
|
||||
|
||||
Reference in new issue
Block a user