#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Artikel pilar StudioSoft vertikal baru:
  1. digital-marketing-bisnis-retail   — 10 segmen retail
  2. digital-marketing-bisnis-keuangan — 10 segmen jasa keuangan
Jalankan: python3 ss_artikel_retail_keuangan.py [--apply]
"""
import base64, html, json, re, sys, time, urllib.request, urllib.error
from datetime import datetime, timedelta, timezone

S = "https://studiosoft.id"
AUTH = base64.b64encode(b"bambangbot:q26r RePo BVy6 pwU2 F3z7 ouyl").decode()
WIB = timezone(timedelta(hours=7))

CTA = """<style>
.ss-cta-wa{display:inline-flex;align-items:center;gap:10px;background-color:#6878d6;color:#ffffff !important;
font-family:'Open Sans',sans-serif;font-weight:600;font-size:17px;padding:15px 30px;border-radius:8px;
text-decoration:none !important;line-height:1.2;box-shadow:0 2px 8px rgba(104,120,214,.35)}
.ss-cta-wa:hover{background-color:#4d61d6;color:#ffffff !important}
</style>
<p style="text-align:center;margin:34px 0 6px">
<a class="ss-cta-wa" href="https://wa.me/6281935000624?text=Halo%20StudioSoft%2C%20saya%20ingin%20konsultasi%20gratis%20untuk%20bisnis%20saya" target="_blank" rel="noopener" role="button">WhatsApp: Konsultasi Gratis</a>
</p>
<p style="text-align:center;font-size:14px;color:#5b5b6b;margin:0 0 26px">Dibalas langsung oleh tim StudioSoft, tanpa biaya dan tanpa komitmen.</p>"""


def schema(faq):
    data = {"@context": "https://schema.org", "@type": "FAQPage",
            "mainEntity": [{"@type": "Question", "name": q,
                            "acceptedAnswer": {"@type": "Answer", "text": a}} for q, a in faq]}
    return '<script type="application/ld+json">' + json.dumps(data, ensure_ascii=False) + "</script>"


A1 = {
    "judul": "Digital Marketing untuk Bisnis Retail: Panduan Semua Segmen",
    "slug": "digital-marketing-bisnis-retail",
    "fokus": "digital marketing retail",
    "seo_title": "Digital Marketing Retail: Panduan Semua Segmen",
    "meta": ("Digital marketing retail untuk semua segmen: kelontong, grosir, fashion, elektronik, "
             "material bangunan, apotek, F&B, optik, sampai toko online. Ini kata kunci dan kanalnya."),
    "kategori": [330, 26],
    "label": "RETAIL",
    "isi": """<p>Retail punya ciri yang membedakannya dari bisnis lain: margin per transaksi tipis, keputusan pembeli cepat, dan pelanggan yang kembali adalah sumber keuntungan yang sebenarnya. Karena itu pemasaran retail tidak bisa hanya mengejar pelanggan baru. Kalau biaya mendapatkan satu pembeli lebih besar daripada laba dari pembelian pertamanya, toko akan tumbuh di atas kertas dan habis di kas.</p>
<p>Halaman ini membahas sepuluh segmen retail, dari kelontong sampai toko online, dengan kata kunci dan kanal yang paling masuk akal untuk masing-masing.</p>

<h2>Empat prinsip yang berlaku di semua segmen retail</h2>
<ul>
<li><strong>Hitung dari margin, bukan dari omzet.</strong> Sebelum menaikkan anggaran iklan, pastikan angka laba per transaksi dan biaya per pembeli baru masih sehat. Tanpa itu, iklan retail mudah berubah menjadi donasi.</li>
<li><strong>Akurasi data produk menentukan segalanya.</strong> Harga, stok, ukuran, dan varian harus cocok antara website, marketplace, dan toko fisik. Satu harga yang tidak sinkron sudah cukup membuat pembeli ragu, dua perbedaan membuat mereka berpindah.</li>
<li><strong>Toko fisik tetap punya keunggulan lokal.</strong> Profil Google Business, foto toko, jam buka, dan ulasan membuat orang yang mencari "dekat saya" datang. Untuk retail, ini sering jadi kanal dengan biaya terendah.</li>
<li><strong>Retensi lebih murah dari akuisisi.</strong> Kabar ke pelanggan lama lewat WhatsApp atau email, program poin sederhana, dan pengingat waktu pembelian berikutnya biasanya memberi hasil lebih besar daripada menambah anggaran iklan ke orang baru.</li>
</ul>

<h2>1. Toko kelontong dan minimarket</h2>
<p>Pembelinya orang sekitar yang mementingkan jarak dan ketersediaan. Kata kunci yang bekerja: toko kelontong dekat nama daerah, sembako murah nama kelurahan, pesan sembako antar. Yang menentukan adalah kemudahan pesan lewat WhatsApp, daftar harga yang jelas, dan layanan antar untuk radius tertentu. Konten yang berguna lebih berupa daftar harga mingguan dan ketersediaan barang, bukan konten hiburan.</p>

<h2>2. Grosir dan distributor</h2>
<p>Pembelinya pemilik warung, pedagang, atau toko kecil yang mengejar harga dan kelengkapan barang. Kata kunci: grosir nama produk nama kota, distributor nama barang, supplier sembako nama kota. Halaman yang dibutuhkan adalah katalog dengan satuan, minimum pembelian, dan skema pengiriman. Untuk segmen ini, WhatsApp dan kunjungan lapangan masih jadi kanal utama, sementara website berfungsi sebagai katalog yang bisa dikirim ke calon pembeli baru.</p>

<h2>3. Fashion, busana, dan aksesori</h2>
<p>Pasar visual, jadi foto dan video memegang peran besar, tapi pembeli tetap menyaring lewat pencarian untuk hal spesifik: gamis wanita nama kota, jahit seragam kantor, sepatu kulit pria, toko batik nama daerah. Yang paling menentukan keputusan: foto yang jelas memperlihatkan bahan dan ukuran, tabel ukuran, serta kebijakan tukar barang yang ditulis terbuka.</p>

<h2>4. Elektronik, gadget, dan aksesori</h2>
<p>Pembelinya membandingkan spesifikasi dan harga, sering dari beberapa toko sekaligus. Kata kunci mencakup merek, tipe, dan kota: harga nama produk nama kota, service laptop nama kota, toko gadget terdekat. Untuk toko yang juga melayani perbaikan, halaman layanan servis terpisah sangat membantu karena pencarian "servis" dan "beli" datang dari orang yang berbeda.</p>

<h2>5. Material bangunan dan perkakas</h2>
<p>Pembelinya tukang, kontraktor kecil, dan pemilik rumah yang sedang merenovasi. Kata kunci: toko bangunan nama daerah, harga semen per sak nama kota, jual besi beton nama kota, sewa alat bangunan. Halaman per kategori barang dengan satuan dan rentang harga lebih berguna daripada katalog gabungan. Untuk alat berat atau alat kerja, layanan sewa sering menjadi pintu masuk yang lebih mudah.</p>

<h2>6. Apotek dan toko kesehatan</h2>
<p>Pembelinya orang yang butuh cepat. Yang dicari: apotek 24 jam nama daerah, apotek terdekat, jual alat kesehatan nama kota. Untuk segmen ini, kejelasan jam operasional, layanan antar, dan ketersediaan produk adalah segalanya. Konten edukasi sebaiknya ditulis hati-hati, tanpa klaim medis, dan selalu mengarahkan ke konsultasi tenaga kesehatan.</p>

<h2>7. Makanan dan minuman retail (toko roti, kue, kafe)</h2>
<p>Bukan restoran, tapi penjualan produk yang bisa dibawa pulang. Kata kunci: kue ulang tahun nama kota, toko roti nama daerah, hampers lebaran nama kota. Yang menghasilkan pesanan adalah foto produk yang konsisten, pilihan ukuran dengan harga, serta kemudahan pesan untuk hari tertentu. Momen musiman seperti hari raya dan akhir tahun perlu disiapkan lebih awal, karena pesanan biasanya datang dari pencarian yang sama.</p>

<h2>8. Optik, perhiasan, dan toko bernilai tinggi</h2>
<p>Pembelinya ragu lebih lama dan membandingkan lebih teliti. Kata kunci: toko kacamata nama kota, servis jam nama daerah, beli emas per gram nama kota. Yang membangun kepercayaan adalah kejelasan sertifikat, garansi, dan kebijakan tukar. Untuk emas, harga harian yang diperbarui memberi alasan orang kembali membuka halaman Anda setiap hari.</p>

<h2>9. Toko online di marketplace</h2>
<p>Banyak penjual bergantung sepenuhnya pada satu marketplace, padahal aturan dan biaya platform bisa berubah kapan saja. Kata kunci tetap relevan di dalam marketplace, tapi yang lebih penting adalah memindahkan sebagian hubungan ke kanal sendiri. Caranya: sertakan kartu ucapan dengan kode untuk pembelian berikutnya lewat WhatsApp atau website, dan bangun daftar pelanggan yang bisa dihubungi tanpa membayar iklan lagi.</p>

<h2>10. Toko retail dengan jaringan cabang</h2>
<p>Setiap cabang punya pencarian sendiri. Satu halaman per cabang dengan alamat, jam buka, nomor kontak, dan foto toko akan mengumpulkan pencarian lokal jauh lebih baik daripada satu halaman berisi daftar alamat. Halaman cabang juga memudahkan promosi berbeda per wilayah tanpa mengganggu pelanggan cabang lain.</p>

<h2>Kata kunci yang layak dibidik tiap segmen</h2>
<ul>
<li>Kelontong: pesan sembako antar nama daerah, toko kelontong terdekat</li>
<li>Grosir: grosir nama produk nama kota, supplier nama barang</li>
<li>Fashion: nama produk nama kota, jahit seragam kantor, tabel ukuran</li>
<li>Elektronik: harga nama produk, servis nama perangkat nama kota</li>
<li>Bangunan: toko bangunan nama daerah, harga nama material, sewa alat</li>
<li>Apotek: apotek 24 jam nama daerah, antar obat nama kota</li>
<li>F&B retail: kue nama kota, hampers nama hari raya</li>
<li>Optik dan perhiasan: toko kacamata nama kota, harga emas harian</li>
<li>Toko online: nama produk + varian, plus kode pembelian ulang</li>
<li>Jaringan cabang: nama toko + nama cabang</li>
</ul>

<h2>Kesalahan yang paling sering kami temukan</h2>
<p>Pertama, iklan dijalankan tanpa menghitung margin, sehingga penjualan naik tapi laba tidak. Kedua, harga dan stok tidak disinkronkan antara toko fisik, marketplace, dan website. Ketiga, tidak ada satu pun cara menghubungi pelanggan lama, sehingga setiap bulan harus mencari pembeli dari nol. Keempat, foto produk diambil seadanya dengan latar yang ramai. Kelima, tidak ada halaman khusus untuk layanan seperti pemasangan, servis, atau antar barang, padahal pencariannya justru besar.</p>

<h2>Cara mengukur</h2>
<p>Untuk retail, empat angka yang layak dipantau tiap bulan: nilai transaksi per kanal, biaya per transaksi (termasuk iklan dan diskon), jumlah pembelian ulang dalam tiga bulan, dan nilai belanja rata-rata per pelanggan. Angka pembelian ulang sering paling menentukan, karena di retail keuntungan biasanya datang dari pelanggan yang kembali.</p>

<h2>Yang kami kerjakan</h2>
<p>Kami membangun katalog yang sinkron dengan toko fisik, memasang profil Google Business per cabang, menyiapkan alur pesan lewat WhatsApp, dan merancang pemasaran ulang ke pelanggan lama. Untuk pembanding lintas industri, lihat <a href="https://studiosoft.id/digital-marketing-bisnis-properti/">panduan digital marketing bisnis properti</a>, <a href="https://studiosoft.id/digital-marketing-bisnis-manufaktur/">panduan manufaktur</a>, dan <a href="https://studiosoft.id/digital-marketing-bisnis-keuangan/">panduan jasa keuangan</a>.</p>

<h2>Pertanyaan yang sering muncul</h2>
<h3>Sebaiknya fokus di marketplace atau website sendiri?</h3><p>Dua-duanya, dengan pembagian peran. Marketplace untuk volume dan penemuan produk, website sendiri untuk margin yang lebih baik, data pelanggan, dan pemasaran ulang. Yang perlu dijaga: hubungan dengan pelanggan tidak sepenuhnya dipegang marketplace.</p>
<h3>Apakah toko retail perlu blog?</h3><p>Perlu kalau isinya berguna untuk pembeli, misalnya cara memilih ukuran, panduan perawatan barang, atau perbandingan tipe produk. Berita umum tidak membantu penjualan retail.</p>
<h3>Berapa anggaran iklan yang wajar?</h3><p>Mulai dari hitungan sederhana: laba per transaksi dikalikan target transaksi, lalu sisihkan sebagian untuk biaya mendapatkan pembeli baru dengan menyisakan ruang untuk keuntungan. Angka pastinya berbeda per segmen, jadi hitung setelah dua sampai empat pekan data terkumpul.</p>
<h3>Bagaimana menaikkan pembelian ulang?</h3><p>Kirim pengingat yang relevan, bukan pengumuman umum. Misalnya pengingat waktu pembelian berikutnya untuk produk habis pakai, atau kabar diskon khusus untuk pelanggan yang pernah membeli kategori tertentu.</p>
<h3>Apakah perlu halaman per cabang?</h3><p>Perlu, kalau cabangnya lebih dari satu. Pencarian bersifat lokal, jadi satu halaman per cabang dengan informasi lengkap akan lebih sering muncul daripada satu halaman berisi daftar alamat.</p>""",
}

A2 = {
    "judul": "Digital Marketing untuk Bisnis Keuangan: Panduan Semua Segmen",
    "slug": "digital-marketing-bisnis-keuangan",
    "fokus": "digital marketing keuangan",
    "seo_title": "Digital Marketing Keuangan: Panduan Semua Segmen",
    "meta": ("Digital marketing jasa keuangan untuk semua segmen: BPR, koperasi, asuransi, multifinance, "
             "fintech, pembiayaan syariah, konsultan pajak, sampai perencana keuangan."),
    "kategori": [330, 26],
    "label": "KEUANGAN",
    "isi": """<p>Pemasaran di sektor keuangan bekerja dengan aturan main yang berbeda. Yang dijual bukan produk yang bisa dicoba, tapi janji di masa depan: dana yang tersedia saat dibutuhkan, perlindungan saat terjadi hal buruk, atau imbal hasil setelah bertahun-tahun. Karena itu kepercayaan dan kepatuhan menjadi penentu pertama, dan konten yang menjanjikan hasil cepat justru berisiko.</p>
<p>Halaman ini membahas sepuluh segmen jasa keuangan, dari bank dan koperasi sampai perencana keuangan, dengan kata kunci serta kanal yang paling masuk akal.</p>

<h2>Lima prinsip pemasaran jasa keuangan</h2>
<ul>
<li><strong>Kejelasan mengalahkan janji.</strong> Suku bunga, biaya, denda, syarat, dan risiko harus disebut apa adanya. Calon nasabah yang memahami biaya justru lebih tahan lama daripada yang tertarik karena angka yang terlalu bagus.</li>
<li><strong>Halaman per kebutuhan, bukan per nama produk.</strong> Orang mencari "kredit usaha kecil", bukan "produk kredit nomor sekian". Susun halaman dari kebutuhan pengguna, baru sebutkan nama produknya di dalam.</li>
<li><strong>Beri alat bantu hitung.</strong> Simulasi cicilan, perbandingan bunga, dan kalkulator kebutuhan dana membuat calon nasabah bertahan lebih lama di halaman dan datang dengan pertanyaan yang lebih serius.</li>
<li><strong>Tampilkan legalitas.</strong> Izin usaha dan nomor registrasi yang berlaku sebaiknya mudah ditemukan, karena itu hal pertama yang dicari orang yang pernah mendengar kabar penawaran palsu.</li>
<li><strong>Edukasi dulu, penawaran kemudian.</strong> Konten yang menjelaskan cara kerja bunga, risiko gagal bayar, atau cara mengenali penipuan memberi hasil jangka panjang lebih baik daripada promosi potongan biaya.</li>
</ul>

<h2>1. Bank dan BPR</h2>
<p>Pencarian datang dari dua arah: kebutuhan pribadi dan kebutuhan usaha. Kata kunci yang bekerja: kredit usaha rakyat nama kota, simulasi kredit rumah, tabungan berjangka nama bank, deposito bunga nama kota. Halaman simulasi biasanya menjadi halaman dengan konversi terbaik karena pengunjungnya sudah menghitung. Untuk BPR dan bank daerah, kata kunci lokal bekerja lebih kuat daripada kata kunci nasional yang dikuasai bank besar.</p>

<h2>2. Koperasi dan lembaga simpan pinjam</h2>
<p>Anggotanya komunitas, jadi kepercayaan dibangun lewat orang dan bukti nyata. Kata kunci: koperasi simpan pinjam nama kota, pinjaman koperasi karyawan, syarat jadi anggota koperasi. Yang perlu dijelaskan terbuka: syarat keanggotaan, simpanan wajib, jasa pinjaman, dan cara pengajuan. Konten berupa penjelasan proses biasanya lebih berguna daripada promosi bunga.</p>

<h2>3. Asuransi: agen dan broker</h2>
<p>Pembelinya membeli ketenangan, dan sering ragu karena pengalaman orang lain. Kata kunci: asuransi kesehatan keluarga, asuransi mobil all risk, agen asuransi nama kota, klaim asuransi ditolak. Konten yang menjelaskan cara kerja klaim, apa yang tidak dijamin, dan cara memilih perlindungan sesuai kebutuhan membangun kepercayaan lebih cepat daripada unggahan promosi. Untuk agen perorangan, nama baik pribadi adalah aset utama, jadi membangun profil yang bisa diperiksa sangat penting.</p>

<h2>4. Multifinance dan pembiayaan kendaraan</h2>
<p>Pencarian biasanya datang dari orang yang sedang membeli kendaraan dan ingin tahu angsuran. Kata kunci: simulasi angsuran motor, kredit mobil tanpa dp, syarat kredit mobil bekas. Halaman simulasi dan daftar syarat dokumen adalah dua halaman yang paling sering dicari. Transparansi biaya administrasi dan asuransi menjadi pembeda, karena itulah bagian yang paling sering dikeluhkan pembeli.</p>

<h2>5. Fintech pembayaran dan PPOB</h2>
<p>Pembelinya merchant dan pemilik usaha kecil yang butuh kemudahan transaksi. Kata kunci: mesin edc murah, qris untuk usaha, agen pembayaran online, biaya transaksi qris. Konten berupa perbandingan biaya dan penjelasan cara kerja pencairan dana sangat membantu keputusan. Untuk penjualan ke merchant, kanal lapangan masih penting, tapi website berfungsi sebagai rujukan resmi yang menenangkan.</p>

<h2>6. Pinjaman online dan pembiayaan berbasis teknologi</h2>
<p>Segmen yang paling sensitif. Kepatuhan bukan pilihan, dan materi pemasaran harus menghindari janji yang berlebihan. Kata kunci: pinjaman online terdaftar, syarat pinjaman usaha, cara mengecek pinjaman legal. Yang membedakan adalah kejelasan biaya total, tenor, dan cara penagihan. Edukasi tentang penipuan yang mengaku sebagai penyedia pinjaman juga sangat dibutuhkan, karena reputasi sektor ini sedang diuji.</p>

<h2>7. Pembiayaan syariah</h2>
<p>Pembelinya memilih karena prinsip, dan mereka biasanya memeriksa lebih teliti. Kata kunci: pembiayaan syariah tanpa riba, cicilan syariah rumah, koperasi syariah nama kota. Yang perlu dijelaskan adalah akad yang dipakai, perbedaan dengan bunga, dan perhitungan angsuran secara transparan. Istilah yang tepat dan konsisten memegang peran besar di segmen ini.</p>

<h2>8. Konsultan pajak dan akuntan</h2>
<p>Pembelinya perusahaan dan pekerja yang butuh kepastian. Kata kunci: konsultan pajak nama kota, jasa pembukuan usaha kecil, cara lapor spt tahunan, jasa audit laporan keuangan. Konten edukasi seperti tenggat laporan dan perubahan aturan memberi hasil terbaik, karena pencariannya rutin dan bisa diperkirakan waktunya.</p>

<h2>9. Perencanaan keuangan dan investasi</h2>
<p>Pencariannya berpusat pada keputusan hidup: dana pendidikan anak, persiapan pensiun, dana darurat. Kata kunci: cara mengatur keuangan keluarga, simulasi investasi jangka panjang, biaya hidup setelah pensiun. Konten harus menghindari janji keuntungan dan selalu menyebut risiko. Yang paling dipercaya biasanya konten edukasi dengan contoh perhitungan sederhana yang bisa diikuti pembaca.</p>

<h2>10. Sekuritas, reksa dana, dan manajer investasi</h2>
<p>Penggunanya membandingkan biaya dan rekam jejak. Kata kunci: cara membuka rekening efek, reksa dana indeks biaya rendah, perbandingan produk investasi. Karena aturan pemasaran di sektor ini ketat, materi yang menonjolkan transparansi biaya dan penjelasan risiko lebih aman dan tetap efektif. Halaman yang menjelaskan langkah pembukaan rekening dari awal sampai dana masuk menghilangkan hambatan terbesar calon investor baru.</p>

<h2>Kesalahan yang paling sering kami temukan</h2>
<p>Pertama, halaman produk berisi istilah internal yang tidak dipahami calon nasabah. Kedua, tidak ada informasi biaya dan risiko, sehingga pengunjung meninggalkan halaman untuk mencari jawabannya di tempat lain. Ketiga, tidak ada jalur lanjutan yang jelas setelah orang membaca, karena tidak semua orang siap mengisi formulir panjang; tombol WhatsApp atau jadwal konsultasi biasanya lebih efektif. Keempat, materi pemasaran menjanjikan hasil di luar ketentuan, yang berisiko dari sisi kepatuhan sekaligus merusak kepercayaan. Kelima, kanal digital dijalankan tanpa pelacakan, sehingga lembaga tidak tahu pengajuan datang dari mana.</p>

<h2>Cara mengukur</h2>
<p>Empat angka yang layak dipantau: jumlah pengajuan atau pengisian formulir yang valid, biaya per pengajuan, tingkat kelulusan pengajuan, dan konversi dari pengajuan menjadi akad. Angka terakhir sering terlupakan padahal paling menentukan, karena pengajuan yang banyak tapi tidak layak justru membebani tim verifikasi.</p>

<h2>Yang kami kerjakan</h2>
<p>Kami menyusun halaman per kebutuhan, membuat simulasi yang bisa dipakai calon nasabah, merapikan konten edukasi, dan memasang pelacakan sampai ke pengajuan. Kami juga menyiapkan materi yang aman dari sisi klaim. Pembandingnya ada di <a href="https://studiosoft.id/digital-marketing-bisnis-retail/">panduan retail</a>, <a href="https://studiosoft.id/digital-marketing-bisnis-properti/">panduan properti</a>, dan <a href="https://studiosoft.id/digital-marketing-bisnis-manufaktur/">panduan manufaktur</a>.</p>

<h2>Pertanyaan yang sering muncul</h2>
<h3>Apakah lembaga keuangan boleh beriklan di media sosial?</h3><p>Boleh, dengan catatan materi harus sesuai ketentuan yang berlaku, tidak menjanjikan hasil di luar ketentuan, dan tidak menyembunyikan biaya atau risiko. Karena aturannya berbeda per jenis produk, materi promosi sebaiknya diperiksa bagian kepatuhan sebelum tayang.</p>
<h3>Konten seperti apa yang paling efektif?</h3><p>Konten yang menjawab keraguan: berapa biaya totalnya, apa yang terjadi kalau gagal bayar, bagaimana cara klaim, dan bagaimana membedakan penawaran resmi dari penipuan. Konten seperti ini memberi hasil lebih tahan lama daripada promosi potongan biaya.</p>
<h3>Bagaimana menjangkau pelaku usaha kecil?</h3><p>Lewat pencarian yang menyebut jenis usaha dan kota, ditambah kanal pesan seperti WhatsApp. Untuk pembiayaan yang lebih besar, LinkedIn berguna karena keputusannya melibatkan pemilik atau pengelola keuangan perusahaan.</p>
<h3>Apakah perlu website sendiri kalau sudah punya aplikasi?</h3><p>Perlu. Aplikasi bekerja untuk pengguna yang sudah mendaftar, sementara website bekerja untuk orang yang baru mencari tahu. Dua kanal ini menjangkau tahap yang berbeda.</p>
<h3>Bagaimana membangun kepercayaan di sektor yang banyak penipuan?</h3><p>Tampilkan legalitas dan kanal resmi sedetail mungkin, konsisten dengan informasi di situs regulator, dan edukasi calon nasabah tentang ciri penawaran palsu. Kejujuran soal risiko adalah materi pemasaran yang paling kuat di sektor ini.</p>""",
}

ARTIKEL = [A1, A2]


def api(path, method="GET", data=None):
    h = {"Authorization": f"Basic {AUTH}", "User-Agent": "Mozilla/5.0"}
    body = json.dumps(data).encode() if data is not None else None
    if data is not None:
        h["Content-Type"] = "application/json"
    r = urllib.request.Request(S + path, data=body, headers=h, method=method)
    for _ in range(3):
        try:
            with urllib.request.urlopen(r, timeout=180) as x:
                return x.status, json.loads(x.read())
        except urllib.error.HTTPError as e:
            return e.code, e.read().decode()[:300]
        except Exception:
            time.sleep(5)
    return 0, "gagal"


def jumlah_kata(h):
    return len([w for w in re.split(r"\s+", html.unescape(re.sub(r"<[^>]+>", " ", h))) if w])


for a in ARTIKEL:
    a["kata"] = jumlah_kata(a["isi"])
    print(f"  {a['slug']:<40} {a['kata']} kata")

if "--apply" not in sys.argv:
    print("\n(dry run — pakai --apply untuk tayang)")
    sys.exit(0)

now = datetime.now(WIB).replace(microsecond=0)
for i, a in enumerate(ARTIKEL):
    tayang = now + timedelta(minutes=2 * i)
    faq = [(html.unescape(re.sub(r"<[^>]+>", "", m.group(1))),
            html.unescape(re.sub(r"<[^>]+>", "", m.group(2))))
           for m in re.finditer(r"<h3>(.*?)</h3><p>(.*?)</p>", a["isi"], re.S)]
    isi = a["isi"] + "\n" + schema(faq) + "\n" + CTA
    payload = {"title": a["judul"], "slug": a["slug"], "content": isi, "status": "publish",
               "date": tayang.strftime("%Y-%m-%dT%H:%M:%S"), "categories": a["kategori"],
               "meta": {"_yoast_wpseo_focuskw": a["fokus"], "_yoast_wpseo_title": a["seo_title"],
                        "_yoast_wpseo_metadesc": a["meta"]}}
    st, p = api("/wp-json/wp/v2/posts", "POST", payload)
    if st not in (200, 201):
        print("   GAGAL:", st, str(p)[:250]); continue
    pid = p["id"]
    st, cek = api(f"/wp-json/wp/v2/posts/{pid}?context=edit&_fields=status,date,slug,link,meta,content")
    raw = cek.get("content", {}).get("raw", "")
    print(f"   #{pid} {cek.get('status')} {cek.get('date')} {cek.get('link')} | meta="
          f"{[k for k in ('_yoast_wpseo_focuskw','_yoast_wpseo_metadesc') if cek.get('meta',{}).get(k)]} "
          f"| FAQ={'ya' if 'FAQPage' in raw else 'TIDAK'} | CTA={'ya' if 'ss-cta-wa' in raw else 'TIDAK'} "
          f"| kata={jumlah_kata(raw)}")
