QueryライブラリWordPress RSSフィードからポストをインポートし、ChatGPTでコンテンツを書き換える
WordPress RSSフィードからポストをインポートし、ChatGPTでコンテンツを書き換える
このクエリは、WordPress RSSフィード(タイトル、コンテンツ、抜粋を含む)からポストデータを取得し、ChatGPTを使ってコンテンツを書き換え、ローカルのWordPressサイトに保存します。
そのユーザー名の著者がローカルに存在する場合はそれを使用し、存在しない場合は変数 $defaultAuthorUsername で定義された著者に置き換えます。
変数 $url は、WordPressの個別ポストのRSSフィードURLを受け取ります。通常はブログポストのURL + "/feed/rss/?withoutcomments=1" です。例:
https://wordpress.com/blog/2024/07/16/wordpress-6-6/feed/rss/?withoutcomments=1OpenAI APIに接続するには、変数 $openAIAPIKey にAPIキーを指定する必要があります。
ポストのコンテンツを書き換えるためのシステムメッセージとプロンプトは任意で指定できます。指定しない場合は、以下のデフォルト値が使用されます:
- システムメッセージ(
$systemMessage): "You are an English Content rewriter and a grammar checker" - プロンプト(
$prompt): "Please rewrite the following English text, by changing the simple A0-level words and sentences with more beautiful and elegant upper-level English words and sentences, while maintaining the original meaning: "
(コンテンツ文字列はプロンプトの末尾に追加されます。)
また、変数 $model("gpt-4o-mini")のデフォルト値を上書きしたり、$temperature や $maxCompletionTokens(どちらもデフォルトは null)の値を指定することもできます。
query GetPostFromRSSFeed(
$url: URL!
) {
_sendHTTPRequest(input: {
url: $url,
method: GET
}) {
body
rssJSON: _strDecodeXMLAsJSON(
xml: $__body
)
# Fields to be imported
authorUsername: _objectProperty(
object: $__rssJSON,
by: {
path: "rss.channel.item.dc:creator"
}
)
@export(as: "authorUsername")
content: _objectProperty(
object: $__rssJSON,
by: {
path: "rss.channel.item.content:encoded"
}
)
@export(as: "content")
excerpt: _objectProperty(
object: $__rssJSON,
by: {
path: "rss.channel.item.description"
}
)
@export(as: "excerpt")
title: _objectProperty(
object: $__rssJSON,
by: {
path: "rss.channel.item.title"
}
)
@export(as: "title")
}
}
query RewriteContentWithChatGPT(
$openAIAPIKey: String!
$systemMessage: String! = "You are an English Content rewriter and a grammar checker"
$prompt: String! = "Please rewrite the following English text, by changing the simple A0-level words and sentences with more beautiful and elegant upper-level English words and sentences, while maintaining the original meaning: "
$model: String! = "gpt-4o-mini"
$temperature: Float
$maxCompletionTokens: Int
)
@depends(on: "GetPostFromRSSFeed")
{
promptWithContent: _strAppend(
after: $prompt
append: $content
)
openAIResponse: _sendJSONObjectItemHTTPRequest(input: {
url: "https://api.openai.com/v1/chat/completions",
method: POST,
options: {
auth: {
password: $openAIAPIKey
},
json: {
model: $model,
temperature: $temperature,
max_completion_tokens: $maxCompletionTokens,
messages: [
{
role: "system",
content: $systemMessage
},
{
role: "user",
content: $__promptWithContent
}
]
}
}
})
@underJSONObjectProperty(by: { key: "choices" })
@underArrayItem(index: 0)
@underJSONObjectProperty(by: { path: "message.content" })
@export(as: "rewrittenContent")
}
# If the author's username exists in this site, keep it
# Otherwise, use the default one
query CheckAuthorExistsOrChange(
$defaultAuthorUsername: String! = "admin"
)
@depends(on: "RewriteContentWithChatGPT")
{
existingUserByUsername: user(by: { username: $authorUsername })
{
id
username
}
userExists: _notNull(value: $__existingUserByUsername)
username: _if(
condition: $__userExists,
then: $authorUsername,
else: $defaultAuthorUsername
)
@export(as: "existingAuthorUsername")
}
mutation ImportPostFromWordPressRSSFeedAndRewriteContent
@depends(on: "CheckAuthorExistsOrChange")
{
createPost(input: {
status: draft,
authorBy: {
username: $existingAuthorUsername
},
contentAs: {
html: $rewrittenContent
},
excerpt: $excerpt
title: $title
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
post {
id
slug
date
status
author {
id
username
}
content
excerpt
title
}
}
}