Anda ingin membuat skrip Python untuk memposting ke beberapa situs WordPress pribadi dengan judul dan konten yang sama. Ini cukup memungkinkan dengan menggunakan pustaka python-wordpress-xmlrpc.

Berikut adalah contoh skrip yang bisa Anda modifikasi. Skrip ini akan memungkinkan Anda untuk:

  1. Mendefinisikan beberapa detail situs WordPress (URL, username, password).
  2. Menentukan judul dan konten postingan.
  3. Memposting konten tersebut ke setiap situs WordPress yang terdaftar.

Instalasi Pustaka

Pertama, Anda perlu menginstal pustaka python-wordpress-xmlrpc. Buka terminal atau command prompt Anda dan jalankan perintah berikut:

Bash

pip install python-wordpress-xmlrpc

Contoh Skrip Python

Python

from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods.posts import NewPost
from wordpress_xmlrpc.methods.media import UploadFile
import os

# --- Konfigurasi Situs WordPress Anda ---
# Ganti dengan detail situs WordPress pribadi Anda
# Anda bisa menambahkan lebih banyak kamus (dictionary) di sini untuk situs lain
wordpress_sites = [
    {
        'url': 'http://your-first-wordpress-site.com/xmlrpc.php', # Ganti dengan URL XML-RPC situs pertama Anda
        'username': 'your_first_username', # Ganti dengan username situs pertama Anda
        'password': 'your_first_password'  # Ganti dengan password situs pertama Anda
    },
    {
        'url': 'http://your-second-wordpress-site.com/xmlrpc.php', # Ganti dengan URL XML-RPC situs kedua Anda
        'username': 'your_second_username', # Ganti dengan username situs kedua Anda
        'password': 'your_second_password' # Ganti dengan password situs kedua Anda
    }
    # Tambahkan situs lain di sini jika Anda punya lebih dari dua
]

# --- Detail Postingan ---
post_title = "Judul Postingan Hebat Anda"
post_content = """
<p>Ini adalah <strong>konten postingan</strong> yang akan diunggah ke semua situs WordPress Anda.</p>
<p>Anda bisa menambahkan lebih banyak paragraf, gambar, atau elemen HTML lainnya di sini.</p>
<ul>
    <li>Poin 1</li>
    <li>Poin 2</li>
</ul>
<p>Salam!</p>
"""

# Opsional: Path ke gambar yang ingin diunggah sebagai featured image atau dalam konten
# featured_image_path = "path/to/your/image.jpg" # Uncomment dan ganti jika ingin mengunggah gambar

def post_to_wordpress(site_config, title, content):
    """
    Fungsi untuk memposting konten ke satu situs WordPress.
    """
    try:
        print(f"Mencoba terhubung ke: {site_config['url']}")
        client = Client(site_config['url'], site_config['username'], site_config['password'])
        print(f"Berhasil terhubung ke: {site_config['url']}")

        post = WordPressPost()
        post.title = title
        post.content = content
        post.post_status = 'publish'  # 'publish' untuk langsung dipublikasikan, 'draft' untuk draft

        # Jika Anda ingin menambahkan kategori atau tag, tambahkan di sini
        # post.terms_names = {
        #     'category': ['Uncategorized', 'Python'],
        #     'post_tag': ['otomatisasi', 'skrip']
        # }

        # --- Mengunggah Gambar (Opsional) ---
        # Jika Anda ingin mengunggah gambar dan mengaturnya sebagai featured image
        # if 'featured_image_path' in globals() and os.path.exists(featured_image_path):
        #     print(f"Mengunggah gambar: {featured_image_path}")
        #     data = {
        #         'name': os.path.basename(featured_image_path),
        #         'type': 'image/jpeg'  # Sesuaikan dengan tipe MIME gambar Anda
        #     }
        #     with open(featured_image_path, 'rb') as f:
        #         data['bits'] = f.read()
        #     response = client.call(UploadFile(data))
        #     post.thumbnail = response['attachment_id']
        #     print(f"Gambar berhasil diunggah dengan ID: {response['attachment_id']}")


        print(f"Membuat postingan '{title}' di {site_config['url']}...")
        post_id = client.call(NewPost(post))
        print(f"Postingan berhasil dibuat! ID Postingan: {post_id} di {site_config['url']}")

    except Exception as e:
        print(f"Gagal memposting ke {site_config['url']}: {e}")

# --- Jalankan Skrip ---
if __name__ == "__main__":
    for site in wordpress_sites:
        post_to_wordpress(site, post_title, post_content)


Penjelasan Skrip:

  1. wordpress_sites: Ini adalah daftar (list) dari kamus (dictionary). Setiap kamus berisi detail koneksi untuk satu situs WordPress:
    • url: Ini adalah URL XML-RPC situs WordPress Anda. Biasanya, formatnya adalah http://namadomainanda.com/xmlrpc.php atau https://namadomainanda.com/xmlrpc.php. Pastikan XML-RPC diaktifkan di situs WordPress Anda (ini biasanya aktif secara default).
    • username: Nama pengguna akun WordPress yang memiliki izin untuk memposting.
    • password: Kata sandi untuk akun tersebut.
  2. post_title: Variabel string yang berisi judul postingan yang akan Anda gunakan untuk semua situs.
  3. post_content: Variabel string yang berisi konten postingan Anda. Anda bisa menggunakan HTML di sini untuk memformat konten (misalnya, <strong>, <p>, <ul>, dll.).
  4. post_to_wordpress(site_config, title, content): Fungsi ini bertanggung jawab untuk terhubung ke satu situs WordPress dan memposting konten.
    • Ini membuat objek Client dengan detail situs.
    • Kemudian membuat objek WordPressPost dan mengisi title serta content.
    • post.post_status = 'publish' akan langsung mempublikasikan postingan. Anda bisa mengubahnya menjadi 'draft' jika Anda ingin menyimpannya sebagai draf terlebih dahulu.
    • Mengunggah Gambar (Opsional): Bagian yang dikomentari di dalam fungsi menunjukkan bagaimana Anda bisa mengunggah gambar dan mengaturnya sebagai gambar unggulan (featured image). Anda perlu meng-uncomment dan menyesuaikannya jika Anda ingin menggunakan fitur ini.
    • client.call(NewPost(post)) adalah perintah yang sebenarnya mengirim postingan ke WordPress.
  5. if __name__ == "__main__":: Blok ini memastikan bahwa kode di dalamnya hanya dijalankan ketika skrip dijalankan secara langsung. Ini mengulang melalui setiap situs yang Anda definisikan di wordpress_sites dan memanggil fungsi post_to_wordpress untuk masing-masing situs.

Sebelum Menjalankan Skrip:

  1. Aktifkan XML-RPC: Pastikan fitur XML-RPC diaktifkan di semua situs WordPress Anda. Ini biasanya aktif secara default, tetapi beberapa plugin keamanan atau konfigurasi server mungkin menonaktifkannya.
  2. Ganti Placeholder: Sangat penting untuk mengganti placeholder seperti http://your-first-wordpress-site.com/xmlrpc.php, your_first_username, your_first_password, dll., dengan detail situs Anda yang sebenarnya.
  3. Keamanan: Berhati-hatilah saat menyimpan kredensial (username dan password) langsung di dalam skrip. Untuk penggunaan produksi atau jika Anda membagikan skrip, pertimbangkan untuk menggunakan variabel lingkungan atau sistem manajemen rahasia yang lebih aman.
  4. Uji Coba: Disarankan untuk menguji skrip ini terlebih dahulu pada satu situs WordPress uji coba sebelum menerapkannya ke semua situs pribadi Anda.

Dengan skrip ini, Anda dapat dengan mudah mengotomatiskan proses posting konten yang sama ke beberapa situs WordPress Anda secara bersamaan. Jika Anda memiliki pertanyaan lebih lanjut atau ingin menambahkan fungsionalitas lain (misalnya, kategori, tag, atau gambar), jangan ragu untuk bertanya!

Load Kontent dan SItes dari File

Tentu, itu ide yang sangat bagus untuk membuat skrip lebih fleksibel! Saya akan memodifikasi skrip wordpress-auto-poster Anda agar dapat membaca daftar situs dari sites.txt dan konten postingan (judul dan isi) dari content.txt.

Langkah 1: Perbarui Skrip Python

Berikut adalah versi terbaru dari skrip Anda:

from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods.posts import NewPost
from wordpress_xmlrpc.methods.media import UploadFile # Diperlukan jika Anda ingin mengunggah gambar
import os

# --- Nama File Konfigurasi ---
SITES_FILE = "sites.txt"
CONTENT_FILE = "content.txt"

# Opsional: Path ke gambar yang ingin diunggah sebagai featured image atau dalam konten.
# Pastikan path ini benar dan gambar ada di direktori yang sama dengan skrip, atau berikan path absolut.
# featured_image_path = "path/to/your/image.jpg" # Uncomment dan ganti jika ingin mengunggah gambar

def load_wordpress_sites(file_path):
    """
    Memuat konfigurasi situs WordPress dari file teks.
    Setiap baris diharapkan dalam format: URL_XMLRPC,USERNAME,PASSWORD
    """
    sites = []
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            for line in f:
                line = line.strip()
                if not line or line.startswith('#'): # Abaikan baris kosong atau komentar
                    continue
                parts = line.split(',')
                if len(parts) == 3:
                    sites.append({
                        'url': parts[0].strip(),
                        'username': parts[1].strip(),
                        'password': parts[2].strip()
                    })
                else:
                    print(f"Peringatan: Baris tidak valid di {file_path}: '{line}'. Abaikan.")
    except FileNotFoundError:
        print(f"Error: File '{file_path}' tidak ditemukan. Pastikan file ada di direktori yang sama.")
    except Exception as e:
        print(f"Error saat membaca file {file_path}: {e}")
    return sites

def load_post_content(file_path):
    """
    Memuat judul dan konten postingan dari file teks.
    Baris pertama adalah judul, sisa baris adalah konten.
    """
    title = ""
    content = ""
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            lines = f.readlines()
            if lines:
                title = lines[0].strip() # Baris pertama adalah judul
                content = "".join(lines[1:]).strip() # Sisa baris adalah konten
            else:
                print(f"Peringatan: File '{file_path}' kosong.")
    except FileNotFoundError:
        print(f"Error: File '{file_path}' tidak ditemukan. Pastikan file ada di direktori yang sama.")
    except Exception as e:
        print(f"Error saat membaca file {file_path}: {e}")
    return title, content

def post_to_wordpress(site_config, title, content):
    """
    Fungsi untuk memposting konten ke satu situs WordPress.
    """
    if not site_config or not title or not content:
        print("Error: Konfigurasi situs, judul, atau konten tidak lengkap. Melewatkan postingan.")
        return

    try:
        print(f"\nMencoba terhubung ke: {site_config['url']}")
        client = Client(site_config['url'], site_config['username'], site_config['password'])
        print(f"Berhasil terhubung ke: {site_config['url']}")

        post = WordPressPost()
        post.title = title
        post.content = content
        post.post_status = 'publish'  # 'publish' untuk langsung dipublikasikan, 'draft' untuk disimpan sebagai draf

        # Opsional: Menambahkan kategori atau tag
        # post.terms_names = {
        #     'category': ['Uncategorized', 'Otomatisasi'],
        #     'post_tag': ['python', 'wordpress', 'otomatis']
        # }

        # --- Bagian Mengunggah Gambar (Opsional) ---
        # Jika Anda ingin mengunggah gambar dan mengaturnya sebagai featured image
        # Pastikan 'featured_image_path' didefinisikan di luar fungsi ini
        # if 'featured_image_path' in globals() and os.path.exists(featured_image_path):
        #     print(f"Mengunggah gambar: {featured_image_path}...")
        #     with open(featured_image_path, 'rb') as img:
        #         data = {
        #             'name': os.path.basename(featured_image_path),
        #             'type': 'image/jpeg',  # Sesuaikan dengan tipe MIME gambar Anda (e.g., 'image/png')
        #             'bits': img.read()
        #         }
        #     response = client.call(UploadFile(data))
        #     post.thumbnail = response['attachment_id']
        #     print(f"Gambar berhasil diunggah. ID Attachment: {response['attachment_id']}")

        print(f"Membuat postingan '{title}' di {site_config['url']}...")
        post_id = client.call(NewPost(post))
        print(f"Postingan berhasil dibuat! ID Postingan: {post_id} di {site_config['url']}")

    except Exception as e:
        print(f"Gagal memposting ke {site_config['url']}: {e}")

# --- Jalankan Skrip ---
if __name__ == "__main__":
    print(f"Memuat daftar situs dari '{SITES_FILE}'...")
    wordpress_sites = load_wordpress_sites(SITES_FILE)

    print(f"Memuat konten postingan dari '{CONTENT_FILE}'...")
    post_title, post_content = load_post_content(CONTENT_FILE)

    if not wordpress_sites:
        print("Tidak ada situs yang ditemukan untuk diposting. Pastikan 'sites.txt' diformat dengan benar.")
    elif not post_title or not post_content:
        print("Judul atau konten postingan kosong. Pastikan 'content.txt' diformat dengan benar.")
    else:
        print("\nMemulai proses posting ke beberapa situs WordPress...")
        for site in wordpress_sites:
            post_to_wordpress(site, post_title, post_content)
        print("\nProses posting selesai.")

Langkah 2: Buat File sites.txt

Buat file baru bernama sites.txt di direktori yang sama dengan skrip Python Anda. Isi file ini dengan daftar situs WordPress Anda, satu situs per baris, dengan format:

URL_XMLRPC,USERNAME,PASSWORD

Contoh sites.txt:

http://situs-wordpress-pertama-anda.com/xmlrpc.php,username_situs_pertama,password_situs_pertama
https://situs-wordpress-kedua-anda.com/xmlrpc.php,username_situs_kedua,password_situs_kedua
http://situs-wordpress-ketiga-anda.com/xmlrpc.php,username_situs_ketiga,password_situs_ketiga

Anda bisa menambahkan komentar dengan tanda '#' di awal baris

Penting: Pastikan tidak ada spasi ekstra di sekitar koma atau di akhir baris, kecuali jika itu memang bagian dari URL, username, atau password Anda.

Langkah 3: Buat File content.txt

Buat file baru bernama content.txt di direktori yang sama dengan skrip Python Anda.

Baris pertama dari file ini akan menjadi judul postingan.

Semua baris setelah baris pertama akan menjadi isi konten postingan.

Contoh content.txt:

Ini Judul Postingan Saya dari File!
<p>Halo semuanya!</p>
<p>Ini adalah <strong>konten postingan otomatis</strong> yang diambil dari file <code>content.txt</code>.</p>
<p>Anda bisa menulis konten sepanjang yang Anda inginkan di sini, termasuk <b>tag HTML</b>.</p>
<ul>
    <li>Poin pertama</li>
    <li>Poin kedua</li>
    <li>Poin ketiga</li>
</ul>
<p>Terima kasih sudah membaca!</p>

Bagaimana Cara Kerjanya?

load_wordpress_sites(file_path): Fungsi ini membaca sites.txt, memisahkan setiap baris berdasarkan koma, dan mengumpulkannya menjadi daftar kamus (dictionary) yang berisi URL, username, dan password.

load_post_content(file_path): Fungsi ini membaca content.txt. Baris pertama disimpan sebagai judul, dan sisa baris digabungkan menjadi string konten.

Main Block (if __name__ == "__main__":):

    Pertama, ia memanggil load_wordpress_sites() untuk mendapatkan daftar situs.

    Kemudian, ia memanggil load_post_content() untuk mendapatkan judul dan isi postingan.

    Terakhir, ia mengulang melalui setiap situs yang dimuat dan memanggil fungsi post_to_wordpress() untuk memposting konten yang sama ke masing-masing situs.

Dengan perubahan ini, Anda tidak perlu lagi mengedit skrip Python setiap kali Anda ingin mengubah daftar situs atau konten postingan! Anda hanya perlu memperbarui file sites.txt dan content.txt.