← back to Costa Rica
scripts/cr-fix-fallback.js
43 lines
'use strict';
// Replace bad fallback region images (province locator-map SVGs + one wrong
// Mikulov/Czech photo) with a real scenic Wikipedia lead image per province.
// Curated pages: tourism-famous, real photos, attributable. Run on Kamatera.
const { Pool } = require('pg');
const pool = new Pool({ connectionString: process.env.DATABASE_URL });
const UA = { 'User-Agent': 'CR-Directory/1.0 (https://costarica.agentabrams.com; info@agentabrams.com)' };
const PROVINCE_SCENIC = {
'San José': 'San_José,_Costa_Rica',
'Alajuela': 'Arenal_Volcano',
'Heredia': 'Barva_Volcano',
'Cartago': 'Irazú_Volcano',
'Limón': 'Cahuita_National_Park',
'Puntarenas': 'Manuel_Antonio_National_Park',
'Guanacaste': 'Rincón_de_la_Vieja_Volcano',
};
(async () => {
for (const [prov, page] of Object.entries(PROVINCE_SCENIC)) {
const r = await fetch(`https://en.wikipedia.org/api/rest_v1/page/summary/${encodeURIComponent(page)}`, { headers: UA });
if (!r.ok) { console.log(`${prov}: summary HTTP ${r.status}`); continue; }
const j = await r.json();
const img = j.originalimage || j.thumbnail;
if (!img || img.source.endsWith('.svg') || img.source.includes('.svg/')) {
console.log(`${prov}: no usable photo on ${page}`); continue;
}
// Only rows still carrying a BAD remote image: locator-map SVG renders or
// the known-wrong Mikulov photo. Already-localized and real photos untouched.
const res = await pool.query(
`UPDATE regions SET image_url=$1,
image_credit=$2, image_license='CC via Wikimedia Commons',
image_source_url=$3, image_fetched_at=NOW()
WHERE province=$4 AND image_url LIKE 'http%'
AND (image_url LIKE '%_in_Costa_Rica.svg%' OR image_url LIKE '%Mikulov%')`,
[img.source, `Wikipedia: ${j.title}`,
j.content_urls?.desktop?.page || `https://en.wikipedia.org/wiki/${page}`, prov]);
console.log(`${prov}: ${res.rowCount} regions -> ${page}`);
await new Promise(s => setTimeout(s, 500));
}
await pool.end();
})();