Bibliothèque de queries
Bibliothèque de queriesImporter de nouveaux posts depuis un flux RSS WordPress

Importer de nouveaux posts depuis un flux RSS WordPress

Cette requête importe tous les nouveaux posts depuis un flux RSS WordPress, en utilisant le titre, le contenu et l'extrait du post.

Les nouveaux posts sont ceux créés dans les dernières 24 heures (configurable via variable). Exécutez cette requête persistée avec une tâche d'automatisation quotidienne pour importer automatiquement tous les nouveaux posts de l'autre site.

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

https://wordpress.com/blog/feed/rss/?withoutcomments=1

La variable $timeDeltaInSeconds indique à partir de quand considérer un post comme nouveau. Par défaut, c'est 86400 secondes (c'est-à-dire un jour).

query GetTime(
  $timeDeltaInSeconds: Int! = 86400
) {
  now: _time
  
  newPostsStartTime: _intSubtract(
    from: $__now
    subtract: $timeDeltaInSeconds,
  )
    @export(as: "newPostsStartTime")
}
 
query GetPostsFromRSSFeedAndExportData(
  $url: URL!
)
  @depends(on: "GetTime")
{
  _sendHTTPRequest(input: {
    url: $url,
    method: GET
  }) {
    body
    rssJSON: _strDecodeXMLAsJSON(
      xml: $__body
      alwaysArrayTagNames: [
        "item",
      ],
    )
      @export(as: "rssJSON")
  }
}
 
query CreatePostInputsFromRSSFeed
  @depends(on: "GetPostsFromRSSFeedAndExportData")
{
  items: _objectProperty(
    object: $rssJSON,
    by: { path: "rss.channel.item" }
  )
  inputs: _echo(value: $__items)
    @underEachArrayItem(
      passValueOnwardsAs: "item"
      affectDirectivesUnderPos: [1, 2, 3, 4, 6]
    )
      @applyField(
        name: "_objectProperty"
        arguments: {
          object: $item
          by: { key: "pubDate" }
        }
        passOnwardsAs: "dateAsString"
      )
      @applyField(
        name: "_strToTime",
        arguments: {
          string: $dateAsString
        },
        passOnwardsAs: "date"
      )
      @applyField(
        name: "_greaterThanOrEquals",
        arguments: {
          value1: $date,
          value2: $newPostsStartTime
        },
        passOnwardsAs: "isNewPost"
      )
      @unless(
        condition: $isNewPost
      )
        @setNull
      @if(
        condition: $isNewPost
        affectDirectivesUnderPos: [1, 2, 3, 4]
      )
        @applyField(
          name: "_objectProperty"
          arguments: {
            object: $item
            by: { key: "title" }
          }
          passOnwardsAs: "title"
        )
        @applyField(
          name: "_objectProperty"
          arguments: {
            object: $item
            by: { key: "content:encoded" }
          }
          passOnwardsAs: "content"
        )
        @applyField(
          name: "_objectProperty"
          arguments: {
            object: $item
            by: { key: "description" }
          }
          passOnwardsAs: "excerpt"
        )
        @applyField(
          name: "_echo",
          arguments: {
            value: {
              status: draft,
              contentAs: {
                html: $content
              },
              excerpt: $excerpt
              title: $title
            }
          },
          setResultInResponse: true
        )
    @arrayFilter
    @export(as: "inputs")
}
 
mutation ImportNewPostsFromWordPressRSSFeed
  @depends(on: "CreatePostInputsFromRSSFeed")
{
  createPosts(inputs: $inputs) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    post {
      id
      slug
      date
      status
 
      content
      excerpt
      title
    }
  }
}