//AdSenseにリンク

PythonでWordPressに投稿する①コード(記事、画像配置、カテゴリー、タグ)

 request ライブラリインストール

request ライブラリを使って、Pythonによる記事の投稿や更新ができます。

コマンドを入力して実行します。

pip install requests

ワードプレスでパスワード設定する

管理画面>ユーザー>「アプリケーションパスワード」の設定

※再表示されないと思われるので、忘れないようにメモしておきましょう。

投稿するためのPython基本コード

WordPressで設定したパスワードと投稿者名を使う

コードは以下のとおりです。(この場合は登録されている画像使用になります)

import requests
from requests.auth import HTTPBasicAuth

# WordPressのREST APIのエンドポイント
endpoint = 'あなたのTOPページURL/wp-json/wp/v2/posts'

# 認証情報
username = 'ワードプレスの投稿名'
password = 'ワードプレスで自動作成されたパスワード'

# 下書きとして投稿するデータ
data = {
    'title': '入れたいタイトル',
    'content': '記事の中身',
    'status': 'draft'  # draft=下書き、publish=公開 省略時はdraftになる
    'categories': 'ワードプレスで自動作成されたカテゴリーのID',
    'tags': 'ワードプレスで自動作成されたタグのID',
    'featured_media': 'ワードプレスで自動作成された画像のID'
    
}

# POSTリクエストで下書き投稿
response = requests.post(endpoint, json=data, auth=HTTPBasicAuth(username, password))

# リクエストが成功したか確認
if response.status_code == 201:  # 201 Createdが返されることを期待
    post = response.json()
    print('下書きが作成されました。ID:', post['id'])
else:
    print(f"リクエストが失敗しました。ステータスコード: {response.status_code}")
    print(response.text)

追記:投稿内容の見出しやなどの設定する書き方

下記のように書いていきます

    # 投稿データ
    data = {
        'title': 'タイトル部分',
        'content': '<h1>大見出し H1</h1><p>コンテンツの段落。</p><h2>小見出し H2</h2><p>さらに別のコンテンツの段落。</p><h3>小見出し H3</h3>',
        'status': 'draft',
        'categories': 5,
        'tags': 6,
        'featured_media': media_id  # ここでサムネイル画像を設定
    }

追記:画像の新規アップロードとサムネイル設定

画像を新規アップロードとサムネイルに設定したい場合は下記のコードを使います

import os
import requests
from requests.auth import HTTPBasicAuth

# 認証情報
username = 'ワードプレスの投稿名'
password = 'ワードプレスで自動作成されたパスワード'

# WordPressのREST APIのエンドポイント
posts_endpoint = 'https://あなたのTOPページURL/wp-json/wp/v2/posts'
media_endpoint = 'https://あなたのTOPページURL/wp-json/wp/v2/media'

# アップロードする画像のファイルパス
image_path = './画像の名前.jpg'  # 実際の画像ファイルのパスに置き換えてください

# 画像ファイルのアップロード
with open(image_path, 'rb') as img:
    file_name = os.path.basename(image_path)
    headers = {
        'Content-Disposition': f'attachment; filename={file_name}'
    }
    img_response = requests.post(media_endpoint, headers=headers, files={'file': img}, auth=HTTPBasicAuth(username, password))

# アップロードが成功したか確認
if img_response.status_code == 201:
    media_id = img_response.json()['id']
    print('画像がアップロードされました。Media ID:', media_id)

    # 投稿データ
    data = {
        'title': 'testタイトル部分',
        'content': '<h1>大見出し H1</h1><p>コンテンツの段落。</p><h2>小見出し H2</h2><p>さらに別のコンテンツの段落。</p><h3>小見出し H3</h3>',
        'status': 'draft',
        'categories': 5,
        'tags': 6,
        'featured_media': media_id  # ここでサムネイル画像を設定
    }

    # POSTリクエストで下書き投稿
    response = requests.post(posts_endpoint, json=data, auth=HTTPBasicAuth(username, password))

    # リクエストが成功したか確認
    if response.status_code == 201:  # 201 Createdが返されることを期待
        post = response.json()
        print('下書きが作成されました。ID:', post['id'])
    else:
        print(f"リクエストが失敗しました。ステータスコード: {response.status_code}")
        print(response.text)
else:
    print(f"画像のアップロードが失敗しました。ステータスコード: {img_response.status_code}")
    print(img_response.text)

追記:コンテンツ内に画像をいれるには

H2の後に別の画像を新規アップロードして追加する部分を追記しました。

コンテンツ内に追加する画像のパスを追記

# アップロードする画像のファイルパス
image_path1 = './実際のサムネイル画像.jpg'
image_path2 = './実際にコンテンツ内に追加する画像.jpg' 

コンテンツ内に画像をいれるために追記する項目

# サムネイル画像のアップロード
media_id1, _ = upload_image(image_path1)

# コンテンツ内に挿入する画像のアップロード
_, media_url2 = upload_image(image_path2)

if media_id1 and media_url2:
    # 投稿データ
    data = {
        'title': 'testタイトル部分',
        'content': f'<h1>大見出し H1</h1><p>コンテンツの段落。</p><h2>小見出し H2</h2><p>さらに別のコンテンツの段落。</p><img src="{media_url2}" alt="Image" /><h3>小見出し H3</h3>',
        'status': 'draft',
        'categories': 5,
        'tags': 6,
        'featured_media': media_id1  # サムネイル画像を設定
    }

追加・修正点

  1. upload_image関数:
    • 画像をアップロードしてmedia_idsource_urlを取得する関数を作成しました。
  2. 画像のアップロード:
    • image_path1の画像をサムネイルとして、image_path2の画像をコンテンツ内に挿入するために、それぞれアップロードしています。
  3. contentに画像を挿入:
    • h2タグの後に、アップロードしたimage_path2の画像をimgタグとして追加しています。

これにより、記事のサムネイルに1つ目の画像が設定され、2つ目の画像が記事のh2タグの後に挿入されます。

進化系はこちら▼