Seguimiento del arreglo del 2026-08-17: comprueba cada mañana (07:00 UTC) si los seis del EN y el ES del día han entrado en el índice, y lo cuenta por Telegram. El marcador semanal no mide esto —mide impresiones, y un post que Google no conoce no tiene impresiones que medir. Se apaga solo pasado el 2026-08-24. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
122 lines
4.6 KiB
Python
122 lines
4.6 KiB
Python
#!/usr/bin/env python3
|
|
"""Parte de indexación por Telegram — seguimiento del arreglo del 2026-08-17.
|
|
|
|
De un solo uso, con fecha de caducidad puesta. El 2026-08-17 se descubrió que
|
|
seis artículos del blog EN llevaban hasta dos semanas publicados sin que Google
|
|
los hubiera rastreado siquiera («URL is unknown to Google»); ver
|
|
~/.claude/…/memory/feedback_indexacion_se_comprueba_no_se_deduce.md.
|
|
|
|
Esa noche se pidió indexación a mano de los seis y se reenviaron los sitemaps.
|
|
Este script comprueba a la mañana siguiente si han entrado y lo cuenta por
|
|
Telegram, porque el marcador semanal NO mide esto: mide impresiones, y un post
|
|
que Google no conoce no tiene impresiones que medir.
|
|
|
|
Se apaga solo: pasada FIN deja de avisar (ver `caducado`). Para quitarlo del
|
|
todo: systemctl disable --now indexacion-parte.timer
|
|
"""
|
|
import datetime as dt
|
|
import sys
|
|
|
|
sys.path.insert(0, "/home/chemavx/seo-tools")
|
|
import seo_gsc as G # noqa: E402 (telegram/token/credencial ya resueltos ahí)
|
|
|
|
import requests # noqa: E402
|
|
|
|
# Los seis del arreglo, en el orden en que se publicaron.
|
|
EN = [
|
|
("the-wilson-davis-memo-inside-a-pentagon-officials-blocked-access-to-"
|
|
"americas-ufo-reverse-engineering-program", "wilson-davis"),
|
|
("hundreds-watched-in-broad-daylight-the-westall-ufo-mystery-that-"
|
|
"australia-still-cant-explain", "westall"),
|
|
("pursue-release-5-2026-1948-memo-redacted-uap-videos", "release-5"),
|
|
("uap-nuclear-bases-six-decades-incursions", "uap-nuclear-bases"),
|
|
("project-blue-book-declassified-ufo-files", "blue-book"),
|
|
("the-mj-12-documents-a-forty-year-forgery-mystery", "mj-12"),
|
|
("shag-harbour-1967-canada-government-documented-ufo-crash", "shag-harbour"),
|
|
]
|
|
ES = [("teheran-1976-cazas-f-4-ovni", "teheran")]
|
|
|
|
# A partir de aquí el seguimiento deja de tener sentido: o entraron, o el
|
|
# problema es otro y toca mirarlo a mano, no seguir mandando partes.
|
|
FIN = dt.date(2026, 8, 24)
|
|
|
|
|
|
def estado(tok, site, slug):
|
|
"""Veredicto de Google, no deducción nuestra. Devuelve (icono, texto)."""
|
|
base = ("https://www.theexclusionzone.com/" if site == "en"
|
|
else "https://zonadeexclusion.com/")
|
|
r = requests.post(
|
|
"https://searchconsole.googleapis.com/v1/urlInspection/index:inspect",
|
|
headers={"Authorization": f"Bearer {tok}"}, timeout=60,
|
|
json={"inspectionUrl": f"{base}{slug}/",
|
|
"siteUrl": G.SITIOS[site]["propiedad"]})
|
|
if r.status_code != 200:
|
|
return "❓", f"error {r.status_code}"
|
|
i = r.json()["inspectionResult"]["indexStatusResult"]
|
|
cob = i.get("coverageState", "?")
|
|
if i.get("verdict") == "PASS":
|
|
return "✅", "indexado"
|
|
if cob.startswith("Crawled"):
|
|
return "🟡", "rastreado, sin indexar"
|
|
if cob.startswith("Discovered"):
|
|
return "🔵", "descubierto, sin rastrear"
|
|
return "⏳", "Google no lo conoce"
|
|
|
|
|
|
def sitemaps(tok, site):
|
|
import urllib.parse as up
|
|
prop = G.SITIOS[site]["propiedad"]
|
|
r = requests.get(
|
|
"https://searchconsole.googleapis.com/webmasters/v3/sites/"
|
|
f"{up.quote(prop, safe='')}/sitemaps",
|
|
headers={"Authorization": f"Bearer {tok}"}, timeout=30)
|
|
if r.status_code != 200:
|
|
return []
|
|
return [(s["path"].rsplit("/", 1)[-1], (s.get("lastDownloaded") or "—")[:10])
|
|
for s in r.json().get("sitemap", [])]
|
|
|
|
|
|
def main():
|
|
hoy = dt.date.today()
|
|
if hoy > FIN:
|
|
print(f"caducado ({FIN}); no se manda parte")
|
|
return 0
|
|
|
|
tok = G.token(G.carga_credencial())
|
|
L = [f"🔎 Indexación — parte del {hoy:%d/%m}", ""]
|
|
|
|
pendientes = []
|
|
for site, lista, cab in (("en", EN, "INGLÉS"), ("es", ES, "ESPAÑOL")):
|
|
L.append(f"── {cab}")
|
|
ok = 0
|
|
for slug, corto in lista:
|
|
ic, txt = estado(tok, site, slug)
|
|
if ic == "✅":
|
|
ok += 1
|
|
else:
|
|
pendientes.append(corto)
|
|
L.append(f" {ic} {corto} — {txt}")
|
|
L.append(f" {ok} de {len(lista)} indexados")
|
|
L.append("")
|
|
|
|
L.append("── SITEMAPS (última lectura de Google)")
|
|
for site, cab in (("en", "EN"), ("es", "ES")):
|
|
for nombre, fecha in sitemaps(tok, site):
|
|
L.append(f" {cab} {nombre}: {fecha}")
|
|
L.append("")
|
|
|
|
if pendientes:
|
|
L.append("Si alguno lleva más de 48 h sin moverse, vuelve a pedirle "
|
|
"indexación en Search Console — el límite diario da de sobra.")
|
|
else:
|
|
L.append("Todo dentro. Nada que hacer, y este parte ya no hace falta:")
|
|
L.append("systemctl disable --now indexacion-parte.timer")
|
|
|
|
texto = "\n".join(L)
|
|
print(texto)
|
|
return 0 if G.telegram(texto) else 1
|
|
|
|
|
|
if __name__ == "__main__":
|
|
sys.exit(main())
|