Importare un articolo da un feed RSS WordPress e riscrivere il suo contenuto con ChatGPT
Questa query recupera i dati dell'articolo da un feed RSS WordPress (inclusi titolo, contenuto ed estratto), riscrive il contenuto con ChatGPT e lo salva nel sito WordPress locale.
Se l'autore con quel nome utente esiste localmente, viene utilizzato; altrimenti viene sostituito con quello definito tramite la variabile $defaultAuthorUsername.
La variabile $url riceve l'URL del feed RSS dell'articolo WordPress singolo. Di solito corrisponde all'URL dell'articolo + "/feed/rss/?withoutcomments=1". Esempio:
https://wordpress.com/blog/2024/07/16/wordpress-6-6/feed/rss/?withoutcomments=1Per connettersi all'API OpenAI, è necessario fornire la variabile $openAIAPIKey con la chiave API.
Facoltativamente, è possibile fornire il messaggio di sistema e il prompt per riscrivere il contenuto dell'articolo. Se non vengono forniti, vengono utilizzati i seguenti valori predefiniti:
- Messaggio di sistema (
$systemMessage): "You are an English Content rewriter and a grammar checker" - Prompt (
$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: "
(La stringa del contenuto viene aggiunta alla fine del prompt.)
Inoltre, è possibile sovrascrivere il valore predefinito della variabile $model ("gpt-4o-mini") e fornire valori per $temperature e $maxCompletionTokens (entrambi null per impostazione predefinita).
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
}
}
}