Queries KütüphanesiURL'lerden HTML İçeriğini WordPress'e Yeni Gönderi Olarak Aktar
URL'lerden HTML İçeriğini WordPress'e Yeni Gönderi Olarak Aktar
Bu query, verilen URL'lerdeki HTML sayfalarını WordPress'e yeni gönderi olarak aktarır.
Her URL için meta bölümündeki <title>...</title> etiketinden başlığı, <body>...</body> etiketinden içeriği alır ya da $contentMatchInnerRegex değişkeni kullanılarak belirli bir iç HTML öğesine göre özelleştirilir.
$contentMatchInnerRegex ile <body> HTML'sinin hangi alt bölümünün yakalanacağını hedefleyebiliriz.
Örneğin, içeriğin şu öğeden çıkarılması gerekiyorsa:
<article class="main">...</article>...bunu şu şekilde yakalayabiliriz:
{
"contentMatchInnerRegex": ".*?<\\s*?article\\b[^>]*>(.*?)<\\/article\\b[^>]*>.*?"
}query GenerateURLInputs(
$urls: [URL!]!
$contentMatchInnerRegex: String! = "(.*?)"
) {
urlInputs: _echo(value: $urls)
@underEachArrayItem(
passValueOnwardsAs: "url"
)
@applyField(
name: "_echo",
arguments: {
value: {
url: $url,
method: GET
}
},
setResultInResponse: true
)
@export(as: "urlInputs")
@remove
contentMatchRegex: _sprintf(
string: "/(?:<!DOCTYPE html>)?<\\s*?html\\b[^>]*>.*?<\\s*?body\\b[^>]*>%s<\\/body\\b[^>]*>.*?<\\/html\\b[^>]*>/sim",
values: [$contentMatchInnerRegex]
)
@export(as: "contentMatchRegex")
}
query RequestPages
@depends(on: "GenerateURLInputs")
{
urlContents: _sendHTTPRequests(inputs: $urlInputs, async: false) {
statusCode
body
@remove
title: _strRegexReplace(
searchRegex: "/(?:<!DOCTYPE html>)?<\\s*?html\\b[^>]*>.*?<head\\b[^>]*>.*?<\\s*?title\\b[^>]*>(.*?)<\\/title\\b[^>]*>.*?<\\/head\\b[^>]*>(.*?)<\\/html\\b[^>]*>/sim"
replaceWith: "$1"
in: $__body
)
content: _strRegexReplace(
searchRegex: $contentMatchRegex
replaceWith: "$1"
in: $__body
)
createPostInput: _echo(value: {
status: publish,
title: $__title
contentAs: {
html: $__content
}
})
@export(as: "createPostInputs", type: LIST)
}
}
mutation CreatePostsFromURLs
@depends(on: "RequestPages")
{
createPosts(inputs: $createPostInputs) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
post {
id
status
title
content
}
}
}