【Python】CSVを使用して、ワードプレスへの記事投稿を行う
暑いですねー。
今回は、CSVファイルに入っているデータを使用し、WP(ワードプレス)の『投稿』へ、一気に記事を投稿するPythonコードを紹介します。
毎度のことながら、Pythonの事前設定はググって対応しておいてくださいね。
また、今回は以下の情報とファイルの用意が必要となります。
①WPのアドレス
②ログイン用のIDとパスワード(投稿者、編集者、管理者のいずれかの権限)
③WPプラグイン:WP REST API(https://ja.wp-api.org/)
④CSV
なお、CSVの中身は以下のデータが入っていると仮定します。
[動画タイトル,再生時間,画像URL,動画ページURL,画質,閲覧数]
Main.py
import requests
import csv
import os
from datetime import datetime
# WordPressサイトのURLとログイン情報を設定する
wordpress_url = 'http://example.com/wp-json/wp/v2'
username = ''
password = ''
# WordPressサイトにアクセスしてステータスコードを確認する
try:
response = requests.get(wordpress_url, auth=(username, password))
response.raise_for_status()
print('WordPressサイトに接続できました')
except requests.exceptions.RequestException as e:
print('WordPressサイトに接続できませんでした:', e)
exit()
# 投稿する情報を取得する
with open('data.csv', 'r', encoding='utf-8') as f:
rows = csv.reader(f)
next(rows) # ヘッダー行をスキップする
for row in rows:
title = row[0]
#content = row[3] + '<br><img src="' + row[2] + '">'
content = '<a href="' + row[3] + '" target="_blank">' + '<img src="' + row[2] + '"></a>'
excerpt = '再生時間: ' + row[1] + ', 画質: ' + row[4] + ', 閲覧数: ' + row[5]
# サムネイルをダウンロードする
image_url = row[2]
image_file = datetime.now().strftime('%Y%m%d%H%M%S') + '_thumbnail.jpg'
response = requests.get(image_url, stream=True)
if response.status_code == 200:
with open(image_file, 'wb') as f:
for chunk in response.iter_content(1024):
f.write(chunk)
else:
print('画像のダウンロードに失敗しました:', image_url)
# WordPressにサムネイルをアップロードする
with open(image_file, 'rb') as f:
files = {'file': (image_file, f, 'image/jpeg')}
media_response = requests.post(wordpress_url + '/media', auth=(username, password), files=files)
if media_response.status_code == 201:
media_id = media_response.json()['id']
thumbnail = media_response.json()['media_details']['sizes']['thumbnail']['source_url']
#os.remove(image_file)
# WordPressに投稿する
post_data = {
'title': title,
#'content': content + '<br><img src="' + thumbnail + '">',
'content': content + '<br>' + excerpt,
'excerpt': excerpt,
'status': 'publish',
'featured_media': media_id
}
response = requests.post(wordpress_url + '/posts', auth=(username, password), json=post_data)
if response.status_code == 201:
print('投稿しました:', title)
else:
print('投稿に失敗しました:', title)
else:
print('サムネイルのアップロードに失敗しました:', image_file)
コードの7~8行目に、サイトのURL(https://example.comの部分を書き換え)、ID、パスワードを追記してください。
画像URLの項目から引っ張ってきた画像を、記事のサムネイルと記事内の動画サムネイルに使用しています。
ローカル環境に画像を保存し、WPにアップしています。
投稿処理が終わりましたら、ローカルにある画像は削除して大丈夫です。
『with open()』の部分でCSVのファイル名を指定しています。
pyファイルとCSVファイルは同じフォルダ内にあることを想定していますので、それぞれ違うフォルダにある場合はパスの記載をお忘れなく。
以上。
この記事が気に入ったらサポートをしてみませんか?