Bibliothèque de queries
Bibliothèque de queriesImporter un article depuis un flux RSS WordPress et réécrire son contenu avec ChatGPT

Importer un article depuis un flux RSS WordPress et réécrire son contenu avec ChatGPT

Cette requête récupère les données de l'article depuis un flux RSS WordPress (y compris le titre, le contenu et l'extrait), réécrit le contenu avec ChatGPT et le stocke sur le site WordPress local.

Si l'auteur avec ce nom d'utilisateur existe localement, il l'utilise ; sinon, il le remplace par celui défini via la variable $defaultAuthorUsername.

La variable $url reçoit l'URL du flux RSS de l'article WordPress individuel. Il s'agit généralement de l'URL de l'article + "/feed/rss/?withoutcomments=1". Par exemple :

https://wordpress.com/blog/2024/07/16/wordpress-6-6/feed/rss/?withoutcomments=1

Pour vous connecter à l'API OpenAI, vous devez fournir la variable $openAIAPIKey avec la clé API.

Vous pouvez éventuellement fournir le message système et le prompt pour réécrire le contenu de l'article. Si ces valeurs ne sont pas fournies, les valeurs suivantes sont utilisées :

  • Message système ($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 chaîne de contenu est ajoutée à la fin du prompt.)

De plus, vous pouvez remplacer la valeur par défaut de la variable $model ("gpt-4o-mini") et fournir des valeurs pour $temperature et $maxCompletionTokens (tous deux null par défaut).

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
    }
  }
}