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
ラッコキーワードでキーワード入力

ラッコキーワードでキーワードリサーチツールを使います。(これほんと便利なんで良く使います)。利用回数に制限があるので会員登録(無料)しておいた方が良いと思います。
https://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-1185966924266239&output=html&h=579&adk=4191128642&adf=3275859708&pi=t.aa~a.942905885~rp.4&w=812&lmt=1697119706&nsk=ea6b450d&rafmt=11&pwprc=2158584418&ad_type=text_image&format=812×579&url=https%3A%2F%2Fojimoney.com%2Fblog%2Fchatgpt-python-wordpress%2F&pra=3&wgl=1&fa=26&uach=WyJtYWNPUyIsIjEyLjYuMyIsIng4NiIsIiIsIjExNi4wLjU4NDUuMTg3IixbXSwwLG51bGwsIjY0IixbWyJDaHJvbWl1bSIsIjExNi4wLjU4NDUuMTg3Il0sWyJOb3QpQTtCcmFuZCIsIjI0LjAuMC4wIl0sWyJHb29nbGUgQ2hyb21lIiwiMTE2LjAuNTg0NS4xODciXV0sMF0.&dt=1697119706226&bpp=4&bdt=4937&idt=-M&shv=r20231004&mjsv=m202310040101&ptt=9&saldr=aa&abxe=1&cookie=ID%3Da408c1bb5bb05929-22ccf7dddbe4009f%3AT%3D1697119704%3ART%3D1697119704%3AS%3DALNI_Ma3o5ZPYw7SnL2WkR8nbM8QuZYl4A&gpic=UID%3D00000d98f39c106e%3AT%3D1697119704%3ART%3D1697119704%3AS%3DALNI_MY4s_VyZ4KOlLa5Vi0_lO59xvF0aw&prev_fmts=0x0%2C812x280&nras=2&correlator=4821419749255&frm=20&pv=1&ga_vid=1407805197.1697119703&ga_sid=1697119704&ga_hid=1903143969&ga_fc=1&u_tz=540&u_his=5&u_h=900&u_w=1440&u_ah=815&u_aw=1440&u_cd=24&u_sd=1&dmc=8&adx=136&ady=3848&biw=1440&bih=698&scr_x=0&scr_y=2826&eid=44759876%2C44759927%2C44759837%2C44801484%2C44804783%2C44805098%2C44804939%2C31078663%2C31078665%2C31078668%2C31078670&oid=2&pvsid=2359981964085602&tmod=635064754&uas=0&nvt=1&ref=https%3A%2F%2Fwww.google.com%2F&fc=1792&brdim=0%2C25%2C0%2C25%2C1440%2C25%2C1440%2C815%2C1440%2C698&vis=1&rsz=%7C%7Cs%7C&abl=NS&fu=128&bc=31&td=1&nt=1&ifi=6&uci=a!6&btvi=1&fsb=1&xpc=yKq06Cmtze&p=https%3A//ojimoney.com&dtd=36
STEP
生成されたキーワードをコピー

そうするとキーワードリストが出るので、赤枠の部分の全キーワードをコピーでキーワードをコピーします。(のちのステップで利用します)
https://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-1185966924266239&output=html&h=585&adk=3540976010&adf=3848977720&pi=t.aa~a.942905300~rp.4&w=812&lmt=1697119706&nsk=2f236d2d&rafmt=11&pwprc=2158584418&ad_type=text_image&format=812×585&url=https%3A%2F%2Fojimoney.com%2Fblog%2Fchatgpt-python-wordpress%2F&pra=3&wgl=1&fa=26&uach=WyJtYWNPUyIsIjEyLjYuMyIsIng4NiIsIiIsIjExNi4wLjU4NDUuMTg3IixbXSwwLG51bGwsIjY0IixbWyJDaHJvbWl1bSIsIjExNi4wLjU4NDUuMTg3Il0sWyJOb3QpQTtCcmFuZCIsIjI0LjAuMC4wIl0sWyJHb29nbGUgQ2hyb21lIiwiMTE2LjAuNTg0NS4xODciXV0sMF0.&dt=1697119706226&bpp=3&bdt=4937&idt=4&shv=r20231004&mjsv=m202310040101&ptt=9&saldr=aa&abxe=1&cookie=ID%3Da408c1bb5bb05929-22ccf7dddbe4009f%3AT%3D1697119704%3ART%3D1697119704%3AS%3DALNI_Ma3o5ZPYw7SnL2WkR8nbM8QuZYl4A&gpic=UID%3D00000d98f39c106e%3AT%3D1697119704%3ART%3D1697119704%3AS%3DALNI_MY4s_VyZ4KOlLa5Vi0_lO59xvF0aw&prev_fmts=0x0%2C812x280%2C812x579&nras=3&correlator=4821419749255&frm=20&pv=1&ga_vid=1407805197.1697119703&ga_sid=1697119704&ga_hid=1903143969&ga_fc=1&u_tz=540&u_his=5&u_h=900&u_w=1440&u_ah=815&u_aw=1440&u_cd=24&u_sd=1&dmc=8&adx=136&ady=5027&biw=1440&bih=698&scr_x=0&scr_y=2826&eid=44759876%2C44759927%2C44759837%2C44801484%2C44804783%2C44805098%2C44804939%2C31078663%2C31078665%2C31078668%2C31078670&oid=2&pvsid=2359981964085602&tmod=635064754&uas=0&nvt=1&ref=https%3A%2F%2Fwww.google.com%2F&fc=1792&brdim=0%2C25%2C0%2C25%2C1440%2C25%2C1440%2C815%2C1440%2C698&vis=1&rsz=%7C%7Cs%7C&abl=NS&fu=128&bc=31&td=1&nt=1&ifi=7&uci=a!7&btvi=2&fsb=1&xpc=rEeDZ6I0ZW&p=https%3A//ojimoney.com&dtd=51
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)
簡単に説明すると、以下のステップで構築されています。
- APIを利用して記事タイトルを生成
- 生成されたタイトルに合う記事コンテンツを生成
- 上記をWordPressのxmlrpcで下書きとして投稿
xmlrpcではなくREST APIを利用してやろうと思ったのですが、Xserver設定のせいなのかなかなかうまくいかなかったのでxmlrpcにしています。(セキュリティ的に弱くなるので、本当はREST APIの方にしたい)
また、APIを利用するにはOpenAIの有料プランに入る必要があります。
コメント