こちらは、検索キーワードを羅列したテキストファイルを読み込み、1行目から順にキーワードに沿って記事をワードプレスとtwitter(x)に自動投稿するpythonプログラムになります。
タイトル、URLも自動生成し、Googleインデックス登録まで行ってくれるので、人間の作業は校正とアイキャッチを手動で設定していくだけで済みます。
テキストファイル(sug2)
パンダ 中国 ツアー
パンダ 中国 帰る
パンダ 中国 借りてる
パンダ 中国 観光
.
.
.
メインスクリプト(main.py)
import json
from openai import OpenAI
from oauth2client.service_account import ServiceAccountCredentials
import httplib2
from textwrap import dedent
import requests
import argparse
import traceback
import tweepy
import time
args=0
ti=0
sl=0
bearar_token = ‘token1’
consumer_key = ‘key1’
consumer_secret = ‘secret1’
access_token_key = ‘token2’
access_token_secret = ‘secret2’
client = tweepy.Client(
bearer_token = bearar_token,
consumer_key = consumer_key,
consumer_secret = consumer_secret,
access_token = access_token_key,
access_token_secret = access_token_secret
)
def heredoc(s):
return dedent(s).strip()
class ChatGPT:
def __init__(self, api_key, model=”gpt-3.5-turbo-0125″):
self.client = OpenAI(api_key=api_key)
self.model = model
def completion(self, prompt):
response = self.client.chat.completions.create(
model=self.model,
messages=[
{
“role”: “user”,
“content”: prompt,
}
])
return response.choices[0].message.content.strip()
def gen_article(openai_api_key, question):
try:
print(“ChatGPTで記事生成中…”)
chat_gpt = ChatGPT(openai_api_key, ‘gpt-3.5-turbo-0125’)
prompt = heredoc(f”””
指示:
下記質問をもとに600字以上でブログ記事を作成してください。
本文はhtml形式にし、適宜h2タグで見出しを作成してください。
質問:
{question}
記事:
“””)
return chat_gpt.completion(prompt)
except Exception:
print(‘ChatGPTへのリクエストでエラーが発生しました。’)
print(traceback.format_exc())
exit(1)
def post_article(title, slug, body, user, password):
try:
print(“WordPressに記事を投稿中…”)
# ブログのURL
blog_url = ‘https://ukgwr.com/’
# 送信する記事データ
post_data = {
‘title’: title,
‘content’: body,
‘slug’: slug,
‘status’: ‘publish’, # draft=下書き、publish=公開 省略時はdraftになる
}
# Post APIのURL
post_api_url = f'{blog_url}/wp-json/wp/v2/posts’
# 記事投稿リクエスト
response = requests.post(post_api_url, json=post_data, auth=(user, password))
res_json = response.json()
return res_json[‘link’]except Exception:
print(‘WordPressへの投稿でエラーが発生しました。’)
print(traceback.format_exc())
exit(2)
def index_article(json_key_file_path, url):
try:
print(“Indexing APIにリクエストを送信中…”)
credentials = ServiceAccountCredentials.from_json_keyfile_name(
json_key_file_path,
scopes=[
‘https://www.googleapis.com/auth/indexing’,
],
)
http = credentials.authorize(httplib2.Http())
response, content = http.request(
‘https://indexing.googleapis.com/v3/urlNotifications:publish’,
method=’POST’,
body=f'{{“url”: “{url}”, “type”: “URL_UPDATED”}}’,
)
if response.status == 200:
return True
else:
print(json.loads(content.decode(‘utf-8’))[‘error’][‘message’])
return False
except Exception:
print(‘Indexing APIへのリクエストでエラーが発生しました。’)
print(traceback.format_exc())
print(json.dumps(json.loads(content.decode(‘utf-8’))))
exit(3)
def auto_article(openai_api_key, question, title, slug, user, password, json_key_file_path):
body = gen_article(openai_api_key, question)
url = post_article(title, slug, body, user, password)
is_success = index_article(json_key_file_path, url)
return is_success
if __name__ == ‘__main__’:
parser = argparse.ArgumentParser(description=’ChatGPTが生成した記事をWordPressに投稿し、IndexingAPIを用いてクローリングを依頼するプログラム。’)
parser.add_argument(‘-o’, ‘–open-api-key’, dest=’openai_api_key’, type=str, required=True, help=’OpenAI APIのAPIキー’)
parser.add_argument(‘-q’, ‘–question’, type=str, required=True, help=’ChatGPTへ投げかける質問’)
parser.add_argument(‘-t’, ‘–title’, type=str, required=True, help=’記事のタイトル’)
parser.add_argument(‘-s’, ‘–slug’, type=str, required=True, help=’記事のスラッグ’)
parser.add_argument(‘-u’, ‘–user’, type=str, required=True, help=’WordPress管理画面のログインユーザーID’)
parser.add_argument(‘-p’, ‘–password’, type=str, required=True, help=’WordPress管理画面のアプリケーションパスワード’)
parser.add_argument(‘-f’, ‘–filepath’, type=str, required=True, help=’GCPのJSONキーファイルのパス’)
args = parser.parse_args()
ti=args.title
sl=args.slug
is_success = auto_article(args.openai_api_key, args.question, args.title, args.slug, args.user, args.password, args.filepath)
if is_success:
print(“成功しました。”)
else:
print(“失敗しました。”)
str1=”https://ukgwr.com/”
str2=str1+sl
str3=str2+”\n”
str4=str3+ti
client.create_tweet(text=str4)
print(ti+” “+”をツイートしました”)
スタートアップファイル(postwp.sh)
n=1
while true
do
m=$((n))$”p”
keyword=$(sed -n $m sug2)
echo $keyword
if [ “$keyword” = “” ]; then
echo 終了しました。
exit 1
fi
slug=$(py trans.py $keyword)
title=$(echo $keyword | py pattern.py)
echo $title
py main.py -f /home/example.json -o apicode1 -q “$keyword” -t $title -s $slug -u username -p apicode2
sleep 10
done