//AdSenseにリンク

PythonでWordPress投稿②コンテンツ別ファイル管理仕様

コンテンツ内容を別ファイルにし、管理


画像のアップロードは、Pythonに書く必要があるが、それ以外はテキストファイルに記入でできる。

アップロードする画像データが大きすぎるとエラーや、時間がかかる。

こちらからの進化系▼

このスクリプトは、WordPressの記事を自動で投稿し、記事内に画像を挿入する機能に加え、記事のサムネイル画像(アイキャッチ画像)を設定し、タグやカテゴリを指定する機能も備えています。また、Pythonスクリプト自体を編集せずに、テキストファイル(article.txt)を編集するだけで、記事の内容や画像、タグ、カテゴリを簡単に更新できます。

テキストファイル

article.txt ファイルの形式は以下のようになります。このファイルを編集するだけで、記事内容や画像の配置、タグ、カテゴリを指定できます。

title: 記事のタイトル
status: draft  # 記事の状態(下書き、公開など)
categories: 5  # カテゴリID
tags: 6,7,8  # タグID(複数のタグをカンマで区切る)
content:
<p>これは記事の段落です。</p>
<img src="画像の名前-2.jpg" />
<h2>見出し H2</h2>
<p>さらに別の段落。<strong>太字のテキスト</strong>も使用できます。</p>
<img src="画像の名前-3.jpg" />
  • title: 記事のタイトルを指定します。
  • status: 記事の状態を指定します。例: draft(下書き)や publish(公開)。
  • categories: カテゴリIDを指定します。
  • tags: タグIDをカンマで区切って指定します(複数可)。
  • content: 記事の本文をHTML形式で記述します。ここでは、段落や見出し、画像の挿入が可能です。<img src="ファイル名" />で画像を指定できます。

Pythonファイル

Pythonスクリプトの機能

このスクリプトは、以下の手順で動作します:

  1. article.txt から記事データを読み込む:
    • read_text_file 関数で article.txt ファイルを読み込み、記事のタイトル、状態、カテゴリ、タグ、コンテンツを取得します。
  2. 画像のアップロード:
    • コンテンツ内で指定された画像ファイル(例: 20240902-2.jpg20240902-3.jpg)を自動的にWordPressへアップロードし、そのURLを記事内に挿入します。
    • サムネイル画像(例: 20240902-1.jpg)もアップロードし、投稿にサムネイルとして設定します。
  3. 投稿の作成:
    • 取得した情報とアップロードした画像のデータを基に、WordPressのAPIを使用して記事を投稿(または下書きとして保存)します。
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'

# テキストファイルを読み込む関数
def read_text_file(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        lines = f.readlines()
    post_data = {'title': '', 'content': '', 'status': 'draft', 'categories': None, 'tags': []}
    content = []
    for line in lines:
        if line.startswith('title:'):
            post_data['title'] = line[len('title:'):].strip()
        elif line.startswith('status:'):
            post_data['status'] = line[len('status:'):].strip()
        elif line.startswith('categories:'):
            post_data['categories'] = int(line[len('categories:'):].strip())
        elif line.startswith('tags:'):
            tag_ids = line[len('tags:'):].strip().split(',')
            post_data['tags'] = [int(tag.strip()) for tag in tag_ids]
        elif line.startswith('content:'):
            continue
        else:
            content.append(line.strip())
    post_data['content'] = '\n'.join(content)
    return post_data

# 画像ファイルをアップロードし、IDを返す関数
def upload_image(image_path):
    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:
            return img_response.json()['id'], img_response.json()['source_url']
        else:
            print(f"画像のアップロードが失敗しました。ステータスコード: {img_response.status_code}")
            return None, None

# テキストファイルから投稿データを取得
post_data = read_text_file('article.txt')

# 画像のプレースホルダーを画像URLに置き換え
for img_tag in ['画像の名前-2.jpg', '画像の名前-3.jpg']:  # 必要な画像をリストで指定
    media_id, image_url = upload_image(img_tag)
    if image_url:
        post_data['content'] = post_data['content'].replace(f'<img src="{img_tag}" />', f'<img src="{image_url}" />')

# サムネイル画像(画像の名前-1.jpg)のアップロードと設定
thumbnail_id, _ = upload_image('画像の名前-1.jpg')
if thumbnail_id:
    post_data['featured_media'] = thumbnail_id  # サムネイルを設定

# WordPressに投稿する
response = requests.post(posts_endpoint, json=post_data, auth=HTTPBasicAuth(username, password))

if response.status_code == 201:
    print('下書きが作成されました。ID:', response.json()['id'])
else:
    print(f"リクエストが失敗しました。ステータスコード: {response.status_code}")
    print(response.text)

まとめ

  • 画像挿入: テキストデータに <img src="ファイル名.jpg" /> を記述するだけで、その画像をWordPressにアップロードし、記事内に配置します。
  • サムネイル設定: 指定した画像(例: 20240902-1.jpg)をサムネイル(アイキャッチ画像)として自動的に設定します。
  • タグとカテゴリ: tags:categories: フィールドで、WordPress上のカテゴリやタグをIDで指定できます。