Mirror del Joomla antiguo: versionar los scripts y reponer los assets que faltaban
Los scripts del mirror (00-90) vivian solo en el disco. Van al repo; los datos que generan no (16 GB entre crawl, snapshot del origen y Joomla restaurado) -> .gitignore. Nuevo 91-repone-assets404.sh: repone los ficheros que el crawl no capturo porque se referencian SOLO desde CSS y el crawler seguia enlaces HTML (system.css, los fondos de fe_adulta_1, ratingstars.gif de K2). Salian como 404 en los logs de nginx del Hetzner. Descarga por HTTP desde el Joomla local aislado, nunca del filesystem -- mismo principio que el crawl, para no arrastrar los .php comprometidos del #183 -- y escanea PHP embebido antes de copiar a site/. Resultado sobre las 286 rutas unicas con 404 del log: 196 repuestas y verificadas en produccion (196/196 en 200 tras el rsync), 82 que dan 301->404 tambien en el origen (ya estaban rotas en la web original) y 8 rutas basura /%22/... de HTML mal formado. Refs #180 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Quita el tag de Google Analytics clasico (UA-32008163-1) del mirror servible.
|
||||
|
||||
UA dejo de procesar datos en julio de 2023: el snippet solo sirve para pedir un
|
||||
ga.js muerto en cada carga. Se quita el bloque <script> ENTERO que lo contiene,
|
||||
no solo la linea del ID, porque dejar el `_gaq.push` suelto no ahorra la peticion.
|
||||
|
||||
**GA4 (G-6RT9ZRS4LW) se queda**: es un bloque <script> distinto y Rafa quiere
|
||||
seguir midiendo el archivo (#180 comment-504, decision 4).
|
||||
|
||||
Solo se toca `site/` (el arbol servible). `raw/` queda intacto como captura fiel
|
||||
del original, igual que se hizo con los botones sociales.
|
||||
|
||||
Uso: python3 60-quitar-ua.py [--dry-run]
|
||||
"""
|
||||
import os, re, sys, hashlib
|
||||
|
||||
DRY = "--dry-run" in sys.argv
|
||||
BASE = "/home/rafa/joomla-migration/mirror-antiguo"
|
||||
RUN = open(os.path.join(BASE, "CURRENT_RUN")).read().strip()
|
||||
SITE = os.path.join(BASE, "runs", RUN, "site", "antiguo.feadulta.com")
|
||||
|
||||
UA = "UA-32008163-1"
|
||||
GA4 = "G-6RT9ZRS4LW"
|
||||
|
||||
# Bloque <script>…</script> que contiene el UA. El (?:(?!</script>).)*? impide
|
||||
# que el .*? se coma varios bloques seguidos y se lleve por delante el GA4.
|
||||
BLOQUE = re.compile(
|
||||
r"[ \t]*<script[^>]*>(?:(?!</script>).)*?" + re.escape(UA) +
|
||||
r"(?:(?!</script>).)*?</script>\s*", re.S)
|
||||
|
||||
tocados = errores = 0
|
||||
sin_ga4 = []
|
||||
bytes_antes = bytes_despues = 0
|
||||
|
||||
for raiz, _, ficheros in os.walk(SITE):
|
||||
for f in ficheros:
|
||||
if not f.lower().endswith((".html", ".htm")) and "." in f:
|
||||
continue
|
||||
ruta = os.path.join(raiz, f)
|
||||
try:
|
||||
txt = open(ruta, encoding="utf-8", errors="surrogateescape").read()
|
||||
except (OSError, UnicodeDecodeError):
|
||||
continue
|
||||
if UA not in txt:
|
||||
continue
|
||||
|
||||
tenia_ga4 = GA4 in txt
|
||||
nuevo, n = BLOQUE.subn("\n", txt)
|
||||
|
||||
if UA in nuevo:
|
||||
# El bloque no casó: no dejar el fichero a medias, mejor avisar.
|
||||
errores += 1
|
||||
continue
|
||||
if tenia_ga4 and GA4 not in nuevo:
|
||||
sin_ga4.append(ruta)
|
||||
continue
|
||||
|
||||
bytes_antes += len(txt)
|
||||
bytes_despues += len(nuevo)
|
||||
tocados += 1
|
||||
if not DRY:
|
||||
with open(ruta, "w", encoding="utf-8", errors="surrogateescape") as fh:
|
||||
fh.write(nuevo)
|
||||
|
||||
print(f"ficheros modificados : {tocados}")
|
||||
print(f"no casó el patron : {errores}")
|
||||
print(f"habrian perdido GA4 : {len(sin_ga4)}")
|
||||
for r in sin_ga4[:5]:
|
||||
print(" ", r)
|
||||
if tocados:
|
||||
print(f"bytes : {bytes_antes:,} -> {bytes_despues:,} "
|
||||
f"({bytes_antes - bytes_despues:,} menos)")
|
||||
print("(DRY RUN, no se ha escrito nada)" if DRY else "escrito")
|
||||
Reference in New Issue
Block a user