View a markdown version of this page

Beispiel 3: Kontextuelle Metadaten - AWS Elemental MediaTailor

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Beispiel 3: Kontextuelle Metadaten

Dieser Abschnitt enthält JSONata Ausdrücke für gängige Muster bei der Arbeit mit Antworten auf Elementare Inferenz. GetMetadata Verwenden Sie diese im Output Block Ihrer AWS_SERVICE_REQUEST Funktion.

Anmerkung

GetMetadatagibt ein items Array zurück, in dem jedes Element eine analysierte Aufnahme mit IAB Taxonomiekategorien und Bewertungen zur GARM Markensicherheit darstellt. Wenn sich Ihr Abfragezeitfenster über mehrere Shots erstreckt, umfasst die Antwort mehrere Elemente. Die Ausdrücke in den folgenden Abschnitten behandeln dies, indem sie alle Shots aggregieren.

Das vollständige Elemental GetMetadata Inference-Antwortschema finden Sie in der Elemental Inference API-Referenz.

Erstellen Sie das Zeitfenster für die Abfrage

Verwenden Sie den folgenden Ausdruck für das Body Feld Ihrer AWS_SERVICE_REQUEST Funktion:

{%'{"outputName": "my-contextual-output", "timeSpecification": {"ptsBased": {"startPts": ' & $string(($exists(inference.previousBreakEndPts) and inference.previousBreakEndPts > inference.pts - 30 * inference.timescale ? inference.previousBreakEndPts : inference.pts - 30 * inference.timescale)) & ', "endPts": ' & $string(inference.pts + 1) & ', "timescale": ' & $string(inference.timescale) & '}}, "parameters": {"contextualMetadata": {}}}' %}

Dieser Ausdruck wählt das aktuellere von inference.previousBreakEndPts und ein 30-Sekunden-Lookback aus, wodurch sichergestellt wird, dass das Abfragefenster nie länger als 30 Sekunden ist. Wenn nicht verfügbar inference.previousBreakEndPts ist (z. B. der erste Werbeblock), verwendet der Ausdruck standardmäßig den 30-Sekunden-Lookback.

Anmerkung

my-contextual-outputErsetzen Sie ihn durch den Namen der kontextbezogenen Metadatenausgabe Ihres Elemental Inference-Feeds.

Extrahieren IAB Kategorie-IDs

{%response.statusCode = 200 ? $join($distinct(response.body.items.metadata.contextualMetadata.iabTaxonomy.categories.uniqueId), ',') : ''%}

Ergebnis: "641,645,324" — Eindeutige IDs der IAB Inhaltstaxonomie, die für die Übergabe als Abfrageparameter geeignet sind (z. B.iab_cats=641,645,324).

Extrahieren IAB Pfade der Kategorie

{%response.statusCode = 200 ? $join($distinct(response.body.items.metadata.contextualMetadata.iabTaxonomy.categories.($join(path, ' > '))), '|') : ''%}

Ergebnis: "Genres > Animation & Anime|Genres > Family/Children|Entertainment > Movies" — Für Menschen lesbare Taxonomiepfade.

Der Extrakt ist markiert GRAMM categories

{%response.statusCode = 200 ? $join($distinct(response.body.items.metadata.contextualMetadata.garm.suitability.categories[flagged = true].category), ',') : ''%}

Ergebnis: "ILLEGAL_DRUGS_TOBACCO_ALCOHOL" — Kategorien, die Sie von der Anzeigenausrichtung ausschließen oder um Ihrem Anzeigenentscheidungsserver Bedenken hinsichtlich der Markensicherheit mitzuteilen.

Ermitteln Sie die höchste GRAMM Risikoniveau

{%response.statusCode = 200 and $exists(response.body.items) ? ($names := ['NONE','LOW','MEDIUM','HIGH']; $flagged := response.body.items.metadata.contextualMetadata.garm.suitability.categories[flagged = true].risk; $scores := $map($flagged, function($r){ $r = 'HIGH' ? 3 : $r = 'MEDIUM' ? 2 : $r = 'LOW' ? 1 : 0 }); $count($scores) > 0 ? $names[$max($scores)] : 'NONE') : ''%}

Ergebnis: "MEDIUM" — das Worst-Case-Risikoniveau für alle analysierten Schüsse und GARM Kategorien. Gibt eine leere Zeichenfolge zurück, wenn die Anfrage fehlschlägt oder der Antworttext fehlt, sodass fehlende Daten nicht als gemeldet werden. NONE

Überprüfen Sie die Markensicherheit

{%response.statusCode = 200 and $exists(response.body.items) ? $string($not($exists(response.body.items.metadata.contextualMetadata.garm.suitability.categories[flagged = true]))) : ''%}

Ergebnis: "false" ob eine GARM Kategorie gekennzeichnet ist und "true" ob der Inhalt markensicher ist. Gibt eine leere Zeichenfolge zurück, wenn die Anfrage fehlschlägt oder der Antworttext fehlt.

Wichtig

Die $exists(response.body.items) Wache ist erforderlich. Eine Antwort kann den Statuscode 200 zurückgeben, solange er response.body ist null — zum Beispiel, wenn der Text 20.000 Zeichen überschreitet oder kein gültiges JSON-Format ist. Ohne den Schutz gibt der Ausdruck den Inhalt zurück "true" und meldet ihn als markensicher, obwohl die GARM Klassifizierungen nie eingegangen sind.

Kombiniertes kontextuelles Signal

{%response.statusCode = 200 ? $string({'categories': $distinct(response.body.items.metadata.contextualMetadata.iabTaxonomy.categories.($join(path, ' > '))), 'category_ids': $distinct(response.body.items.metadata.contextualMetadata.iabTaxonomy.categories.uniqueId), 'garm_flagged': $distinct(response.body.items.metadata.contextualMetadata.garm.suitability.categories[flagged = true].category)}) : ''%}

Ergebnis: Eine JSON-Zeichenfolge, die alle kontextuellen Signale zu einer einzigen strukturierten Nutzlast kombiniert.

Per-shot Detail

{%response.statusCode = 200 ? $string(response.body.items.{'pts': pts, 'categories': metadata.contextualMetadata.iabTaxonomy.categories.($join(path, ' > ')), 'garm_flagged': metadata.contextualMetadata.garm.suitability.categories[flagged = true].category}) : ''%}

Ergebnis: Eine Reihe von Objekten pro Aufnahme, die beibehält, welcher Inhalt bei welchem PTS welche Klassifizierungen ausgelöst hat. Verwenden Sie diese Option, wenn Ihre Anzeigenentscheidungslogik eine zeitliche Granularität erfordert.

Tipps und bewährte Methoden

Beachten Sie die folgenden Tipps, wenn Sie Ausgabeausdrücke für Antworten auf Elementare Inferenz erstellen.

  • Überprüfen Sie dies immer, response.statusCode bevor Sie den Körper bearbeiten. Wenn der Anruf fehlschlägt, response.body istnull.

  • Wird verwendet$distinct(), um Kategorien über mehrere Shots hinweg zu deduplizieren.

  • Elemental Inference gibt mehrere IAB Kategorien pro Aufnahme und eine Reihe von GARM Markensicherheitskategorien zurück. Aktuelle Grenzwerte finden Sie in der Elemental Inference-Dokumentation.

  • Wenn sich das Zeitfenster über mehrere Shots erstreckt, enthält die Antwort mehrere Elemente im Array. items

  • Die maximale Größe der Antwort beträgt 20.000 Zeichen. Wenn Sie verkürzte Antworten erhalten, reduzieren Sie das Zeitfenster.

  • Verwenden Sie temp.* AusgabeschlüsselSEQUENTIAL_EXECUTOR, wenn Sie eine Verknüpfung mit anderen Funktionen in einer Funktion herstellen und player_params.* Werte direkt an die URL des Anzeigenentscheidungsservers übergeben.

  • Eine vollständige Liste der unterstützten JSONata Funktionen und Operatoren finden Sie unterJ Sonate Ausdrucksreferenz für Funktionen.

Die vollständige Installationsanleitung einschließlich der Voraussetzungen und Ressourcenrichtlinien finden Sie unterIntegration von Elemental Inference. Die Referenz zum Funktionstyp finden Sie unterAWS Serviceanfrage.