#!/usr/bin/env python3
"""TSLaw: baca keyphrase & meta Yoast tiap halaman dengan pola XML-RPC yang benar."""
import base64, re, urllib.request
from xml.sax.saxutils import escape

DOM = "tslaw.id"
USER, PASS = "bambangbot", "EFKm EYGx VQCP Y9go ncPr uM2Y"
AUTH = base64.b64encode(f"{USER}:{PASS}".encode()).decode()


def rpc(method, params=()):
    def val(v):
        if isinstance(v, int):
            return f"<value><int>{v}</int></value>"
        if isinstance(v, list):
            return "<value><array><data>" + "".join(val(x) for x in v) + "</data></array></value>"
        if isinstance(v, dict):
            return "<value><struct>" + "".join(f"<member><name>{escape(str(k))}</name>{val(x)}</member>"
                                               for k, x in v.items()) + "</struct></value>"
        return f"<value><string>{escape(str(v))}</string></value>"
    body = ("<?xml version=\"1.0\"?><methodCall><methodName>" + method + "</methodName><params>" +
            "".join(f"<param>{val(p)}</param>" for p in params) + "</params></methodCall>").encode()
    r = urllib.request.Request(f"https://www.{DOM}/xmlrpc.php", data=body,
                               headers={"Content-Type": "text/xml", "User-Agent": "Mozilla/5.0",
                                        "Authorization": f"Basic {AUTH}"}, method="POST")
    with urllib.request.urlopen(r, timeout=180) as x:
        return x.read().decode("utf-8", "replace")


def meta(isi, kunci):
    pola = (r"<member><name>key</name><value><string>" + re.escape(kunci) +
            r"</string></value></member>\s*<member><name>value</name><value><string>(.*?)</string>")
    m = re.search(pola, isi, re.S)
    return m.group(1) if m else None


HAL = ((833, "Beranda", "/"), (834, "Tentang", "/tentang/"), (12, "Layanan", "/practice-areas/"),
       (10, "Hubungi", "/hubungi/"), (2798, "Artikel", "/artikel/"))
print("=== keyphrase & meta Yoast terpasang sekarang ===")
hasil = {}
for pid, nama, url in HAL:
    isi = rpc("wp.getPost", [1, USER, PASS, pid])
    d = {"fokus": meta(isi, "_yoast_wpseo_focuskw"), "judul": meta(isi, "_yoast_wpseo_title"),
         "meta": meta(isi, "_yoast_wpseo_metadesc")}
    hasil[pid] = d
    print(f"\n  #{pid} {nama} ({url})")
    print(f"     keyphrase : {d['fokus'] or '(kosong)'}")
    print(f"     judul SEO : {d['judul'] or '(kosong → pakai judul halaman)'}")
    print(f"     meta desc : ({len(d['meta'] or '')} char) {d['meta'] or '(kosong)'}")

print("\n=== data pendukung (GSC 90 hari, per halaman) ===")
from google.oauth2 import service_account
from googleapiclient.discovery import build
import os
gsc = build("searchconsole", "v1", credentials=service_account.Credentials.from_service_account_file(
    os.path.expanduser("~/.hermes/gsc_service_account.json"),
    scopes=["https://www.googleapis.com/auth/webmasters.readonly"]), cache_discovery=False)
rows = gsc.searchanalytics().query(siteUrl="https://www.tslaw.id/", body={
    "startDate": "2026-06-28", "endDate": "2026-09-25", "dimensions": ["query", "page"],
    "rowLimit": 5000}).execute().get("rows", [])
for pid, nama, url in HAL:
    kunci = url.rstrip("/") or "/"
    cocok = [r for r in rows if r["keys"][1].replace("https://www.tslaw.id", "").rstrip("/") == kunci.rstrip("/")]
    cocok.sort(key=lambda r: -r["impressions"])
    imp = sum(r["impressions"] for r in cocok)
    print(f"\n  {nama}: {imp} impresi | {sum(r['clicks'] for r in cocok)} klik")
    for r in cocok[:6]:
        print(f"     imp {r['impressions']:>4} | klik {r['clicks']} | pos {round(r['position'],1):>5} | {r['keys'][0][:50]}")
