쿼리 라이브러리
쿼리 라이브러리WordPress RSS 피드에서 새 게시물 가져오기

WordPress RSS 피드에서 새 게시물 가져오기

이 쿼리는 WordPress RSS 피드에서 게시물의 제목, 콘텐츠, 발췌문을 사용하여 모든 새 게시물을 가져옵니다.

새 게시물이란 최근 24시간 이내에(변수로 설정 가능) 작성된 게시물입니다. 이 퍼시스티드 쿼리를 매일 자동화 작업으로 실행하면 다른 사이트의 모든 새 게시물을 자동으로 가져올 수 있습니다.

변수 $url에는 WordPress 게시물 아카이브의 RSS 피드 URL을 지정합니다. 일반적으로 게시물 아카이브 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
    }
  }
}