ChatGPT&Pythonで、WordPressに自動投稿する方法

この記事を書いてる人

オジー

  • WordPress歴8年
  • 副業でデザイン/開発を受託→法人化
  • WordPressで会社HPをオリジナルテーマで作成
  • 主軸はデザイン、たまにフロントエンドのコードも書きます
  • 事業会社/受託会社 両方経験あり

久々の投稿になってしまいましたが、最近仕事でもChatGPTやMidjourneyなどのAIツールを利用することが多くなりブログと組み合わせて何かできないかなと色々試していたところで今回の「ChatGPTを利用して、WordPressに自動投稿する方法」がわりかし良いのではと思ったので、共有します!

目次

ChatGPTとは

ChatGPTは、OpenAIによって開発された大規模な言語モデルで、人間と同様の自然な対話を生成することが目的です。GPTは「Generative Pretraining Transformer」の略で、これはその学習方法と使用されるニューラルネットワークのタイプを示しています。

ChatGPTは非常に大きなテキストデータベースから学習しており、その結果として、多くの種類の質問に対する答えを生成することができます。しかし、ChatGPTは人間のように考えたり感じたりする能力はなく、あくまでテキストパターンを予測する機械学習モデルです。

また、GPT-4とはOpenAIが開発した最新のGPTモデルで、その前バージョンであるGPT-3よりもさらに大規模で高性能です。ChatGPTはGPT-4アーキテクチャを使用しているため、その応答は非常に洗練され、人間の対話に近い形になります。

今回の記事で使うツール

  • pythonが実行できる環境(私はVisual Studio Codeでローカルで実施しています)
  • OpenAIのAPIキー
  • WordPressのログイン情報
  • ラッコキーワード

まずはキーワード生成

今回自分が試したのは対象キーワードから記事を生成する試みをしたので、まずは対象キーワードをリストアップすることから始めます。(もうすでにキーワードがリスト化されている方はここはスキップしてもらったokです)

STEP
ラッコキーワードでキーワード入力

ラッコキーワードでキーワードリサーチツールを使います。(これほんと便利なんで良く使います)。利用回数に制限があるので会員登録(無料)しておいた方が良いと思います。

STEP
生成されたキーワードをコピー

そうするとキーワードリストが出るので、赤枠の部分の全キーワードをコピーでキーワードをコピーします。(のちのステップで利用します)

STEP
任意)キーワードプランナーでボリューム確認&スプレッドシート出力

それぞれのキーワードボリュームが気になるのであれば、Googleのキーワードプランナーに入れて数字を付与したスプレッドシートを出力して精査するのがおすすめです。

STEP
不要なものを精査し、一旦完了

キーワード生成したらどんな小さいキーワードでも対象とするのでボリュームに関係なく全く関係ないものを精査するだけでokです。

これで今回対象とするキーワードリストが作成されました。のちのコードに使います。

記事生成のためのプロンプト

実際はコードに埋め込んでいる(URL生成以外)のですが、どのようなプロンプトで生成しているかを紹介いたします。基本的に記事作成に必要なものを生成しています。

プロンプトとは

タイトル生成

プロンプト

「{keyword}」のキーワードで上位表示するための記事のタイトルを作成してください。出力はタイトル1つのみで、文章ではなくタイトルだけでokです。

{keyword}は変数になります。

記事のコンテンツ

プロンプト

「{生成されたタイトル}」のキーワードで上位表示するための記事を作成してください。(後述の制約を守って)
■制約
・全体の文字数は3000文字程度になる想定
・見出しはh2、h3を使用する
・マークダウン形式で

{生成されたタイトル}には上で生成されたタイトルが入るイメージです。

URL生成

プロンプト

「{生成されたタイトル}」という記事のURL候補を5個提案してください。

URL生成に関しては、良い感じのものができなかったので今回のコードには含んでいません。また、記事IDをURLにしている方はここは完全に不要です。

WordPressに自動投稿する方法

ファイル構造

  • post.py
  • keyword.txt

実際のコード

import time
from datetime import datetime
from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods.users import GetUserInfo
from wordpress_xmlrpc.methods.posts import GetPosts, NewPost
import locale
import requests
import os
import openai
import json
import base64

keyword_file_path = 'keyword.txt'
with open(keyword_file_path, 'r') as keyword_file:
    keyword_list = keyword_file.readlines()
    keyword_list = [keyword.strip() for keyword in keyword_list]

openai.api_key = "ここはopenaiのapi keyを入れます"

for keyword in keyword_list:

  question_title="「" + keyword + "」" + "のキーワードで上位表示するための記事のタイトルを作成してください。出力はタイトル1つのみで、文章ではなくタイトルだけでokです。"
  response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {
            "role": "system",
            "content": "あなたはSEOのプロフェッショナルです。日本語で返答してください。"
        },
        {
            "role": "user",
            "content": question_title
        },
    ],
  )

  # タイトルの生成結果を取得
  generated_title = response.choices[0]["message"]["content"].strip()
  print("タイトル生成完了 : " + generated_title)
  question_content = "「" + generated_title + "」のキーワードで上位表示するための記事を作成してください。(後述の制約を守って)■制約・全体の文字数は3000文字程度になる想定・見出しはh2、h3を使用する・マークダウン形式で"

  response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {
            "role": "system",
            "content": "あなたはSEOのプロフェッショナルです。日本語で返答してください。"
        },
        {
            "role": "user",
            "content": question_content
        },
    ],
  )
  # 記事内容の生成結果を取得
  generated_content = response.choices[0]["message"]["content"].strip()
  print("記事内容生成完了")

  # 時間を日本時間にセットする
  locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')

  url="あなたのドメイン/xmlrpc.php"
  user="WordPressのユーザー名"
  password="上記ユーザーのログインパスワード"

  # クライアントの呼び出しなど
  wp = Client(url, user, password)
  post = WordPressPost()

  # 記事の編集 ##########
  post.post_status = "draft"
  post.date = datetime.now()
  post.title = generated_title
  post.content = generated_content

  # 投稿   返り値として記事のid(pid)が得られる
  wp.call(NewPost(post))
  print("投稿完了 : " + keyword)

簡単に説明すると、以下のステップで構築されています。

  1. APIを利用して記事タイトルを生成
  2. 生成されたタイトルに合う記事コンテンツを生成
  3. 上記をWordPressのxmlrpcで下書きとして投稿

xmlrpcではなくREST APIを利用してやろうと思ったのですが、Xserver設定のせいなのかなかなかうまくいかなかったのでxmlrpcにしています。(セキュリティ的に弱くなるので、本当はREST APIの方にしたい)

また、APIを利用するにはOpenAIの有料プランに入る必要があります。

オジー

importされているものが入ってない場合はエラーになるので、もしわからなければ問い合わせフォームからコンタクトしていただければと思います。

記事のクオリティ

使っているモデルが「gpt-3.5-turbo」なため、GPT-4に比べてやや品質が落ちるなという印象です。記事によってはキーワードはあっているが内容が全然違うのも出力されてしまうのが現状です。

私が運営している別のメディアでは、記事公開後1日でインデックスされ1ページ目(3位)に表示されていたりするので良いクオリティのものも存在しています。

プロンプトを調整する&ステップをもっと増やせばまだまだ記事のクオリティを上げることができるなと感じています。

向いているもの・向いていないもの

向いているもの

キーワードボリュームが少なく競合が少ないものに対して記事を大量生産するというのは向いているなと思います。実際私の別のメディアはジャンルがニッチで、かつ競合も強くないのですぐに上位表示されたのではと考えています。

それこそ300記事生成して$1も料金がかからなかったので1000記事とか1万記事とか生成するみたいなことも現実的に可能ですよね。そうすると細かいキーワードでも束ねれば一定のボリュームになるので良いかなと。

向いていないもの

コンバージョンを獲得するための記事、競合が強い記事はまだまだ無理ですね。このような重要な記事はまだ人が書いた方がクオリティは高いので、ここの運用フローは特に変更せずにいます。

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次