DAI Early Ad Break Notification API

Google DAI プラットフォームを使用している場合は、ストリームで次に予定されているライブ/リニア広告ブレークのターゲティング データを提供できる場合があります。Early Ad Break Notification(EABN)API では、Key-Value ペアを使用して広告ブレーク固有のターゲティングを実装することで、大容量のストリームでの広告決定のためのスケーラビリティを実現できます。

EABN API の呼び出しには、ターゲットとするアセットキーと、次のブレークの予想継続時間を含める必要があります。再生時間は、実際の広告ブレークの長さにできる限り近い長さにする必要があります。送信された予想時間が広告ブレークよりも短い場合、残りの広告ブレークには「掲載不足」広告ブレーク フィルタイプ(デフォルトは空白のスレート)が使用されます。送信された想定時間が広告ブレークよりも長い場合、広告ブレークは広告が完了する前に終了する場合があります。

これらの必須フィールドに加えて、カスタム ターゲティング パラメータ、適用する連続配信広告テンプレートの名前、SCTE35 キューアウト データ(利用可能な場合)を送信することもできます。

前提条件

サービス アカウントを作成する

EABN API にアクセスするには、Google サービス アカウントが必要です。

  • Google Cloud アカウントをお持ちの場合は、IAM モジュールを使用してサービス アカウントを作成できます。詳細については、サービス アカウントの作成と管理をご覧ください。
  • Google Cloud アカウントをお持ちでない場合は、次の手順で Google API Console からサービス アカウントを作成できます。
    1. 新しいプロジェクトを作成するか、既存のプロジェクトを選択します。
    2. [認証情報] ページで、[サービス アカウントを管理] をクリックします。
    3. [サービス アカウント] ページで、[サービス アカウントを作成] をクリックします。
    4. [サービス アカウントの作成] ページで、アカウントの詳細を入力します。[作成] をクリックします。

サービス アカウントが正常に作成されたら、認証に使用するアカウントの JSON キーをコピーします。

EABN API を有効にする

サービス アカウントを作成したら、そのアカウントで EABN API を有効にするようアカウント マネージャーに依頼してください。

DAI API を有効にする

サービス アカウントで EABN API が有効になったら、アカウントで DAI API を有効にします。

  1. Google API ライブラリで「DAI API」を検索します。

  2. DAI API を選択して有効にします。

EABN API の使用

EABN API を呼び出すには、JSON/REST リクエストを使用します。

認証

EABN API に対して認証済みの呼び出しを行うには、サービス アカウントの JSON キーとスコープ https://www.googleapis.com/auth/video-ads を使用して、OAuth2 サービス アカウントの認証情報を生成する必要があります。詳細については、サーバー間アプリケーションに OAuth 2.0 を使用するをご覧ください。

EABN API の呼び出しごとに、結果の認証トークンを Auth ヘッダーとして含める必要があります。

早期広告ブレーク通知を送信する

早期広告ブレーク通知を送信するには、次の URL とリクエスト本文を使用して POST リクエストを送信します。

POST dai.googleapis.com/v1/adBreaks

リクエスト本文

オブジェクト
adBreak 必須 adBreak プロパティのラッパー オブジェクト
assetKey 必須 広告ブレークが作成される LiveStreamEvent の一意の識別子
expectedDuration 必須 この広告ブレークの継続時間。Google の標準の再生時間形式(xx.xxxs、xx.xxx は秒数)で指定します
scte35CueOut 任意 scte35 キューアウトの Base64 エンコード データです。splice_insert() コマンドまたは time_signal() コマンドを含めることができます。
例:
  • time_signal():
    /DA0AAAAAAAA///wBQb+cr0AUAAeAhxDVUVJSAAAjn/PAAGlmbAICAAAAAAsoKGKNAIAmsnRfg==
  • splice_insert(): /DAvAAAAAAAA///wFAVIAACPf+/+c2nALv4AUsz1AAAAAAAKAAhDVUVJAAABNWLbowo=
custParams 任意 アド マネージャー 360 でカスタム条件をターゲティングする際に、この広告ブレークで広告リクエストに含める Key-Value ペアです。= で区切られ、& で結合されます。
例:
key=value&key2=value2,value3
ターゲティングについて詳しくは、ストリームにターゲティング パラメータを指定するをご覧ください。
ptpln 任意 連続配信広告のテンプレート名

レスポンス ヘッダー

HTTP/1.1 200 OK

レスポンスの本文

レスポンスの本文には、adBreak オブジェクトで送信されるすべてのパラメータと、ストリーム内で作成された広告ブレークの内部 DAI 識別子を含む追加の daiBreakId フィールドが含まれます。

リクエスト

POST /v1/adBreaks HTTP/1.1
Content-Type: application/json

{
  "adBreak": {
    "assetKey": "asset1",
    "expectedDuration": "30s",
    "scte35CueOut": "/DA0AAAAAAAA///wBQb+cr0AUAAeAhxDVUVJSAAAjn/PAAGlmbAICAAAAAAsoKGKNAIAmsnRfg==",
    "custParams": "param1=value1&param2=value2",
    "ptpln": "podtemplate"
  }
}

レスポンス

HTTP/1.1 200 OK

{
  "assetKey": "asset1",
  "expectedDuration": "30s",
  "custParams": "param1=value1&param2=value2",
  "scte35CueOut": "/DA0AAAAAAAA///wBQb+cr0AUAAeAhxDVUVJSAAAjn/PAAGlmbAICAAAAAAsoKGKNAIAmsnRfg==",
  "ptpln": "podtemplate",
  "daiBreakId": 1
}

実装例(Python)

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function

from absl import app

from google.auth.transport.requests import AuthorizedSession
from google.oauth2 import service_account

SERVICE_ACCOUNT_KEY_FILE = "~/eabn_key.json"
ASSET_KEY = "asset1"

SCOPES = ['https://www.googleapis.com/auth/video-ads']
EABN_API_URL = 'https://dai.googleapis.com/v1/adBreaks'


def main():
  credentials = service_account.Credentials.from_service_account_file(
      SERVICE_ACCOUNT_KEY_FILE, scopes=SCOPES)

  authed_session = AuthorizedSession(credentials)

  data = {
      'assetKey': ASSET_KEY,
      'expectedDuration': '120s',
      'custParams': 'param1=value1&param2=value2',
      'scte35CueOut': '/DA0AAAAAAAA///wBQb+cr0AUAAeAhxDVUVJSAAAjn/PAAGlmbAICAAAAAAsoKGKNAIAmsnRfg==',
  }

  r = authed_session.post(EABN_API_URL, json={'adBreak': data})
  print(r.status_code)
  print(r.headers)
  print(r.text)

if __name__ == '__main__':
  app.run(main)