ไลบรารี Queries
ไลบรารี Queriesนำเข้าโพสต์ใหม่จาก RSS feed ของ WordPress

นำเข้าโพสต์ใหม่จาก RSS feed ของ WordPress

Query นี้นำเข้าโพสต์ใหม่ทั้งหมดจาก RSS feed ของ WordPress โดยใช้ชื่อเรื่อง เนื้อหา และข้อความย่อของโพสต์

โพสต์ใหม่คือโพสต์ที่สร้างขึ้นภายใน 24 ชั่วโมงที่ผ่านมา (สามารถกำหนดค่าได้ผ่านตัวแปร) เรียกใช้ persisted query นี้ด้วยงานอัตโนมัติประจำวันเพื่อนำเข้าโพสต์ใหม่ทั้งหมดจากอีกเว็บไซต์โดยอัตโนมัติ

ตัวแปร $url รับ URL ของ RSS feed ของคลังเก็บโพสต์ WordPress โดยปกติจะเป็น URL ของคลังเก็บโพสต์ + "/feed/rss/?withoutcomments=1" ตัวอย่างเช่น:

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

ตัวแปร $timeDeltaInSeconds ระบุช่วงเวลาที่จะถือว่าโพสต์เป็นโพสต์ใหม่ ค่าเริ่มต้นคือ 86400 วินาที (กล่าวคือหนึ่งวัน)

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