Pustaka queries
Pustaka queriesImpor postingan baru dari feed RSS WordPress

Impor postingan baru dari feed RSS WordPress

Query ini mengimpor semua postingan baru dari feed RSS WordPress, menggunakan judul, konten, dan kutipan postingan tersebut.

Postingan baru adalah postingan yang dibuat dalam 24 jam terakhir (dapat dikonfigurasi melalui variabel). Jalankan persisted query ini dengan tugas otomatisasi harian untuk mengimpor secara otomatis semua postingan baru dari situs lain.

Variabel $url menerima URL feed RSS arsip postingan WordPress. Biasanya berupa URL arsip postingan + "/feed/rss/?withoutcomments=1". Contoh:

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

Variabel $timeDeltaInSeconds menunjukkan sejak kapan suatu postingan dianggap sebagai postingan baru. Defaultnya adalah 86400 detik (yaitu satu hari).

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