Biblioteca de queriesImportar novos posts de feed RSS do WordPress
Importar novos posts de feed RSS do WordPress
Esta query importa todos os novos posts de um feed RSS do WordPress, usando o título, o conteúdo e o excerpt do post.
Os novos posts são aqueles criados nas últimas 24 horas (configurável via variável). Execute esta persisted query com uma tarefa de automação diária para importar automaticamente todos os novos posts do outro site.
A variável $url recebe a URL do feed RSS do arquivo de posts do WordPress. Geralmente é a URL do arquivo de posts + "/feed/rss/?withoutcomments=1". Ex:
https://wordpress.com/blog/feed/rss/?withoutcomments=1A variável $timeDeltaInSeconds indica a partir de quando considerar um post como novo. Por padrão é 86400 segundos (ou seja, um dia).
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
}
}
}