275aff1430
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>
75 lines
2.6 KiB
Python
75 lines
2.6 KiB
Python
#!/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")
|