Biblioteca de queries
Biblioteca de queriesImportar post do feed RSS do WordPress

Importar post do feed RSS do WordPress

Esta query importa um post de um feed RSS do WordPress, usando o título, o conteúdo e o resumo do post.

Se o autor com esse nome de usuário existir localmente, ele será usado; caso contrário, será substituído pelo definido via variável $defaultAuthorUsername.

A variável $url recebe a URL do feed RSS do post único do WordPress. Geralmente é a URL do post + "/feed/rss/?withoutcomments=1". Ex.:

https://wordpress.com/blog/2024/07/16/wordpress-6-6/feed/rss/?withoutcomments=1
query GetPostFromRSSFeedAndExportData(
  $url: URL!
) {
  _sendHTTPRequest(input: {
    url: $url,
    method: GET
  }) {
    body
    rssJSON: _strDecodeXMLAsJSON(
      xml: $__body
      alwaysArrayTagNames: [
        "category",
      ],
    )
 
    # Fields to be imported
    authorUsername: _objectProperty(
      object: $__rssJSON,
      by: {
        path: "rss.channel.item.dc:creator"
      }
    )
      @export(as: "authorUsername")
 
    # categorySlugs: _objectProperty(
    #   object: $__rssJSON,
    #   by: {
    #     path: "rss.channel.item.category"
    #   }
    # )
 
    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")
  }
}
 
# If the author's username exists in this site, keep it
# Otherwise, use the default one
query CheckAuthorExistsOrChange(
  $defaultAuthorUsername: String! = "admin"
)
  @depends(on: "GetPostFromRSSFeedAndExportData")
{
  existingUserByUsername: user(by: { username: $authorUsername })
  {
    id
    username
  }
  userExists: _notNull(value: $__existingUserByUsername)
  username: _if(
    condition: $__userExists,
    then: $authorUsername,
    else: $defaultAuthorUsername
  )
    @export(as: "existingAuthorUsername")
}
 
mutation ImportPostFromWPRSSFeed
  @depends(on: "CheckAuthorExistsOrChange")
{
  createPost(input: {
    status: draft,
    authorBy: {
      username: $existingAuthorUsername
    },
    contentAs: {
      html: $content
    },
    excerpt: $excerpt
    title: $title
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    post {
      id
      slug
      date
      status
 
      author {
        id
        username
      }
      content
      excerpt
      title
    }
  }
}