/
[0-17] INBOUND Schnittstelle zu Livingdocs API | Artikel mit Bilder

PEIQ Knowledge Base

[0-17] INBOUND Schnittstelle zu Livingdocs API | Artikel mit Bilder

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 Livingdocs API

  • Die Schnittstelle dient zum Import von Artikeln und Bildern aus einem Web-CMS/Editor nach PRINT NGEN

  • Die Artikel sind dann in einem Eingangskorb in PRINT NGEN verfügbar

  • PRINT NGEN pullt in regelmäßigen Abständen die Livingdocs API, gemäß Publication Events - Reference & Content - Reference (Version Mai 2020)

  • In der Basis-Version werden folgende Werte importiert und sofern Artikel-Templates diese unterstützen, entsprechend gemappt

Inhaltsverzeichnis

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”

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

  • Dokument-Id 

  • Objekt/Ausgabe

  • Ressort

  • Ressortindex

  • Erscheinungstag

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

  • Formatname-Unterkategorie

  • Kollektiv/Sonderthema

  • Teilseiten-Name

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

  • Titel

  • Dachzeile (optional)

  • Unterzeile (optional)

  • Vorspann (optional)

  • Absätze

  • Zwischenüberschriften (optional)

  • Autor:in (optional)

  • Autor:innenkürzel (optional)

  • Ort (optional)

  • Zitat (optional)

  • Zitatautor:in (optional)

  • Frage (optional)

  • Antwort (optional)

  • Zuordnungen der Bilder (optional)

  • Listen (optional)

  • Infoboxen mit/ohne Bilder (laufen in PRINT NGEN als eigenständige Artikel ein) (optional)

Folgende Metadaten der Livingdocs Bilder-Daten können in PRINT NGEN dargestellt werden:

  • Pixeldaten

  • Bildausschnitt (optional)

  • Dateiname

  • Bildunterschrift (optional)

  • Quelle (optional)

  • Bildursprung (optional)

  • Ursprüngliche Bild-ID (optional)

Workflow

Artikel

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.

Wird ein Artikel in Livingdocs für mehrere Ausgaben publiziert, so wird für jede übertragene Ausgabe in PRINT NGEN ein eigener Artikel erstellt.

Bereits in PRINT NGEN erstellte Livingdocs-Artikel werden nicht im klassischen Sinne aktualisiert. Wird jedoch ein Livingdocs-Artikel im ersten Schritt mit der Ausgabe A publiziert (d. h. hier wird in PRINT NGEN ein Artikel zur Ausgabe A erstellt), anschließend in Livingdocs nachbearbeitet, die Ausgabe B hinzugefügt und erneut publiziert, wird in PRINT NGEN ein zweiter Artikel zur Ausgabe B mit den aktuellen Artikelinhalten aus Livingdocs erstellt. Der Artikel A wird beim zweiten Publizieren nicht aktualisiert, sondern bleibt in PRINT NGEN mit dem Stand vom ersten Publizieren bestehen.

Das Gleiche gilt auch, wenn die Ausgabe in Livingdocs geändert wird. D. h. wird ein Livingdocs-Artikel mit der Ausgabe A publiziert, anschließend die Ausgabe in Livingdocs zur Ausgabe B geändert und erneut publiziert, bleibt der Artikel in PRINT NGEN zur Ausgabe A wie bisher bestehen. Beim zweiten Publizieren wird in PRINT NGEN ein Artikel zur Ausgabe B erstellt.

Bilder in Artikel

Enthält ein Livingdocs-Artikel Bilder, dann werden diese nach PRINT NGEN importiert und an den Artikel gehängt. Das erste Bild des Livingdocs-Artikels wird als Produktionskopie in den Bildbereich des NGEN-Artikels platziert. Für den Import der Bilder wird standardmäßig der Pfad “originalUrl” aus dem Artikel-JSON verwendet. Wenn das Bild aus “originalUrl” nicht gefunden wird, wird das Bild aus “url” abgeholt.

Optional kann ein Bildausschnitt als relatives Rechteck in 1/10.000 Einheiten (“height” ist 10.000 bei einem Ausschnitt über die volle Höhe des Bildes, “width” ist 10.000 bei einem Ausschnitt über die volle Breite des Bildes) mit übergeben werden, welcher in PRINT NGEN als Softcrop am Bild gesetzt wird. Der Bildausschnitt wird nur übernommen, wenn das Bild aus dem Pfad “originalUrl” importiert wurde.

Der Bildbereich des initial angelegten Artikels wird nicht automatisch an den übertragenen Bildausschnitt angepasst. Die übertragene Ausschnittsinformation kann bei Weiterverarbeitung des Artikels (z. B. Schütteln mit ASSIST, manuelles Layouten) verwendet werden. Der Ausschnitt an der Produktionskopie des Bildes kann manuell verändert werden, wodurch die übertragene Ausschnittsinformation überschrieben wird. Diese liegt damit nur noch am Originalbild vor.

Bei Übertragung eines invaliden Bildausschnitts (z. B. negative Werte oder Werte über 10.000) wird kein Bildausschnitt gesetzt.

Das Erstellen und Publizieren eines Livingdocs-Artikels ist in nachfolgenden Videos beispielhaft skizziert (die gezeigten Metadaten beschränken sich im Video überwiegend auf die Pflichtfelder):

Das manuelle Absetzen der Suche nach Livingdocs-Artikeln ist in folgendem Video skizziert:

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

Das Token wird im HTTP Header als Standard "Authorization: Bearer …” mitgegeben.

Dem “PublicationEvents” gibt PRINT NGEN den “id.gt”-Parameter zur Selektion der Events anhand der Event-“id” mit. Dieser Wert ist am Anfang “0” (oder ein eingerichteter Standard) und wird in PRINT NGEN anhand der maximalen “id” in der Antwort gemerkt, um beim nächsten Call wieder danach aufzusetzen, z. B.:

GET api/v1/publicationEvents?id.gt=[event.id]

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

Metadaten:

Feld

Inhalt

Option

"id"

ID des PublicationEvent

erforderlich

"createdAt"

Erstellungszeitpunkt

-

"projectId"

ID des Projektes

-

"channelId"

ID des Channels

-

"documentId"

ID des Artikels (erforderlich zum Abrufen des Artikel-JSON, vgl. 3.2)

erforderlich

"documentType"

“article” bei Artikeln

-

"contentType"

“print” bei Printartikeln

erforderlich

"eventType"

“publish” bei Printartikeln die zur Veröffentlichung in Print übertragen werden

-

"publicationId"

ID der Publikation

-

Als Ergebnis erhält PRINT NGEN ein Array von Events, z. B.:

[ {     "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.:

GET v1/print/document?documentId=44

Beim Import nach PRINT NGEN wird das JSON in ein XML umgewandelt. Danach läuft ein XSLT-Stylesheet, das die übergebenen Inhalte in die entsprechenden Bereiche und Tags umwandelt (siehe Produktübergreifender Standard: Tags/Makros/Bereiche für XSLT Stylesheets).

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

Metadaten unter "systemdata": { } & "metadata": { }:

Feld

Inhalt

NGEN Eigenschaft

Option

"systemdata": { "documentId" }

ID des Artikels

DExterneId &

Teil von DTextName

erforderlich

"systemdata": { "contentType" }

“print” bei Printartikeln

 

-

"systemdata": { "documentType" }

“article” bei Artikeln

 

-

"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.

DTextErschAm

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)

DTextErschAm

erforderlich, wenn je Ausgabe ein unterschiedlicher ET gelten soll

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

Objekt der Publikation

DTextObjekt

optional

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

Name der Publikation

 

-

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

Ausgabe der Publikation

DTextAusgabe

erforderlich

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

Ressort der Publikation

DTextRessort

erforderlich

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

Ressortindex der Publikation

DTextGeplSeite

optional;

für Assist

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

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

DTextFormatName

optional;

für Assist

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

Formatname-Unterkategorie (z. B. Interview) (Infoboxen erhalten keine Unterkategorie, sondern nur “Infobox”)

Die Unterkategorie wird mit “#” an den Formatnamen (DTextFormatName) angehängt

optional;

für Assist

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

Kollektiv/Sonderthema der Publikation

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

DTextKollektiv

optional;

für Assist

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

Teilseiten-Name der Publikation

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

TeilseitenName

optional;

für Assist

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

Status. Vorgesehene Werte:

  • “Erfassung” für in Bearbeitung befindliche Artikel

  • “Fertig” für fertige Artikel. Wird in PRINT NGEN ein Artikel manuell auf “Fertig” gestuft, erfolgt ein Preflight-Check. Wird ein Artikel direkt im Status "Fertig" übertragen, findet in PRINT NGEN für diesen Artikel kein Preflight-Check und keine Rechtschreibprüfung mehr statt. Die Rechtschreibprüfung muss entsprechend schon im Drittsystem erfolgen.

Status

optional;

für Assist;

Ohne Status wird standardmäßig “Status=Erfassung” gesetzt.

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

Geplanter Umfang für unfertige Artikel. Angabe in T-Shirt-Größen in Großbuchstaben: XS, S, M, L, XL XXL

DTextErwarteterUmfang

optional;

für Assist;

Wird erwartet, wenn “status”: “Erfassung” übertragen wurde.

"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": { "expire-date" }

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

 

-

Inhalt unter "livingdoc": { "content": [] } bzw. "articlecontent": {"content": [] }

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

"component"

Element des Artikels, z. B.:

  • image → Bild

  • head oder header → Kopf

  • lead-p → Vorspann

  • p → Standard-Text

-

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

Dachzeile des Artikels

optional

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

Titel des Artikels

erforderlich

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

Unterzeile des Artikels

optional

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

Autor:in des Artikels

optional

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

Autor:innenkürzel

optional

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

Ortsmarke im Text des Artikels

optional

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

Vorspann des Artikels

optional

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

Ortsmarkte im Vorspann des Artikels

optional

"position"

z. B. fixed

-

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

Absatz eines Artikels

optional

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

Zwischentitel im Artikel

optional

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

Liste im Artikel

optional

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

Listenelement

optional

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

Zitat im Artikel

optional

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

Autor:in/Quelle des Zitats

optional

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

Frage

optional

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

Antwort

optional

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

Bilder im Inhalt unter "livingdoc": { "content": [{component:"image"}] } bzw. "articlecontent": {"content": [{component:"image"}] }

Feld

Inhalt

NGEN Eigenschaft

Option

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

URL des Original-Bildes.

Wird standardmäßig zum Abholen des Bildes verwendet.

 

erforderlich

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

URL des platzierten Bildes.

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

 

optional

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

Ursprung/Quelle des Bildes z. B. hugo.

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

BildUrsprung

optional

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

Bild-ID

DBildArchivID

optional

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

X-Koordinate des Ausschnitts von links oben in 1/10000 Einheiten

Teil von BildAusschnitt

optional

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

Y-Koordinate des Ausschnitts von links oben in 1/10000 Einheiten

Teil von BildAusschnitt

optional

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

Breite des Ausschnitts in 1/10000 Einheiten relativ zur Gesamtbreite des Bildes

Teil von BildAusschnitt

optional

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

Höhe des Ausschnitts in 1/10000 Einheiten relativ zur Gesamthöhe des Bildes

Teil von BildAusschnitt

optional

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

Der übertragene oder volle Bildausschnitt ist fix. Wenn die Proportionen beim Platzieren durch Assist nicht eingehalten werden können, soll gelten:

  • “MinimalVerzerren” (minimales Verzerren gemäß Rasterung des Bildes erlaubt)

  • “Weissraum” (Freiraum im Bildbereich wird weiß ausgefüllt)

DBildAusschnittFest

optional;

für Assist;

Ohne Übertragung von “keepCrop” darf der Bildausschnitt durch Assist verändert werden.

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

Bildunterschrift

Text/BU

optional

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

Quellverweis

 

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

optional

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

Bildquelle

 

optional

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

BildTyp

DBildTyp

optional;

für Assist

Die Schnittstelle liefert an PRINT NGEN die Artikel-JSONs zurück, z. B.:

{     "systemdata": {         "documentId": 44,         "contentType": "print",         "documentType": "article",     },     "metadata": {         "title": "Title",         "publications": [{ "object": "ta",           "name": "tageszeitung",           "value": "ta-ma", "category": "pol", "printContentType": "Standard", "printContentSubtype": "Interview",           "pageIndex": "1", "status": "Erfassung", "plannedSize": "M", "authorPosition": "AutorBereich"         }, { "object": "ta", "name": "Tageszeitung",           "value": "ta-dah",           "category": "pol", "printContentType": "Aufmacher", "printContentSubtype": "",           "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":             {                 "component": "head",                 "content": {                     "catchline": "Catchline",                     "title": "Title",                     "lead": "Lead",                     "author": "Max Mustermann", "authorShortnames": "MM"                 }             },             {                 "component": "lead-p",                 "content": {                     "opener": "München",                     "text": "Text"                 }             },             {                 "component": "p",                 "content": {                     "text": "Text"                 }             },             {                 "component": "image",                 "content": {                     "image": {                         "originalUrl": "https:\\meine.bilder.de\bilder_extern\\aakjshdkjasfhkjahdkj.jpg",                         "url": "https:\\meine.bilder.de\bilder_extern\\aakjshdkjasfhkjahdkj.jpg?rect=0%2C20%2C1200%2C675&auto=format",                         "keepCrop": "Weissraum", "crop": {                             "x": 2000,                             "y": 2000,                             "width": 7000,                             "height": 5000                         } "origins": [ { "name": "archiv A", "identifier": "abc-123" }]                     },                     "caption": "Image Caption",                     "labelSource": "Source",                     "source": "Agency", "type": "Hauptbild"                 }             },             {                 "component": "quote",                 "content": {                     "text": "Quote",                     "source": "Quote Author"                 }             }, { "component": "question", "content": { "text": "Frage Inhalt." } }, { "component": "answer", "content": { "text": "Antwort Inhalt." } },             {                 "component": "subtitle",                 "content": {                     "title": "Subtitle"                 }             },             {                 "component": "list",                 "content": {                     "title": "List Title"                 },                 "containers": {                     "list": [                         {                             "component": "list-item",                             "content": {                                 "text": "Item 1"                             }                         },                         {                             "component": "list-item",                             "content": {                                 "text": "Item 2"                             }                         }                     ]                 }             }         ]     } }

Verwandte Seiten

Nur für PEIQ Mitarbeiter:innen:

https://peiq.atlassian.net/wiki/spaces/CORE/pages/811925833