Queries-Bibliothek
Queries-BibliothekEinen Beitrag aus einem WordPress RSS-Feed importieren und seinen Inhalt mit ChatGPT umschreiben

Einen Beitrag aus einem WordPress RSS-Feed importieren und seinen Inhalt mit ChatGPT umschreiben

Diese query ruft die Beitragsdaten aus einem WordPress RSS-Feed ab (einschließlich Titel, Inhalt und Auszug), schreibt den Inhalt mit ChatGPT um und speichert ihn auf der lokalen WordPress-Website.

Wenn der Autor mit diesem Benutzernamen lokal existiert, wird er verwendet; andernfalls wird er durch den ersetzt, der über die Variable $defaultAuthorUsername definiert ist.

Die Variable $url empfängt die URL des RSS-Feeds des einzelnen WordPress-Beitrags. Sie entspricht normalerweise der Beitrags-URL + "/feed/rss/?withoutcomments=1". Beispiel:

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

Um eine Verbindung zur OpenAI API herzustellen, musst du die Variable $openAIAPIKey mit dem API-Schlüssel angeben.

Optional kannst du die Systemnachricht und den Prompt zum Umschreiben des Beitragsinhalts angeben. Wenn sie nicht angegeben werden, werden folgende Standardwerte verwendet:

  • Systemnachricht ($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: "

(Der Inhaltsstring wird am Ende des Prompts angehängt.)

Außerdem kannst du den Standardwert der Variable $model ("gpt-4o-mini") überschreiben und Werte für $temperature und $maxCompletionTokens angeben (beide standardmäßig 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
    }
  }
}