見出し画像

【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ファイルは同じフォルダ内にあることを想定していますので、それぞれ違うフォルダにある場合はパスの記載をお忘れなく。

以上。

この記事が気に入ったらサポートをしてみませんか?