Queries-Bibliothek
Queries-BibliothekNeue Beiträge aus WordPress RSS-Feed importieren

Neue Beiträge aus WordPress RSS-Feed importieren

Diese query importiert alle neuen Beiträge aus einem WordPress RSS-Feed und verwendet dabei Titel, Inhalt und Auszug des Beitrags.

Die neuen Beiträge sind jene, die in den letzten 24 Stunden erstellt wurden (per Variable konfigurierbar). Führe diese persistierte query mit einer täglichen Automatisierungsaufgabe aus, um automatisch alle neuen Beiträge von der anderen Website zu importieren.

Die Variable $url erhält die URL des RSS-Feeds des WordPress-Beitragsarchivs. In der Regel entspricht das der URL des Beitragsarchivs + "/feed/rss/?withoutcomments=1". Beispiel:

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

Die Variable $timeDeltaInSeconds gibt an, ab wann ein Beitrag als neu gilt. Standardmäßig sind es 86400 Sekunden (d. h. ein Tag).

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