from pathlib import Path
p=Path('/opt/struktur/social-media-radar/intake/multi_intake.py')
s=p.read_text()
needle='''def _parse_relative_time_german(rel_str):\n'''
helper='''def normalize_youtube_published(raw: str) -> str:\n """Normalisiert relative YouTube-Zeitangaben; unbekannt bleibt leer."""\n value = (raw or "").strip()\n if not value:\n return ""\n if "T" in value and (value.endswith("Z") or "+" in value or value.count(":") >= 2):\n return value\n m = re.search(r"(?:vor|hace)\\s+(\\d+)\\s+(minute|minutes|minuten|minuto|stunde|stunden|hora|horas|tag|tage|dia|dias|día|días|woche|wochen|semana|semanas|day|days|week|weeks)\\b|\\b(\\d+)\\s+(minutes?|hours?|days?|weeks?)\\s+ago", value.casefold())\n if not m:\n return ""\n number = int(m.group(1) or m.group(3))\n unit = (m.group(2) or m.group(4)).casefold()\n if unit.startswith(("minute", "minut")): delta = timedelta(minutes=number)\n elif unit.startswith(("stund", "hora", "hour")): delta = timedelta(hours=number)\n elif unit.startswith(("tag", "dia", "day")): delta = timedelta(days=number)\n elif unit.startswith(("woch", "semana", "week")): delta = timedelta(weeks=number)\n else: return ""\n return (datetime.now(timezone.utc) - delta).isoformat()\n\n\n'''
assert needle in s
s=s.replace(needle,helper+needle,1)
s=s.replace('t0 = time.time()','t0 = time.monotonic()',2)
s=s.replace(' pub_iso = v.get("published") or ""\n',' pub_iso = normalize_youtube_published(v.get("published") or "")\n',1)
p.write_text(s)
q=Path('/tmp/aa021_watch.py')
w=q.read_text().replace(' t0 = time.time()',' t0 = time.monotonic()',1)
q.write_text(w)