쿼리 라이브러리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
}
}
}