Files
rafa 66ee943da4 chore(verify): recuperar enum_urls.php y commitear tooling de verificación #121
El enumerador de URLs no se había commiteado y se perdió. Recuperado
reproduciendo la composición de la corrida previa (menús×5 idiomas +
categorías con contenido + contenido no-ES). Se añade también
classify_gaps.py (clasifica huecos: traducir vs descargar) y run_all.sh.
Outputs y .venv quedan en .gitignore.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-22 08:30:18 -04:00

89 lines
3.8 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* enum_urls.php — Enumera las URLs del sitio para el crawler de verificación (#121).
*
* Recuperado 2026-06-22 (el original no se había commiteado y se perdió). Reproduce
* la composición de la corrida previa: menús×5 idiomas + categorías con contenido +
* todo el contenido no-ES (el ES masivo ~24k se omite por volumen).
*
* Uso (dentro del contenedor, carga wp-load):
* docker cp enum_urls.php wordpress-web:/tmp/ && \
* docker exec wordpress-web php /tmp/enum_urls.php && \
* docker cp wordpress-web:/tmp/verify_urls.json urls.json
*
* Salida: /tmp/verify_urls.json — array de {url, lang, kind, id}.
*/
require_once '/var/www/html/wp-load.php';
$LANGS = ['es', 'en', 'fr', 'it', 'pt'];
$out = [];
$seen = [];
function add(&$out, &$seen, $url, $lang, $kind, $id) {
$url = trailingslashit($url);
$k = $lang . '|' . $url;
if (isset($seen[$k])) return;
$seen[$k] = true;
$out[] = ['url' => $url, 'lang' => $lang, 'kind' => $kind, 'id' => (int) $id];
}
// ── 1) MENÚ: 31 rutas base × 5 idiomas ───────────────────────────────────────
// Rutas del menú principal (wp_navigation ID 1). Para no-ES se prefija /{lang}/;
// el crawler sigue redirecciones cross-idioma y las marca.
$menu_paths = [
'', 'colaboradores', 'portal', 'paraponeraldialafe', 'category/cartasemana',
'category/carta-semana-pasada', 'category/cartas-de-otras-semanas',
'nueva-politica-de-privacidad', 'contactar', 'alta', 'alta-en-effa', 'escuela',
'category/cartas-que-nos-llegan', 'category/tablon-de-anuncios',
'category/asociacion-feadulta', 'numeros', 'category/comunidades-cristianas',
'evangelio-diario-2024', 'category/indice-cronologico',
'category/evangelios-y-comentarios', 'oraciones-eucaristicas', 'a-modo-de-salmo',
'preces-y-oraciones-varias', 'te-creia-un-capricho-mas', 'autores-lista', 'temas',
'multimedia', 'pensamientos', 'indice-cantoral', 'peliculas', 'in-memoriam',
];
$home = home_url('/'); // .../fea/
foreach ($LANGS as $lang) {
$prefix = ($lang === 'es') ? $home : $home . $lang . '/';
foreach ($menu_paths as $p) {
add($out, $seen, $p === '' ? $prefix : $prefix . $p, $lang, 'menu', 0);
}
}
// ── 2) CATEGORÍAS con contenido ──────────────────────────────────────────────
// ES: todas las categorías hide_empty. no-ES: solo las que tienen traducción.
$terms = get_terms(['taxonomy' => 'category', 'hide_empty' => true]);
foreach ($terms as $t) {
$link = get_term_link($t);
if (!is_wp_error($link)) add($out, $seen, $link, 'es', 'category', $t->term_id);
if (function_exists('pll_get_term')) {
foreach (['en', 'fr', 'it', 'pt'] as $lang) {
$tr = pll_get_term($t->term_id, $lang);
if ($tr) {
$l = get_term_link((int) $tr, 'category');
if (!is_wp_error($l)) add($out, $seen, $l, $lang, 'category', $tr);
}
}
}
}
// ── 3) CONTENIDO no-ES (posts publicados en en/fr/it/pt) ─────────────────────
foreach (['en', 'fr', 'it', 'pt'] as $lang) {
$q = new WP_Query([
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1,
'fields' => 'ids',
'lang' => $lang,
'no_found_rows' => true,
]);
foreach ($q->posts as $pid) {
add($out, $seen, get_permalink($pid), $lang, 'content', $pid);
}
}
file_put_contents('/tmp/verify_urls.json', json_encode($out, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE));
$by = [];
foreach ($out as $r) { $by[$r['kind']] = ($by[$r['kind']] ?? 0) + 1; }
fwrite(STDERR, 'enum: ' . count($out) . ' URLs ' . json_encode($by) . "\n");