Python 通过 Wordpress REST API 从开发页面删除所有帖子和媒体(图像)

问题描述 投票:0回答:1

我觉得这应该是其他几个人已经完成的事情......编写一个脚本,使用 Wordpress Rest API 从开发网页中删除所有示例数据。 现在,我尝试自动发布图像和帖子,这很有效,并导致数百个帖子和图像炸毁了我的数据库。 正在寻找执行此操作的脚本,ChatGPT 和 Google 搜索引擎都没有提供任何好的答案。

有什么想法可以在哪里寻找这样的脚本或者如何自己编写它吗?

python python-requests wordpress-rest-api
1个回答
0
投票

我希望这可以帮助其他人!

最小工作示例(MWE)

1.配置一切以连接到 WordPress 后端

import requests
import base64

def generate_auth_header():
    """Generate the authentication header for the Wordpress API."""
    try:
        user = "admin" # Set your username here
        password = "iTef fMhJ Rcij Azj3 Uban TeST" # Set your Appllication password here

        credentials = user + ":" + password

        token = base64.b64encode(credentials.encode())

        header = {"Authorization": "Basic " + token.decode("utf-8")}

        return header

    except IOError as e:
         raise IOError(f"Error connecting to Wordpress backend: {e}") from e

# Create header and wordpress URL
wordpress_url = "localhost:10014" # Set your domain here
header = generate_auth_header()

注意:如果您尚未设置应用程序密码,请阅读

2.通过迭代获取所有帖子以删除每个帖子

# Function to get all posts
def get_all_posts():
    posts_url = f'{wordpress_url}posts?per_page=100'
    response = requests.get(posts_url, headers=header, timeout=5)
    return response.json()

# Function to delete a post by ID
def delete_post(post_id):
    delete_url = f'{wordpress_url}posts/{post_id}'
    response = requests.delete(delete_url, headers=header, timeout=5)
    return response.status_code

# Get first 100 posts
posts = get_all_posts()
print(f"posts: {posts}")

# Delete all posts iterating over 100 posts at a time
while posts != []:
    for post in posts:
        post_id = post['id']
        delete_status = delete_post(post_id)
        if delete_status in [200, 201]:
            print(f"Post {post_id} deleted successfully.")
        else:
            print(f"Failed to delete post {post_id}, status code: {delete_status}")

    posts = get_all_posts()

注意: GET-posts URL 中的查询字符串

?per_page=100
使事情变得更容易,而不是一次迭代默认的 10 个帖子。

3.获取所有图像通过迭代删除每个图像

# Function to get all images
def get_all_media():
    media_url = f'{wordpress_url}media?per_page=100'
    response = requests.get(media_url, headers=header, timeout=5)
    return response.json()

# Function to delete each image by ID
def delete_media(media_id):
    delete_url = f'{wordpress_url}media/{media_id}?force=1'
    response = requests.delete(delete_url, headers=header, timeout=5)
    return response.status_code

# Get and delete all media (images)
media = get_all_media()
print(f"media: {media}")

# Delete all media (images) iterating over 100 images at a time
while media != []:
    for media_item in media:
        media_id = media_item['id']
        delete_status = delete_media(media_id)
        if delete_status in [200, 201]:
            print(f"Media {media_id} deleted successfully.")
        else:
            print(f"Failed to delete media {media_id}, status code: {delete_status}")

    media = get_all_media()

注意:没有查询字符串

?force=1
删除图像对我来说不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.