翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
例 3: コンテキストメタデータ
このセクションでは、Elemental Inference GetMetadataレスポンスを使用する際の一般的なパターンのJSONata式について説明します。AWS_SERVICE_REQUEST 関数の Outputブロックでこれらを使用します。
注記
GetMetadata は、各項目がIAB分類カテゴリとGARMブランド安全評価を含む分析済みショットを表すitems配列を返します。クエリ時間枠が複数のショットにまたがる場合、レスポンスには複数の項目が含まれます。以下のセクションの式は、すべてのショットを集約することでこれを処理します。
完全な Elemental Inference GetMetadataレスポンススキーマについては、Elemental Inference API リファレンスを参照してください。
クエリ時間枠を構築する
AWS_SERVICE_REQUEST 関数の Bodyフィールドに次の式を使用します。
{%'{"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": {}}}' %}
この式は、最新の inference.previousBreakEndPtsと 30 秒のルックバックを選択し、クエリウィンドウが 30 秒を超えないようにします。inference.previousBreakEndPts が使用できない場合 (最初の広告時間枠など)、式はデフォルトで 30 秒のルックバックになります。
注記
を Elemental Inference フィードのコンテキストメタデータ出力の名前my-contextual-outputに置き換えます。
IAB カテゴリ IDs抽出する
{%response.statusCode = 200 ? $join($distinct(response.body.items.metadata.contextualMetadata.iabTaxonomy.categories.uniqueId), ',') : ''%}
結果: "641,645,324" — IAB Content Taxonomy IDs。クエリパラメータとして渡すのに適しています (例: iab_cats=641,645,324)。
IAB カテゴリパスの抽出
{%response.statusCode = 200 ? $join($distinct(response.body.items.metadata.contextualMetadata.iabTaxonomy.categories.($join(path, ' > '))), '|') : ''%}
結果: "Genres > Animation & Anime|Genres > Family/Children|Entertainment > Movies" — 人間が読める分類パス。
フラグ付きGARMカテゴリを抽出する
{%response.statusCode = 200 ? $join($distinct(response.body.items.metadata.contextualMetadata.garm.suitability.categories[flagged = true].category), ',') : ''%}
結果: "ILLEGAL_DRUGS_TOBACCO_ALCOHOL" — 広告ターゲティングから除外するカテゴリ、またはブランドの安全性に関する懸念を広告決定サーバーに通知するカテゴリ。
最高GARMリスクレベルを決定する
{%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') : ''%}
結果: "MEDIUM" — 分析されたすべてのショットとGARMカテゴリにおける最悪の場合のリスクレベル。リクエストが失敗するか、レスポンス本文が欠落している場合、空の文字列を返します。これにより、欠落データは として報告されませんNONE。
ブランドの安全性を確認する
{%response.statusCode = 200 and $exists(response.body.items) ? $string($not($exists(response.body.items.metadata.contextualMetadata.garm.suitability.categories[flagged = true]))) : ''%}
結果: "false" いずれかのGARMカテゴリにフラグが付けられている場合、コンテンツがブランドセーフ"true"である場合。リクエストが失敗するか、レスポンス本文がない場合、空の文字列を返します。
重要
$exists(response.body.items) ガードは必須です。レスポンスは、本文response.bodyが 20,000 null 文字を超える場合や有効な JSON でない場合など、 が である間にステータスコード 200 を返すことができます。ガードがないと、GARM分類が受信されなかった場合でも、式はコンテンツをブランドセーフとして返"true"して報告します。
複合コンテキストシグナル
{%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)}) : ''%}
結果: すべてのコンテキストシグナルを単一の構造化ペイロードに結合する JSON 文字列。
ショットごとの詳細
{%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}) : ''%}
結果: PTS がどの分類をトリガーしたコンテンツを保持するショットごとのオブジェクトの配列。広告決定ロジックに一時的な粒度が必要な場合に使用します。
ヒントとベストプラクティス
Elemental Inference レスポンスの出力式を構築するときは、次のヒントを参考にしてください。
-
本文を処理する
response.statusCode前に必ず確認してください。呼び出しが失敗した場合、response.bodyは ですnull。 -
を使用して
$distinct()、複数のショット間でカテゴリを重複排除します。 -
Elemental Inference は、ショットごとに複数のIABカテゴリと一連のGARMブランド安全カテゴリを返します。現在の制限については、 Elemental Inference ドキュメントを参照してください。
-
タイムウィンドウが複数のショットにまたがる場合、レスポンスには
items配列に複数の項目が含まれます。 -
最大レスポンスサイズは 20,000 文字です。切り捨てられたレスポンスを受け取った場合は、時間枠を短くします。
-
の他の関数と連鎖するとき、および値を広告決定サーバー URL に直接渡す
player_params.*ときはSEQUENTIAL_EXECUTOR、temp.*出力キーを使用します。 -
サポートされているJSONata関数と演算子の完全なリストについては、「」を参照してくださいJSONata Functions の式リファレンス。
前提条件とリソースポリシーを含む完全なセットアップガイドについては、「」を参照してくださいElemental Inference の統合。関数タイプのリファレンスについては、「」を参照してくださいAWS サービスリクエスト。