Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Transportverfahren

Übertragung per Restful API (https)

Objekt

Artikel im JSON und Bilder als strukturiertes Objekt im JSON, Artikel-ID als eindeutiges Merkmal (document ID)

Trigger

Zeitlich gesteuerter Poll durch PRINT NGEN (Pull alle 15 Sekunden, sofern vorhergehender Pull durchgeführt), Artikel-ID = eindeutiges Merkmal

Typische Drittsysteme

Livingdocs

Funktionalitäten der Living-Docs Livingdocs API

Inhaltsverzeichnis

Expand
titleInhaltsverzeichnis anzeigen
Table of Contents
maxLevel4

Austauschformat und Übertragung der Daten

Artikelname der Livingdocs-Artikel in PRINT NGEN

  • Artikelname des Hauptartikels (DTextName): “livingdocs-{Livingdocs-Document-ID}”
    z. B.: “livingdocs-123456”

  • Artikelname des Infoboxartikels (DTextName): “livingdocs-{Livingdocs-Document-ID}_infobox{Nummer}”
    z. B.: “livingdocs-123456_infobox1”

...

  • Dokument-Id 

  • Objekt/Ausgabe

  • Ressort

  • Ressortindex

  • Erscheinungstag

  • Formatname (Infoboxen erhalten immer den Formatnamen “Infobox”)

  • Kollektiv/Sonderthema

  • Teilseiten-Name

Folgende Inhaltsdaten der Livingdocs Artikel-Daten können in PRINT NGEN dargestellt werden:

...

  • Pixeldaten

  • Dateiname

  • Bildunterschrift (optional)

  • Quelle (optional)

  • Bildursprung (optional)

  • Ursprüngliche Bild-ID (optional)

Workflow

Durch entsprechend automatisierte Workflows können Artikel, die in Livingdocs publiziert werden, automatisiert in der PRINT NGEN Datenbank gespeichert werden. Diese Workflows greifen je Objekt.

...

Inzwischen ist ein Livingdocs-Button in der Default-Werkzeugleiste vorhanden, über den die Livingdocs-Artikel für zukünftige Erscheinungstage gefunden werden können.

...

Beispiel 1

Der manuelle Workflow zum Platzieren von nach PRINT NGEN importierten Livingdocs-Artikeln wird in folgendem Video gezeigt:

...

Beispiel 2

Der manuelle Workflow zum Platzieren von nach PRINT NGEN importierten Livingdocs-Artikeln wird in folgendem Video gezeigt:

...

Standard-Logik Artikel-Vorlagen

Die Standard-Logik zu den Artikel-Vorlagen, in denen die Livingdocs-Artikel einlaufen, ist in folgendem Video skizziert:

...

Standard-Logik Autor:innen-Übernahme

Die Standard-Logik zur Übernahme der Autorin bzw. des Autors von Livingdocs in den nach PRINT NGEN importierten Artikel wird in folgendem Video gezeigt:

...

Mitwirkungspflichten

Die Mitwirkungspflichten für diese Schnittstelle befinden sich hier: Mitwirkungspflichten: [0-17] INBOUND Living-Docs Livingdocs API | Artikel mit Bilder

Beispieldaten

PublicationEvent-JSON

Über den Endpunkt GET api/v1/publicationEvents/… ruft PRINT NGEN im Workflow alle 15 Sekunden die “PublicationEvents” eines Channels ab. Der Parameter “channel” muss nicht mitgegeben werden. Stattdessen wird ein Token mitgegeben, in dem der Channel bereits konfiguriert ist. 

...

Code Block
[
  {
    "id": 910,
    "createdAt": "2016-12-27T09:19:00.928Z",
    "projectId": 30,
    "channelId": 53,
    "documentId": 44,
    "documentType": “article",
    "contentType": "print",
    "eventType": "publish",
    "publicationId": 1066
  },
  {
     ...
  }
]

Artikel-JSON

Die DocumentIDs, die PRINT NGEN bei der Abfrage der Events erhalten hat, werden verwendet, um die Artikel-JSON abzufragen, z. B.:

...

Das JSON, das an PRINT NGEN zurück geliefert wird, enthält folgende Felder:

Metadaten:

Feld

Inhalt

Option

"id"

ID des Elements im Artikel

-

"component"

Element des Artikels, z. B.:

  • image → Bild

  • head oder header → Kopf

  • (lead-p → Vorspann)

  • p → Standard-Text

-

"content": { component: "image", “content”: { “image”: { "originalUrl" }}}

URL des Original-Bildes.

Wird standardmäßig zum Abholen des Bildes verwendet.

erforderlich

"content": { component: "image", “content”: { “image”: { "url" }}}

URL des platzierten Bildes.

Wenn das Bild aus “originalUrl” nicht gefunden wird, wird das Bild aus “url” abgeholt.

optional

"content": { component: "image", “content”: { “image”: { "origins": { "name" }}}}

Ursprung/Quelle des Bildes z. B. hugo.

Wird kein Ursprung übergeben wird standardmäßig BildUrsprung=Livingdocs gesetzt.

optional

Feld

Inhalt

Option

"projectId"

ID des Projektes

-

"channelId"

ID des Kanals

-

"documentId"

ID des Artikels

erforderlich

"contentType"

“print” bei Printartikeln

-

"documentType"

“article” bei Artikeln

-

"design": { "name" }

Name des Designs

-

"design": { "version" }

Versionsnummer des Designs

-

"metadata": { "title" }

Titel (siehe “Titel des Artikels” unten)

optional

"metadata": { "publish-date" oder: "publicationDate" }

Erscheinungstag im Format “2020-03-31”. Ein Erscheinungstag für alle übertragenen Ausgaben.

erforderlich, wenn der ET für alle Ausgaben gelten soll

"metadata": { "publications" oder: "publication": [{ "date" }]

Erscheinungstag im Format “2020-03-31”. Ein unterschiedlicher Erscheinungstag je übertragener Ausgabe (Alternative zu einem Erscheinungstag für alle übertragenen Ausgaben)

erforderlich, wenn je Ausgabe ein unterschiedlicher ET gelten soll

"metadata": { "publications" oder: "publication": [{ "object" }]

Objekt der Publikation

optional

"metadata": { "publications" oder: "publication": [{ "name" }]

Name der Publikation

-

"metadata": { "publications" oder: "publication": [{ "value" }]

Ausgabe der Publikation

erforderlich

"metadata": { "publications" oder: "publication": [{ "category" }]

Ressort der Publikation

erforderlich

"metadata": { "publications" oder: "publication": [{ "pageIndex" }]

Ressortindex der Publikation

optional

"metadata": { "publications" oder: "publication": [{ "printContentType" }]

Formatname (z. B. Aufmacher, Standard) (Infoboxen erhalten immer den Formatnamen “Infobox”)

optional

"metadata": { "publications" oder: "publication": [{"collective"}]

Kollektiv/Sonderthema der Publikation (Achtung:

Note

Der Wert darf nicht

die

folgende Sonderzeichen enthalten: *?<>&,%"'

! enthalten

!

)

optional

"metadata": { "print- categories-xxx" }

Print-Kategorie

-

"metadata": { "expire-date" }

Endzeitpunkt im Format 2020-04-02T14:10:00.000Z

-

Inhalt:

Die Inhalte aller "content"-Components werden als (X)HTML erwartet. Daher müssen diese fünf Sonderzeichen des (X)HTML Markups innerhalb der "content"-Components maskiert werden:

  • <&lt;

  • >&gt;

  • &&amp;

  • "&quot;

  • '&apos;

publications" oder: "publication": [{"partPageName"}]

Teilseiten-Name der Publikation

Note

Der Wert darf nicht folgende Sonderzeichen enthalten: *?<>&,%"'!

optional

"metadata": { "publications" oder: "publication": [{"authorPosition”}]

Autoren-Position, vorgesehene Werte:

  • AutorBereich

  • AutorAnfang

  • KuerzelAnfang

  • KuerzelEnde

  • OhneAutor

Weitere Infos unter: Mitwirkungspflichten: [0-17] Livingdocs API - Artikelvorlagen und Autor:innen

optional

"metadata": { "print- categories-xxx" }

Print-Kategorie

-

"metadata": { "expire-date" }

Endzeitpunkt im Format 2020-04-02T14:10:00.000Z

-

Inhalt:

Die Inhalte aller "content"-Components werden als (X)HTML erwartet. Daher müssen diese fünf Sonderzeichen des (X)HTML Markups innerhalb der "content"-Components maskiert werden:

  • <&lt;

  • >&gt;

  • &&amp;

  • "&quot;

  • '&apos;

Feld

Inhalt

Option

"id"

ID des Elements im Artikel

-

"component"

Element des Artikels, z. B.:

  • image → Bild

  • head oder header → Kopf

  • (lead-p → Vorspann)

  • p → Standard-Text

-

"content": { component: "image", “content”: { “image”: { "originalUrl" }}}

URL des Original-Bildes.

Wird standardmäßig zum Abholen des Bildes verwendet.

erforderlich

"content": { component: "image", “content”: { “image”: { "origins": { "identifier" }url" }}}

Bild-ID

Wird in die NGEN Bildeigenschaft DBildArchivID übernommenURL des platzierten Bildes.

Wenn das Bild aus “originalUrl” nicht gefunden wird, wird das Bild aus “url” abgeholt.

optional

"content": { component: "image", “content”: { “image”: { "croporigins": { "xname" }}}}

X-Koordinate des Ausschnitts von links oben

-Ursprung/Quelle des Bildes z. B. hugo.

Wird kein Ursprung übergeben wird standardmäßig BildUrsprung=Livingdocs gesetzt.

optional

"content": { component: "image", “content”: { “image”: { "croporigins": { "yidentifier" }}}}

Y-Koordinate des Bild-ID

Wird in die NGEN Bildeigenschaft DBildArchivID übernommen.


optional

"content": { component: "image", “content”: { “image”: { "crop": { "x" }}}}

X-Koordinate des Ausschnitts von links oben

-

"content": { component: "image", “content”: { “image”: { "crop": { "widthy" }}}}

Breite des Ausschnitts in Pixel relativ zur Pixelgröße des Originalbildes aus der originalUrl

optionalY-Koordinate des Ausschnitts von links oben

-

"content": { component: "image", “content”: { “image”: { "crop": { "heightwidth" }}}}

Höhe Breite des Ausschnitts in Pixel relativ zur Pixelgröße des Originalbildes aus der originalUrl

optional

"content": { component: "image", “content”: { “image”: { "crop": { "height" }}}}

Höhe des Ausschnitts in Pixel relativ zur Pixelgröße des Originalbildes aus der originalUrl

optional

"content": { component: "image", “content”: { "caption" }}

Bildunterschrift

optional

"content": { component: "image", “content”: { "source" }}

Bildquelle

"labelSource" "source" werden in das Bildquelle-Tag der BU übernommen (in dieser Reihenfolge mit Leerzeichen getrennt)

optional

"content": { component: "image", “content”: { "labelSource" }}

Quellverweis

"labelSource" "source" werden in das Bildquelle-Tag der BU übernommen (in dieser Reihenfolge mit Leerzeichen getrennt)

optional

"content": { component: "head" oder: "header", content: { "catchline" }}

Dachzeile des Artikels

optional

"content": { component: "head" oder: "header", content: { "title" }}

Titel des Artikels

erforderlich

"content": { component: "head" oder: "header", content: { "lead" }}

Unterzeile des Artikels

optional

"content": { component: "head" oder: "header", content: { "author" }}

Autor:in des Artikels

optional

"content": { component: "head" oder: "header", content: { "authorShortnames" }}

Autor:innenkürzel

optional

"content": { component: "head" oder: "header", content: { "city" }}

Ortsmarke im Text des Artikels

optional

"content": { component: "lead-p", content: { "text" }}

Vorspann des Artikels

optional

"content": { component: "lead-p", content: { "opener" }}

Ortsmarkte im Vorspann des Artikels

optional

"position"

z. B. fixed

-

"content": { component: "p", content: { "text" }}

Absatz eines Artikels

optional

"content": { component: “subtitle”, “content“: { “title“ }}

Zwischentitel im Artikel

optional

"content": { component: “list”, “containers”: { “list” }}

Liste im Artikel

optional

"content": { component: “list” , “containers”: { “list”: [{ “component”: “list-item”, “content”: { “text” }}]}}

Listenelement

optional

"content": { component: “quote” , “content”: { “text” }}

Zitat im Artikel

optional

"content": { component: “quote” , “content”: { “source” }}

Autor:in/Quelle des Zitats

optional

"content": { component: "question" , "content": { "text" }}

Frage

optional

"content": { component: "answer" , "content": { "text" }}

Antwort

optional

"content": {"component": "infobox","content": {

"title": "",

"text": "",

"image": {}

"caption": "",

"source": ""

}}

Infobox im Artikel (in PRINT NGEN als eigenständiger Artikel) mit oder ohne Bild.

Im Text sind Auszeichnungen (strong, em, p) möglich. Weitere Components (list, quote, question, answer) dürfen im Text nicht übergeben werden.

Für Infoboxbilder können die gleichen Felder übergeben werden wie bei den Artikelbildern.

optional

...

Code Block
{
    "systemdata": {
        "projectId": 16,
        "channelId": 16,
        "documentId": 44,
        "contentType": "print",
        "documentType": "article",
        "design": {
            "name": "berliner-zeitung",
            "version": "0.0.100"
        }
    },
    "metadata": {
        "title": "Title",
        "publications": [{
          "object": "BZ",
          "name": "Berliner Zeitung",
          "value": "Berliner Zeitung",
          "category": "Berlin",
          "printContentType": "Standard",
          "pageIndex": "1",
          "authorPosition": "AutorBereich"
        },
        { "object": "BK",
          "name": "Berliner Kurier",
          "value": "Berliner Kurier",
          "category": "Berlin",
          "printContentType": "Aufmacher",
          "pageIndex": "3",
          "collective": "Sonderthema XYZ",
          }
"authorPosition": "AutorAnfang"
       ],
  }
        ],
        "publish-date": "2020-03-17T10:35:00.000Z",
        "expire-date": "2020-04-30T09:35:00.000Z"
    },
    "livingdoc": {
        "content": 

            {
                "id": "doc-1e3k0qt0h0",
                "component": "head",
                "content": {
                    "catchline": "Catchline",
                    "title": "Title",
                    "lead": "Lead",
                    "author": "Lukas Peyer",
                    "authorShortnames": "LP"
                },
                "position": "fixed"
            },
            {
                "id": "doc-1e3k0qt0i0",
                "component": "lead-p",
                "content": {
                    "opener": "Lead Paragraph",
                    "text": "Text"
                }
            },
            {
                "id": "doc-1e3k0qt0i1",
                "component": "p",
                "content": {
                    "text": "Text"
                }
            },
            {
                "id": "doc-1e3k0ts9b0",
                "component": "image",
                "content": {
                    "image": {
                        "originalUrl": "http://livingdocs-images-dev.s3.amazonaws.com/2020/1/28/6c0b3ce3-0289-44da-9610-91f1d9773419.jpeg",
                        "url": "https://livingdocs-dev.imgix.net/2020/1/28/6c0b3ce3-0289-44da-9610-91f1d9773419.jpeg?rect=0%2C20%2C1200%2C675&auto=format",
                        "width": 1200,
                        "height": 714,
                        "mimeType": "image/jpeg",
                        "imageService": "imgix",
                        "crop": {
                            "x": 0,
                            "y": 20,
                            "width": 1200,
                            "height": 675,
                            "name": "16:9"
                        }
                        "origins": [
                            {
                                "name": "archiv A",
                                "identifier": "abc-123"
                            }]
                    },
                    "caption": "Image Caption",
                    "labelSource": "Source",
                    "source": "Agency"
                }
            },
            {
                "id": "doc-1e3k0sng70",
                "component": "quote",
                "content": {
                    "text": "Quote",
                    "source": "Quote Author"
                }
            },
            {
                "component": "question",
                "id": "doc-1e3k0sng70",
                "content": {
                    "text": "Frage Inhalt."
                }
            },
            {
                "component": "answer",
                "id": "doc-1e3k0sng70",
                "content": {
                    "text": "Antwort Inhalt."
                }
            },
            {
                "id": "doc-1e3k0sveu0",
                "component": "subtitle",
                "content": {
                    "title": "Subtitle"
                }
            },
            {
                "id": "doc-1e3k0s91s0",
                "component": "list",
                "content": {
                    "title": "List Title"
                },
                "containers": {
                    "list": [
                        {
                            "id": "doc-1e3k0sacb0",
                            "component": "list-item",
                            "content": {
                                "text": "Item 1"
                            }
                        },
                        {
                            "id": "doc-1e3k0sgrn0",
                            "component": "list-item",
                            "content": {
                                "text": "Item 2"
                            }
                        }
                    ]
                }
            }
        ],
        "design": {
            "name": "berliner-zeitung",
            "version": "0.0.100"
        },
        "layout": "print"
    }
}

Fehlerbehandlung

HTTP-Fehler

Wird ein HTTP-Fehler “404 NOT FOUND” zurückgeliefert, wird dieser Artikel übersprungen.

Wird ein anderer HTTP-Fehler (z.B. “500 Internal Server Error“) zurückgeliefert, versucht PRINT NGEN erneut, den Artikel abzurufen, bis er importiert werden kann. Diese Fehlercodes sollten nämlich nur kommen, wenn der Service kurzfristig nicht erreichbar ist (z.B. Neustart/Wartung). Daher werden diese Artikel nicht übersprungen, sondern dann importiert, wenn der Server wieder erreichbar ist.

Inhaltliche Fehler

Bei inhaltlichen/syntaktischen Fehlern im Artikel-JSON, ist das XML nicht gültig und kann damit nicht verarbeitet werden. Das XSLT zum Umwandeln der Bereiche und Tags kann nicht ablaufen und der Artikel kann somit nicht importiert werden. Es wird ein Fehlerartikel in NGEN angelegt, der mit der gleichen Namenskonvention “livingdocs-{Livingdocs-Document-ID}” gefunden werden kann. In dem Fehlerartikel steht die Ursache, weshalb der Import fehlgeschlagen hat, z.B.

"Fehler bei der Verarbeitung des Inhalts: Fehler beim Ausführen des Xslt 'Default#Master.Livingdocs':'„' is an unexpected token. The expected token is '"' or '''. Line 1, position 1496."

FAQ

Expand
titleWarum kommen Livingdocs-Artikel trotz Erfolgsmeldung (Status 200) nicht in PRINT NGEN an?

Sind bestimmte Livingdocs-Artikel in PRINT NGEN nicht auffindbar, so kann z. B. ein Syntax-Fehler im JSON des Artikels vorliegen, der dazu führt, dass die Artikel nicht nach PRINT NGEN importiert werden können. In diesem Fall wird ein Fehlerartikel in PRINT NGEN erstellt, der mit der gleichen Namenskonvention “livingdocs-{Livingdocs-Document-ID}” gefunden werden kann. In dem Fehlerartikel steht die Ursache, weshalb der Import fehlgeschlagen hat, z.B.

"Fehler bei der Verarbeitung des Inhalts: Fehler beim Ausführen des Xslt 'Default#Master.Livingdocs':'„' is an unexpected token. The expected token is '"' or '''. Line 1, position 1496."

Eine mögliche Ursache kann sein, dass Links mit deutschen Anführungszeichen (unten und oben) übergeben werden. Diese müssen jedoch mit
Status
title"
oder
Status
title'
übergeben werden. Nur so ist das übertragene XML gültig und Links (“<a href>“) können richtigerweise ignoriert bzw. herausgefiltert werden.

Der Syntax-Fehler muss Livingdocs-seitig korrigiert werden. In diesem Beispiel kann der Artikel als kurzfristiger Workaround ohne Link nach PRINT NGEN übergeben werden.

Nähere Informationen dazu, welche Textformate übernommen werden, finden Sie auch unter https://peiq.atlassian.net/wiki/spaces/PPSD/pages/1164935187/Produkt+bergreifender+Standard+Tags+Makros+Bereiche+f+r+XSLT+Stylesheets#Auszeichnungen-(Textformate).
.0.100"
        },
        "layout": "print"
    }
}

Verwandte Seiten

Filter by label (Content by label)
showLabelsfalse
maxCheckboxfalse
showSpacefalse
reversefalse
cqllabel = in ( "inbound" , "livingdocs" , "ngen" , "schnittstellen-ngen" ) and space = "PPSD"
Include Page
Disclaimer der PEIQ PRINT NGEN - Produktdokumentation
Disclaimer der PEIQ PRINT NGEN - Produktdokumentation

Nur für PEIQ Mitarbeiter:innen: [0-17] INBOUND Living-Docs API | Artikel mit Bilder

/wiki/spaces/CORE/pages/811925833