#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Cek JSON-LD apa adanya (kode karakter) + kata artikel #5059 + daftar URL internal kandidat."""
import base64, json, re, urllib.request

S = "https://studiosoft.id"
AUTH = base64.b64encode(b"bambangbot:q26r RePo BVy6 pwU2 F3z7 ouyl").decode()
UA = {"User-Agent": "Mozilla/5.0"}


def rest(p):
    r = urllib.request.Request(S + p, headers={"Authorization": f"Basic {AUTH}", **UA})
    with urllib.request.urlopen(r, timeout=180) as x:
        return json.loads(x.read())


def polos(h):
    h = re.sub(r"<script.*?</script>", " ", h, flags=re.S | re.I)
    h = re.sub(r"<[^>]+>", " ", h)
    return re.sub(r"\s+", " ", h).strip()


# 1. JSON-LD apa adanya
q = rest("/wp-json/wp/v2/posts?slug=audit-seo-teknis-12-pemeriksaan&status=any&context=edit"
         "&_fields=id,content")
raw = q[0]["content"]["raw"]
blk = re.search(r'<script type="application/ld\+json">(.*?)</script>', raw, re.S).group(1)
d = json.loads(blk)
ctx = d["@context"]
print("schema @context: len=%d kode=%s" % (len(ctx), [ord(c) for c in ctx]))
print("schema @type   :", d["@type"], "| jumlah pertanyaan:", len(d["mainEntity"]))
print("masih ada bintang '***' di raw:", "***" in raw)

# 2. #5059
p = rest("/wp-json/wp/v2/posts/5059?context=edit&_fields=id,slug,link,date,title,content,meta")
print("\n#5059", p["link"], "| tayang", p["date"])
print("  judul:", p["title"]["raw"])
print("  fokus:", (p.get("meta") or {}).get("_yoast_wpseo_focuskw"))
print("  panjang:", len(polos(p["content"]["raw"]).split()), "kata")

# 3. kandidat tautan internal: post & page dengan slug relevan
print("\n=== kandidat tautan internal (post publish) ===")
for st in ("publish",):
    for page in (1, 2):
        d2 = rest(f"/wp-json/wp/v2/posts?status={st}&per_page=100&page={page}&_fields=id,slug,link,title")
        if not isinstance(d2, list) or not d2:
            break
        for x in d2:
            s = x["slug"].lower()
            if any(k in s for k in ("landing", "website", "jasa-seo-surabaya", "digital-agency", "audit",
                                    "core-web-vitals", "maintenance", "paket-harga", "harga-website",
                                    "company-profile")):
                print(f"  #{x['id']:>5} | {x['slug']}")
        if len(d2) < 100:
            break

print("\n=== kandidat tautan internal (page publish) ===")
for x in rest("/wp-json/wp/v2/pages?status=publish&per_page=100&_fields=id,slug,link,title"):
    print(f"  #{x['id']:>5} | {x['slug']:<45} | {x['title']['rendered'][:45]}")
