Say which film it is: three languages were labelled JESUS Film without one
Five codes still carried the retired ?languageId= URL, which nothing can verify. Asking Arclight what each language actually has: ars Arabic, Najdi The Savior (8 groups; film was their ONLY resource) gjk Kachi Koli Magdalena - Director's Cut mzn Mazanderani Magdalena - Director's Cut lia Limba, West-Central no feature at all jos Jordanian Sign Lang left alone, see below counts.featureFilm >= 1 says a feature exists, not that it is JESUS. Three of these had a real JESUS Film Project film in their own language under a different title, and the map called all of them the JESUS Film — the same class of lie as calling Open Bible Stories Scripture. They now ship under their own names, with verified deep links; lia's film is dropped, because no component carries it and a link nobody can check is worse than none. jos is left exactly as it was. Arclight files iso3 jos under a row whose own name reads Lebanese Sign Language, while the JESUS Film sits at a different id named Jordanian Sign Language. The ISO join and the publisher's label disagree, and resolving that is a data question, not a guess to make inside a fetcher.
This commit is contained in:
parent
de7388cbf7
commit
4fc261f8df
29 changed files with 6513 additions and 66 deletions
File diff suppressed because one or more lines are too long
|
|
@ -911,7 +911,7 @@
|
|||
"pct_with_nothing": 9.8,
|
||||
"people_with_nothing": 146600,
|
||||
"groups_with_scripture": 19,
|
||||
"groups_with_film": 24,
|
||||
"groups_with_film": 23,
|
||||
"band": "partial",
|
||||
"growing_unreached": 7,
|
||||
"deaths_day": 14.5,
|
||||
|
|
@ -1121,7 +1121,7 @@
|
|||
"pct_with_nothing": 10.7,
|
||||
"people_with_nothing": 98950,
|
||||
"groups_with_scripture": 21,
|
||||
"groups_with_film": 25,
|
||||
"groups_with_film": 24,
|
||||
"band": "partial",
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 1.1,
|
||||
|
|
|
|||
|
|
@ -337,7 +337,7 @@
|
|||
"no_resource": 4,
|
||||
"pop_no_resource": 146600,
|
||||
"scripture": 19,
|
||||
"film": 24,
|
||||
"film": 23,
|
||||
"growing_unreached": 7,
|
||||
"deaths_day": 14.5,
|
||||
"growth": 2.4,
|
||||
|
|
@ -2241,7 +2241,7 @@
|
|||
"no_resource": 3,
|
||||
"pop_no_resource": 98950,
|
||||
"scripture": 21,
|
||||
"film": 25,
|
||||
"film": 24,
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 1.1,
|
||||
"growth": 2.12,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"meta": {
|
||||
"title": "Gospel resource link verification",
|
||||
"generated": "2026-09-25T02:30:53.812Z",
|
||||
"generated": "2026-09-25T03:43:08.467Z",
|
||||
"method": "HEAD, redirects followed. verified = HTTP 200. broken = 404/410. unknown = unreachable, an ambiguous status, or a URL shape that cannot be checked by fetch.",
|
||||
"scope": "Every URL in data/tables/people-group-pins.json, deduplicated.",
|
||||
"states": {
|
||||
|
|
@ -96,12 +96,12 @@
|
|||
]
|
||||
},
|
||||
"summary": {
|
||||
"records": 8513,
|
||||
"checkedThisPass": 40,
|
||||
"records": 8516,
|
||||
"checkedThisPass": 3,
|
||||
"carriedForward": 74,
|
||||
"pruned": 0,
|
||||
"broken": 74,
|
||||
"verified": 8434,
|
||||
"verified": 8437,
|
||||
"unknown": 5
|
||||
},
|
||||
"byHost": {
|
||||
|
|
@ -119,11 +119,11 @@
|
|||
"verified": 3
|
||||
},
|
||||
"jesusfilm.org": {
|
||||
"verified": 2048,
|
||||
"verified": 2050,
|
||||
"broken": 1
|
||||
},
|
||||
"arc.gt": {
|
||||
"verified": 32,
|
||||
"verified": 33,
|
||||
"broken": 1
|
||||
},
|
||||
"zume.training": {
|
||||
|
|
@ -42711,6 +42711,21 @@
|
|||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/2235?language=Mehinaku (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:30:53.528Z"
|
||||
},
|
||||
"https://jesusfilm.org/watch/magdalena-director-cut/mazanderani": {
|
||||
"state": "verified",
|
||||
"detail": "HTTP 200 (via https://www.jesusfilm.org/watch/magdalena-director-cut.html/mazanderani.html)",
|
||||
"at": "2026-09-25T03:43:07.735Z"
|
||||
},
|
||||
"https://jesusfilm.org/watch/magdalena-director-cut/kachhi-gujerati": {
|
||||
"state": "verified",
|
||||
"detail": "HTTP 200 (via https://www.jesusfilm.org/watch/magdalena-director-cut.html/kachhi-gujerati.html)",
|
||||
"at": "2026-09-25T03:43:07.768Z"
|
||||
},
|
||||
"https://arc.gt/durve": {
|
||||
"state": "verified",
|
||||
"detail": "HTTP 200 (via https://www.jesusfilm.org/watch/the-savior.html/arabic-najdi.html)",
|
||||
"at": "2026-09-25T03:43:07.944Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -260,7 +260,7 @@
|
|||
"iso639_3": "ars",
|
||||
"population": 12970000,
|
||||
"can_hear": "the JESUS Film",
|
||||
"first_link": "https://www.jesusfilm.org/watch/?languageId=184591",
|
||||
"first_link": "https://arc.gt/durve",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible, youversion, grn (not yet swept)",
|
||||
"lat": 24.56,
|
||||
|
|
@ -1562,7 +1562,7 @@
|
|||
"iso639_3": "ars",
|
||||
"population": 1990000,
|
||||
"can_hear": "the JESUS Film",
|
||||
"first_link": "https://www.jesusfilm.org/watch/?languageId=184591",
|
||||
"first_link": "https://arc.gt/durve",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible, youversion, grn (not yet swept)",
|
||||
"lat": 31.77,
|
||||
|
|
@ -2066,7 +2066,7 @@
|
|||
"iso639_3": "ars",
|
||||
"population": 1485000,
|
||||
"can_hear": "the JESUS Film",
|
||||
"first_link": "https://www.jesusfilm.org/watch/?languageId=184591",
|
||||
"first_link": "https://arc.gt/durve",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible, youversion, grn (not yet swept)",
|
||||
"lat": 34.54,
|
||||
|
|
@ -2122,7 +2122,7 @@
|
|||
"iso639_3": "ars",
|
||||
"population": 1440000,
|
||||
"can_hear": "the JESUS Film",
|
||||
"first_link": "https://www.jesusfilm.org/watch/?languageId=184591",
|
||||
"first_link": "https://arc.gt/durve",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible, youversion, grn (not yet swept)",
|
||||
"lat": 24.69,
|
||||
|
|
@ -2248,7 +2248,7 @@
|
|||
"iso639_3": "ars",
|
||||
"population": 1365000,
|
||||
"can_hear": "the JESUS Film",
|
||||
"first_link": "https://www.jesusfilm.org/watch/?languageId=184591",
|
||||
"first_link": "https://arc.gt/durve",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible, youversion, grn (not yet swept)",
|
||||
"lat": 32.5,
|
||||
|
|
@ -6014,7 +6014,7 @@
|
|||
"iso639_3": "ars",
|
||||
"population": 382000,
|
||||
"can_hear": "the JESUS Film",
|
||||
"first_link": "https://www.jesusfilm.org/watch/?languageId=184591",
|
||||
"first_link": "https://arc.gt/durve",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible, youversion, grn (not yet swept)",
|
||||
"lat": 29.34,
|
||||
|
|
@ -14288,7 +14288,7 @@
|
|||
"iso639_3": "ars",
|
||||
"population": 79000,
|
||||
"can_hear": "the JESUS Film",
|
||||
"first_link": "https://www.jesusfilm.org/watch/?languageId=184591",
|
||||
"first_link": "https://arc.gt/durve",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible, youversion, grn (not yet swept)",
|
||||
"lat": 34.09,
|
||||
|
|
@ -23752,7 +23752,7 @@
|
|||
"iso639_3": "ars",
|
||||
"population": 20000,
|
||||
"can_hear": "the JESUS Film",
|
||||
"first_link": "https://www.jesusfilm.org/watch/?languageId=184591",
|
||||
"first_link": "https://arc.gt/durve",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible, youversion, grn (not yet swept)",
|
||||
"lat": 45.44,
|
||||
|
|
|
|||
|
|
@ -41,7 +41,10 @@ export function resourceRows(c) {
|
|||
}
|
||||
|
||||
add(c.sv || 'Scripture in this language', 'Scripture', c.s, c.ss || '')
|
||||
add('JESUS Film', 'Film', c.f)
|
||||
/* c.fT is set only where the JESUS Film component does NOT carry this language and a
|
||||
different JESUS Film Project feature does — The Savior, Magdalena. Calling that "JESUS
|
||||
Film" would be the same class of lie as calling Open Bible Stories Scripture. */
|
||||
add(c.fT || 'JESUS Film', 'Film', c.f)
|
||||
for (const d of c.d || []) {
|
||||
add(d.s, /^Open Bible Stories/.test(d.s) ? 'Bible Stories' : 'Scripture', d.u, d.sc || '')
|
||||
}
|
||||
|
|
|
|||
|
|
@ -630,6 +630,10 @@ function groupAt(i) {
|
|||
_iso3: r[3] || '',
|
||||
scripture_url: c.s || '',
|
||||
film_url: c.f || '',
|
||||
/* Empty except where the JESUS component does not carry this language and another
|
||||
JESUS Film Project feature does. See gospel-resource-rows.js — the chip must say
|
||||
which film it is, not which film we usually mean. */
|
||||
film_title: c.fT || '',
|
||||
has_audio: c.a === 1 ? true : c.a === 0 ? false : 'unknown',
|
||||
has_open_bible_stories: !!c.o,
|
||||
door43: Array.isArray(c.d) ? c.d : [],
|
||||
|
|
@ -1462,7 +1466,7 @@ useShadowStyles(
|
|||
:title="/[?&]languageId=/.test(selectedGroup.film_url)
|
||||
? 'The JESUS Film Project lists a feature film in this language, but no per-language link is published for it — this opens their site and you may need to choose the language there.'
|
||||
: 'Opens the JESUS Film in this language on jesusfilm.org.'">
|
||||
Film · {{ vchip(selectedGroup.film_url).label }}
|
||||
{{ selectedGroup.film_title || 'Film' }} · {{ vchip(selectedGroup.film_url).label }}
|
||||
</a>
|
||||
<span v-else class="gm-chip meh">Film · none found</span>
|
||||
|
||||
|
|
|
|||
|
|
@ -121,7 +121,23 @@ try { arc = JSON.parse(readFileSync(ARC, 'utf8')).codes || {} } catch { arc = {}
|
|||
// exists it replaces that URL entirely rather than sitting alongside it.
|
||||
let share = {}
|
||||
try { share = JSON.parse(readFileSync(ARC_SHARE, 'utf8')).codes || {} } catch { share = {} }
|
||||
const filmUrl = (code, aa) => httpsify(share[code] || (aa ? aa.u : ''))
|
||||
/**
|
||||
* The share table answers in three shapes, and each means something different:
|
||||
* a STRING the JESUS Film deep link for this language
|
||||
* an OBJECT {u,t} a different JESUS Film Project feature — the JESUS component has no
|
||||
* entry for this language — and t is what it must actually be called
|
||||
* null no feature exists at all; ship NO film rather than the retired ?languageId=
|
||||
* URL, which nothing can verify and which claimed a film that is not there
|
||||
* undefined (never fetched) keeps the old behaviour and falls back to the roster URL.
|
||||
*/
|
||||
const shareEntry = (code, aa) => {
|
||||
const v = share[code]
|
||||
if (v === null) return { u: '', t: '' }
|
||||
if (v && typeof v === 'object') return { u: httpsify(v.u || ''), t: String(v.t || '') }
|
||||
return { u: httpsify(v || (aa ? aa.u : '')), t: '' }
|
||||
}
|
||||
const filmUrl = (code, aa) => shareEntry(code, aa).u
|
||||
const filmTitle = (code, aa) => shareEntry(code, aa).t
|
||||
|
||||
// Zume Training snapshot (scripts/fetch-zume-index.mjs). Same optional contract as above.
|
||||
// Zume is DISCIPLESHIP TRAINING, not Scripture and not film, so it is kept in its own
|
||||
|
|
@ -251,9 +267,22 @@ for (const [c, aa] of Object.entries(arc)) {
|
|||
// An existing film link that is the ignored ?languageId= form is REPLACED where a real
|
||||
// deep link exists: keeping it would mean curation preserving a URL that goes nowhere
|
||||
// specific, which is not what the fill-never-overwrite rule is protecting.
|
||||
if (codes[c]?.f && share[c] && /[?&]languageId=/.test(codes[c].f)) { codes[c].f = httpsify(share[c]); upgraded++ }
|
||||
if (codes[c]) { if (!codes[c].f) codes[c].f = filmUrl(c, aa); continue }
|
||||
/* The UPGRADE path reads the share table too, and read it RAW — so an {u,t} entry
|
||||
stringified straight into the URL field as "[object Object]" for ars, whose film is
|
||||
its only resource. Both readers go through shareEntry now; there is exactly one place
|
||||
that knows the three shapes. */
|
||||
if (codes[c]?.f && share[c] !== undefined && /[?&]languageId=/.test(codes[c].f)) {
|
||||
const e = shareEntry(c, null)
|
||||
if (e.u) { codes[c].f = e.u; if (e.t) codes[c].fT = e.t; upgraded++ }
|
||||
else if (share[c] === null) { delete codes[c].f; delete codes[c].fT }
|
||||
}
|
||||
const ft = filmTitle(c, aa)
|
||||
if (codes[c]) {
|
||||
if (!codes[c].f) { codes[c].f = filmUrl(c, aa); if (ft) codes[c].fT = ft }
|
||||
continue
|
||||
}
|
||||
codes[c] = { l: aa.n || '', f: filmUrl(c, aa), ck: 'arclight', un: 'ebible, door43, grn, api_bible, dbl, progress_bible' }
|
||||
if (ft) codes[c].fT = ft
|
||||
arcOnly++
|
||||
}
|
||||
for (const [c, ee] of Object.entries(eb)) {
|
||||
|
|
|
|||
|
|
@ -29,6 +29,21 @@ const ARC = resolve(REPO, 'data/tables/arclight-index.json')
|
|||
const OUT = resolve(REPO, 'data/tables/arclight-share-urls.json')
|
||||
const UA = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36'
|
||||
const JF = '1_jf-0-0'
|
||||
|
||||
/**
|
||||
* `jos` IS SKIPPED, AND THE REASON IS UPSTREAM. ISO 639-3 jos is Jordanian Sign Language.
|
||||
* Arclight's roster files iso3 "jos" under languageId 139080, whose own name field reads
|
||||
* "Lebanese Sign Language" — a different language (lbs). Meanwhile the JESUS Film DOES exist
|
||||
* at languageId 7138, named Jordanian Sign Language, which is the id the pin index carries.
|
||||
*
|
||||
* So the ISO join — the thing this whole map is built on — disagrees with the publisher's own
|
||||
* label for this one code, and the fallback below resolved 139080 to Magdalena: the wrong film
|
||||
* AND the wrong language, shown to three people groups. Left exactly as it was rather than
|
||||
* guessed at. Resolving it means deciding whether the code or the name is authoritative here,
|
||||
* and that is a data question for someone who can check it against Ethnologue, not something
|
||||
* to settle inside a fetcher.
|
||||
*/
|
||||
const SKIP = new Set(['jos'])
|
||||
const DELAY = Number(process.env.DELAY_MS || 250)
|
||||
|
||||
const arc = JSON.parse(readFileSync(ARC, 'utf8')).codes
|
||||
|
|
@ -39,7 +54,8 @@ let fetched = 0, cached = 0, missing = 0
|
|||
|
||||
for (let i = 0; i < entries.length; i++) {
|
||||
const [code, v] = entries[i]
|
||||
if (out[code]) { cached++; continue }
|
||||
if (SKIP.has(code)) { cached++; continue }
|
||||
if (out[code] !== undefined) { cached++; continue }
|
||||
try {
|
||||
const r = await fetch(`https://api.arclight.org/v2/media-components/${JF}/languages/${v.id}`, { headers: { 'User-Agent': UA } })
|
||||
if (r.ok) {
|
||||
|
|
@ -48,7 +64,57 @@ for (let i = 0; i < entries.length; i++) {
|
|||
// is a downgrade nobody asked for.
|
||||
const u = String(d.shareUrl || '').replace(/^http:\/\//, 'https://')
|
||||
if (u) { out[code] = u; fetched++ } else missing++
|
||||
} else missing++
|
||||
} else if (r.status !== 404) {
|
||||
/* ONLY A 404 MEANS "THE JESUS COMPONENT HAS NO ENTRY FOR THIS LANGUAGE". A 429, a 500
|
||||
* or a blip means we do not know yet, and the fallback below must not run on it.
|
||||
* Measured: the first version treated ANY non-ok as "no JESUS Film" and wrote Magdalena
|
||||
* over Jordanian Sign Language, which HAS the JESUS Film at arc.gt/g8wmw — a transient
|
||||
* failure silently downgrading a language to a different film. Left undefined so the
|
||||
* next run retries it. */
|
||||
missing++
|
||||
} else {
|
||||
/* ═══ THE JESUS FILM COMPONENT DOES NOT CARRY EVERY LANGUAGE THE ROSTER COUNTS ═══
|
||||
*
|
||||
* counts.featureFilm >= 1 says a FEATURE exists in this language. It does not say the
|
||||
* feature is JESUS. For five codes this endpoint 404s, and the build was falling back
|
||||
* to the retired ?languageId= URL — unverifiable by fetch, and labelled "JESUS Film"
|
||||
* on a language the JESUS component has no entry for. Measured 2026-09-25:
|
||||
* ars Arabic, Najdi -> The Savior (8 groups, film was their ONLY resource)
|
||||
* gjk Kachi Koli -> Magdalena — Director's Cut
|
||||
* mzn Mazanderani -> Magdalena — Director's Cut
|
||||
* lia Limba, West-Central -> NO component at all
|
||||
* jos Jordanian Sign Language -> the JESUS Film after all, at arc.gt/g8wmw
|
||||
*
|
||||
* So ask what feature this language actually has. A real JESUS Film Project feature in
|
||||
* someone's own language is worth shipping — dropping ars would have pushed 8 groups
|
||||
* into the gap while a gospel film exists in their language — but it must be shipped
|
||||
* UNDER ITS OWN NAME. This bundle already refuses to call Open Bible Stories Scripture;
|
||||
* calling The Savior the JESUS Film is the same lie.
|
||||
*
|
||||
* Same publisher, so the doctrinal screen is unchanged: these are JESUS Film Project
|
||||
* features, the catalogue the brief names explicitly. Nothing outside it is taken.
|
||||
*
|
||||
* `null` is recorded when no feature exists, and the pin build DROPS the film rather
|
||||
* than falling back to a URL nobody can check. */
|
||||
let alt = null
|
||||
try {
|
||||
const c = await fetch(`https://api.arclight.org/v2/media-components?languageIds=${v.id}&limit=25`, { headers: { 'User-Agent': UA } })
|
||||
if (c.ok) {
|
||||
const cj = await c.json()
|
||||
const feature = (cj._embedded?.mediaComponents || []).find((m) => m.subType === 'featureFilm')
|
||||
if (feature) {
|
||||
const fr = await fetch(`https://api.arclight.org/v2/media-components/${feature.mediaComponentId}/languages/${v.id}`, { headers: { 'User-Agent': UA } })
|
||||
if (fr.ok) {
|
||||
const fd = await fr.json()
|
||||
const fu = String(fd.shareUrl || '').replace(/^http:\/\//, 'https://')
|
||||
if (fu) alt = { u: fu, t: feature.title || feature.mediaComponentId }
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch { /* fall through to null */ }
|
||||
out[code] = alt
|
||||
if (alt) fetched++; else missing++
|
||||
}
|
||||
} catch { missing++ }
|
||||
// The CHECKPOINT write is deliberately unguarded: this script resumes from the existing
|
||||
// file as a cache, so `out` starts full and only grows. It cannot shrink, which is the
|
||||
|
|
@ -62,7 +128,7 @@ for (let i = 0; i < entries.length; i++) {
|
|||
await new Promise((r) => setTimeout(r, DELAY))
|
||||
}
|
||||
writeSnapshot(OUT, JSON.stringify({
|
||||
_note: 'Per-language JESUS Film deep links (shareUrl) from Arclight media-components 1_jf-0-0. Replaces ?languageId=, which the site ignores.',
|
||||
_note: 'Per-language JESUS Film Project deep links (shareUrl) from Arclight media-components. A STRING is the JESUS Film (component 1_jf-0-0). An OBJECT {u,t} is a different JESUS Film Project feature in that language — the JESUS component has no entry for it — and t is the real title, which the surfaces must show instead of "JESUS Film". null means no feature exists and the film is dropped rather than linked to the retired ?languageId= URL, which nothing can verify.',
|
||||
generated: new Date().toISOString().slice(0, 10),
|
||||
stats: { languages: entries.length, withShareUrl: Object.keys(out).length, missing },
|
||||
codes: out,
|
||||
|
|
|
|||
2107
public/assets/tables/arclight-share-urls.json
vendored
2107
public/assets/tables/arclight-share-urls.json
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
public/assets/tables/people-group-pins.json
vendored
2
public/assets/tables/people-group-pins.json
vendored
File diff suppressed because one or more lines are too long
2107
public/doxa-maps/assets/tables/arclight-share-urls.json
generated
2107
public/doxa-maps/assets/tables/arclight-share-urls.json
generated
File diff suppressed because one or more lines are too long
4
public/doxa-maps/assets/tables/country-gap.json
generated
4
public/doxa-maps/assets/tables/country-gap.json
generated
|
|
@ -911,7 +911,7 @@
|
|||
"pct_with_nothing": 9.8,
|
||||
"people_with_nothing": 146600,
|
||||
"groups_with_scripture": 19,
|
||||
"groups_with_film": 24,
|
||||
"groups_with_film": 23,
|
||||
"band": "partial",
|
||||
"growing_unreached": 7,
|
||||
"deaths_day": 14.5,
|
||||
|
|
@ -1121,7 +1121,7 @@
|
|||
"pct_with_nothing": 10.7,
|
||||
"people_with_nothing": 98950,
|
||||
"groups_with_scripture": 21,
|
||||
"groups_with_film": 25,
|
||||
"groups_with_film": 24,
|
||||
"band": "partial",
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 1.1,
|
||||
|
|
|
|||
|
|
@ -337,7 +337,7 @@
|
|||
"no_resource": 4,
|
||||
"pop_no_resource": 146600,
|
||||
"scripture": 19,
|
||||
"film": 24,
|
||||
"film": 23,
|
||||
"growing_unreached": 7,
|
||||
"deaths_day": 14.5,
|
||||
"growth": 2.4,
|
||||
|
|
@ -2241,7 +2241,7 @@
|
|||
"no_resource": 3,
|
||||
"pop_no_resource": 98950,
|
||||
"scripture": 21,
|
||||
"film": 25,
|
||||
"film": 24,
|
||||
"growing_unreached": 0,
|
||||
"deaths_day": 1.1,
|
||||
"growth": 2.12,
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"meta": {
|
||||
"title": "Gospel resource link verification",
|
||||
"generated": "2026-09-25T02:30:53.812Z",
|
||||
"generated": "2026-09-25T03:43:08.467Z",
|
||||
"method": "HEAD, redirects followed. verified = HTTP 200. broken = 404/410. unknown = unreachable, an ambiguous status, or a URL shape that cannot be checked by fetch.",
|
||||
"scope": "Every URL in data/tables/people-group-pins.json, deduplicated.",
|
||||
"states": {
|
||||
|
|
@ -96,12 +96,12 @@
|
|||
]
|
||||
},
|
||||
"summary": {
|
||||
"records": 8513,
|
||||
"checkedThisPass": 40,
|
||||
"records": 8516,
|
||||
"checkedThisPass": 3,
|
||||
"carriedForward": 74,
|
||||
"pruned": 0,
|
||||
"broken": 74,
|
||||
"verified": 8434,
|
||||
"verified": 8437,
|
||||
"unknown": 5
|
||||
},
|
||||
"byHost": {
|
||||
|
|
@ -119,11 +119,11 @@
|
|||
"verified": 3
|
||||
},
|
||||
"jesusfilm.org": {
|
||||
"verified": 2048,
|
||||
"verified": 2050,
|
||||
"broken": 1
|
||||
},
|
||||
"arc.gt": {
|
||||
"verified": 32,
|
||||
"verified": 33,
|
||||
"broken": 1
|
||||
},
|
||||
"zume.training": {
|
||||
|
|
@ -42711,6 +42711,21 @@
|
|||
"state": "verified",
|
||||
"detail": "5fish redirected to its language page https://fivefish.org/2235?language=Mehinaku (the site answers 200 for any path)",
|
||||
"at": "2026-09-25T02:30:53.528Z"
|
||||
},
|
||||
"https://jesusfilm.org/watch/magdalena-director-cut/mazanderani": {
|
||||
"state": "verified",
|
||||
"detail": "HTTP 200 (via https://www.jesusfilm.org/watch/magdalena-director-cut.html/mazanderani.html)",
|
||||
"at": "2026-09-25T03:43:07.735Z"
|
||||
},
|
||||
"https://jesusfilm.org/watch/magdalena-director-cut/kachhi-gujerati": {
|
||||
"state": "verified",
|
||||
"detail": "HTTP 200 (via https://www.jesusfilm.org/watch/magdalena-director-cut.html/kachhi-gujerati.html)",
|
||||
"at": "2026-09-25T03:43:07.768Z"
|
||||
},
|
||||
"https://arc.gt/durve": {
|
||||
"state": "verified",
|
||||
"detail": "HTTP 200 (via https://www.jesusfilm.org/watch/the-savior.html/arabic-najdi.html)",
|
||||
"at": "2026-09-25T03:43:07.944Z"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -260,7 +260,7 @@
|
|||
"iso639_3": "ars",
|
||||
"population": 12970000,
|
||||
"can_hear": "the JESUS Film",
|
||||
"first_link": "https://www.jesusfilm.org/watch/?languageId=184591",
|
||||
"first_link": "https://arc.gt/durve",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible, youversion, grn (not yet swept)",
|
||||
"lat": 24.56,
|
||||
|
|
@ -1562,7 +1562,7 @@
|
|||
"iso639_3": "ars",
|
||||
"population": 1990000,
|
||||
"can_hear": "the JESUS Film",
|
||||
"first_link": "https://www.jesusfilm.org/watch/?languageId=184591",
|
||||
"first_link": "https://arc.gt/durve",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible, youversion, grn (not yet swept)",
|
||||
"lat": 31.77,
|
||||
|
|
@ -2066,7 +2066,7 @@
|
|||
"iso639_3": "ars",
|
||||
"population": 1485000,
|
||||
"can_hear": "the JESUS Film",
|
||||
"first_link": "https://www.jesusfilm.org/watch/?languageId=184591",
|
||||
"first_link": "https://arc.gt/durve",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible, youversion, grn (not yet swept)",
|
||||
"lat": 34.54,
|
||||
|
|
@ -2122,7 +2122,7 @@
|
|||
"iso639_3": "ars",
|
||||
"population": 1440000,
|
||||
"can_hear": "the JESUS Film",
|
||||
"first_link": "https://www.jesusfilm.org/watch/?languageId=184591",
|
||||
"first_link": "https://arc.gt/durve",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible, youversion, grn (not yet swept)",
|
||||
"lat": 24.69,
|
||||
|
|
@ -2248,7 +2248,7 @@
|
|||
"iso639_3": "ars",
|
||||
"population": 1365000,
|
||||
"can_hear": "the JESUS Film",
|
||||
"first_link": "https://www.jesusfilm.org/watch/?languageId=184591",
|
||||
"first_link": "https://arc.gt/durve",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible, youversion, grn (not yet swept)",
|
||||
"lat": 32.5,
|
||||
|
|
@ -6014,7 +6014,7 @@
|
|||
"iso639_3": "ars",
|
||||
"population": 382000,
|
||||
"can_hear": "the JESUS Film",
|
||||
"first_link": "https://www.jesusfilm.org/watch/?languageId=184591",
|
||||
"first_link": "https://arc.gt/durve",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible, youversion, grn (not yet swept)",
|
||||
"lat": 29.34,
|
||||
|
|
@ -14288,7 +14288,7 @@
|
|||
"iso639_3": "ars",
|
||||
"population": 79000,
|
||||
"can_hear": "the JESUS Film",
|
||||
"first_link": "https://www.jesusfilm.org/watch/?languageId=184591",
|
||||
"first_link": "https://arc.gt/durve",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible, youversion, grn (not yet swept)",
|
||||
"lat": 34.09,
|
||||
|
|
@ -23752,7 +23752,7 @@
|
|||
"iso639_3": "ars",
|
||||
"population": 20000,
|
||||
"can_hear": "the JESUS Film",
|
||||
"first_link": "https://www.jesusfilm.org/watch/?languageId=184591",
|
||||
"first_link": "https://arc.gt/durve",
|
||||
"checked_pools": "arclight, door43, ebible, fcbh, scriptureearth",
|
||||
"unchecked_pools": "api_bible, dbl, progress_bible, youversion, grn (not yet swept)",
|
||||
"lat": 45.44,
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-muBwL0JGuEgF9nEiranHSAJ1y7Ip/o8jdt8jhTVns34CxvEKgKmanIN6SeQbIazw" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-zCWRceOR5Ch5p+IQMYtMEy4Fq8oij8wmY/2ZZHudvoF6wJtZVZ0EcjvfONY6xvAq" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-muBwL0JGuEgF9nEiranHSAJ1y7Ip/o8jdt8jhTVns34CxvEKgKmanIN6SeQbIazw" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-zCWRceOR5Ch5p+IQMYtMEy4Fq8oij8wmY/2ZZHudvoF6wJtZVZ0EcjvfONY6xvAq" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-muBwL0JGuEgF9nEiranHSAJ1y7Ip/o8jdt8jhTVns34CxvEKgKmanIN6SeQbIazw" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-zCWRceOR5Ch5p+IQMYtMEy4Fq8oij8wmY/2ZZHudvoF6wJtZVZ0EcjvfONY6xvAq" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -26,7 +26,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-muBwL0JGuEgF9nEiranHSAJ1y7Ip/o8jdt8jhTVns34CxvEKgKmanIN6SeQbIazw" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-zCWRceOR5Ch5p+IQMYtMEy4Fq8oij8wmY/2ZZHudvoF6wJtZVZ0EcjvfONY6xvAq" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@
|
|||
|
||||
<script>window.MAP_APP_API_URL = "https://pray.doxa.life";</script>
|
||||
<!-- Bundle IIFE — registers the <gospel-resources-map> custom element. -->
|
||||
<script src="../gospel-resources.js" integrity="sha384-muBwL0JGuEgF9nEiranHSAJ1y7Ip/o8jdt8jhTVns34CxvEKgKmanIN6SeQbIazw" crossorigin="anonymous"></script>
|
||||
<script src="../gospel-resources.js" integrity="sha384-zCWRceOR5Ch5p+IQMYtMEy4Fq8oij8wmY/2ZZHudvoF6wJtZVZ0EcjvfONY6xvAq" crossorigin="anonymous"></script>
|
||||
|
||||
<script>
|
||||
// Mapbox token resolution — the A3 ladder, in precedence order:
|
||||
|
|
|
|||
2
public/doxa-maps/index.html
generated
2
public/doxa-maps/index.html
generated
File diff suppressed because one or more lines are too long
12
public/doxa-maps/manifest.json
generated
12
public/doxa-maps/manifest.json
generated
|
|
@ -596,7 +596,7 @@
|
|||
"bundle": "gospel-resources",
|
||||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"output": "doxa-maps/gospel-resources/gospel-resources.js",
|
||||
"integrity": "sha384-muBwL0JGuEgF9nEiranHSAJ1y7Ip/o8jdt8jhTVns34CxvEKgKmanIN6SeQbIazw",
|
||||
"integrity": "sha384-zCWRceOR5Ch5p+IQMYtMEy4Fq8oij8wmY/2ZZHudvoF6wJtZVZ0EcjvfONY6xvAq",
|
||||
"elements": [
|
||||
"gospel-resources-map"
|
||||
],
|
||||
|
|
@ -616,7 +616,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/charts/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-muBwL0JGuEgF9nEiranHSAJ1y7Ip/o8jdt8jhTVns34CxvEKgKmanIN6SeQbIazw\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-zCWRceOR5Ch5p+IQMYtMEy4Fq8oij8wmY/2ZZHudvoF6wJtZVZ0EcjvfONY6xvAq\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"charts\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -630,7 +630,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/data-tables/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-muBwL0JGuEgF9nEiranHSAJ1y7Ip/o8jdt8jhTVns34CxvEKgKmanIN6SeQbIazw\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-zCWRceOR5Ch5p+IQMYtMEy4Fq8oij8wmY/2ZZHudvoF6wJtZVZ0EcjvfONY6xvAq\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"data-tables\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -644,7 +644,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/gospel-dashboard/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-muBwL0JGuEgF9nEiranHSAJ1y7Ip/o8jdt8jhTVns34CxvEKgKmanIN6SeQbIazw\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-zCWRceOR5Ch5p+IQMYtMEy4Fq8oij8wmY/2ZZHudvoF6wJtZVZ0EcjvfONY6xvAq\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"gospel-dashboard\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -658,7 +658,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/resources-list/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-muBwL0JGuEgF9nEiranHSAJ1y7Ip/o8jdt8jhTVns34CxvEKgKmanIN6SeQbIazw\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-zCWRceOR5Ch5p+IQMYtMEy4Fq8oij8wmY/2ZZHudvoF6wJtZVZ0EcjvfONY6xvAq\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-list\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
},
|
||||
{
|
||||
|
|
@ -672,7 +672,7 @@
|
|||
"scriptUrl": "./gospel-resources/gospel-resources.js",
|
||||
"embed": {
|
||||
"iframe": "<iframe src=\"./gospel-resources/resources-map/index.html?utm_source=YOUR_SOURCE\" width=\"100%\" height=\"600\" style=\"border:none;border-radius:12px;\" allowfullscreen></iframe>",
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-muBwL0JGuEgF9nEiranHSAJ1y7Ip/o8jdt8jhTVns34CxvEKgKmanIN6SeQbIazw\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
"script": "<script>window.MAP_APP_API_URL=\"https://pray.doxa.life\";</script>\n<script src=\"./gospel-resources/gospel-resources.js\" integrity=\"sha384-zCWRceOR5Ch5p+IQMYtMEy4Fq8oij8wmY/2ZZHudvoF6wJtZVZ0EcjvfONY6xvAq\" crossorigin=\"anonymous\"></script>\n<gospel-resources-map profile-config='{\"profile\":\"resources-map\",\"tk\":\"YOUR_MAPBOX_TOKEN\",\"utmSource\":\"YOUR_SOURCE\",\"assetsBase\":\"YOUR_TREE_URL/assets\"}'></gospel-resources-map>"
|
||||
}
|
||||
}
|
||||
]
|
||||
|
|
|
|||
Loading…
Reference in a new issue