[WordPress Automation] Tự động hóa WordPress

Chúng ta đã triển khai WordPress theo phương án tự Hosting (tôi đang sử dụng máy chủ cá nhân để hosting cho website này). Và để tiết kiệm thời gian cũng như tận dụng được sức mạnh của các AI MODEL như LLAMA, QWEEN, OPENAI, GEMINI, … tôi quyết định xây dựng một chương trình nhằm tự động hóa các công việc mà tôi phải thực hiện thường xuyên WordPress cho website này, cụ thể:

  1. Tự động post bài
  2. Tự động chỉnh sửa bài viết
  3. Tự động đăng sản phẩm
  4. Tự động quản lý sản phẩm
  5. ….

Github: https://github.com/taipm/wordpress_automation.git

from typing import List
import requests
from requests.auth import HTTPBasicAuth

# Cấu hình WordPress
WORDPRESS_URL = "https://microai.club/x"xxx
WORDPRESS_USER = "xxx"
WORDPRESS_APP_PASSWORD = "xxx"

# Danh sách chủ đề demo
blog_topics = [
    "Xu hướng công nghệ 2024"
]

title = "Test Title"
content = "Test Content"
topic = "Công nghệ"
target_audience = 'chuyên_nghiệp'
keywords = ['công nghệ', 'kinh doanh', 'phát triển']
publish = False  # Chỉ tạo bản nháp


def get_category_id(category_name: str) -> int:
    """
    Lấy ID của danh mục từ tên danh mục.
    :param category_name: Tên danh mục
    :return: ID của danh mục hoặc tạo mới nếu chưa tồn tại
    """
    endpoint = f"{WORDPRESS_URL}/categories"
    try:
        response = requests.get(endpoint, auth=HTTPBasicAuth(WORDPRESS_USER, WORDPRESS_APP_PASSWORD))
        response.raise_for_status()
        categories = response.json()
        
        # Tìm danh mục theo tên
        for category in categories:
            if category['name'].lower() == category_name.lower():
                return category['id']
        
        # Nếu không tìm thấy, tạo mới danh mục
        new_category = {"name": category_name}
        response = requests.post(endpoint, json=new_category, auth=HTTPBasicAuth(WORDPRESS_USER, WORDPRESS_APP_PASSWORD))
        response.raise_for_status()
        return response.json()['id']
    except requests.exceptions.RequestException as e:
        print(f"Lỗi lấy ID danh mục: {e}")
        return None


def get_tag_ids(tag_names: List[str]) -> List[int]:
    """
    Lấy ID của các thẻ từ danh sách tên thẻ.
    :param tag_names: Danh sách tên thẻ
    :return: Danh sách ID của các thẻ
    """
    endpoint = f"{WORDPRESS_URL}/tags"
    tag_ids = []
    try:
        response = requests.get(endpoint, auth=HTTPBasicAuth(WORDPRESS_USER, WORDPRESS_APP_PASSWORD))
        response.raise_for_status()
        existing_tags = response.json()

        for tag_name in tag_names:
            # Tìm thẻ theo tên
            tag_id = next((tag['id'] for tag in existing_tags if tag['name'].lower() == tag_name.lower()), None)
            if not tag_id:
                # Nếu không tìm thấy, tạo mới thẻ
                new_tag = {"name": tag_name}
                response = requests.post(endpoint, json=new_tag, auth=HTTPBasicAuth(WORDPRESS_USER, WORDPRESS_APP_PASSWORD))
                response.raise_for_status()
                tag_id = response.json()['id']
            tag_ids.append(tag_id)
    except requests.exceptions.RequestException as e:
        print(f"Lỗi lấy ID thẻ: {e}")
    return tag_ids


def wordpress_publish_post(title: str, content: str, 
                           categories: List[str] = [], 
                           tags: List[str] = [], 
                           status: str = 'draft'):
    """
    Xuất bản bài viết lên WordPress.
    :param title: Tiêu đề bài viết
    :param content: Nội dung bài viết
    :param categories: Danh mục
    :param tags: Thẻ
    :param status: Trạng thái bài viết
    :return: Thông tin bài viết đã xuất bản
    """
    endpoint = f"{WORDPRESS_URL}/posts"

    # Lấy ID danh mục
    category_ids = [get_category_id(cat) for cat in categories if cat]
    # Lấy ID thẻ
    tag_ids = get_tag_ids(tags)

    post_data = {
        'title': title,
        'content': content,
        'status': status,
        'categories': category_ids,
        'tags': tag_ids
    }

    try:
        response = requests.post(
            endpoint,
            json=post_data,
            auth=HTTPBasicAuth(WORDPRESS_USER, WORDPRESS_APP_PASSWORD),
            headers={'Content-Type': 'application/json'}
        )
        response.raise_for_status()
        return response.json()
    except requests.exceptions.RequestException as e:
        print(f"Lỗi xuất bản: {e}")
        return None


# Xuất bản bài viết
post = wordpress_publish_post(title, content, [topic], keywords, 'draft' if not publish else 'publish')
print(post)

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *