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スクリプトの機能
このスクリプトは、以下の手順で動作します:
article.txt
から記事データを読み込む:read_text_file
関数でarticle.txt
ファイルを読み込み、記事のタイトル、状態、カテゴリ、タグ、コンテンツを取得します。
- 画像のアップロード:
- コンテンツ内で指定された画像ファイル(例:
20240902-2.jpg
、20240902-3.jpg
)を自動的にWordPressへアップロードし、そのURLを記事内に挿入します。 - サムネイル画像(例:
20240902-1.jpg
)もアップロードし、投稿にサムネイルとして設定します。
- コンテンツ内で指定された画像ファイル(例:
- 投稿の作成:
- 取得した情報とアップロードした画像のデータを基に、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で指定できます。
ディスカッション
コメント一覧
まだ、コメントがありません