コンテナAPI
Oracle Data CloudコンテナWebサービスを実装して、Oracle Data Cloudプラットフォームで個々のサイトを作成および管理できます。コンテナを作成するとサイトIDが生成され、これはサイトを管理するためのユニークIDとなります。DMPには複数のコンテナを含めることができ、各コンテナは一意のサイトIDに関連付けられます。コンテナとサイトIDは、データをOracle Data Cloudプラットフォームに収集したり、データをサイトに戻すために使用されます。
ノート: ユーザーがOracle Data CloudプラットフォームUIでキャンペーンを作成することはなくなりました。キャンペーン・ワークフローは、オーディエンス・ワークフローの一部になりました。ただし、プラットフォームでは引き続きキャンペーンを使用して、オーディエンス・データ配信を管理できます。キャンペーンは、UIユーザーがオーディエンスを配信する際に自動的に作成されます。APIでは、以前と同様にキャンペーンを作成して使用します。
このトピックの内容
APIについて知る
次の埋込みI/Oドキュメントを参照して、APIについての理解を深めることができます。I/Oドキュメントでは、各メソッドのパラメータについて説明し、コールのテンプレートを提供しています。ただし、ツールからライブAPIコールを実行することはできません。
次のリンクを新しいタブで開くと、I/Oドキュメントが3つのペインの形式で表示されます。
このAPIの詳細は、My Oracle Support (MOS)にお問い合せください。
サービスURI
コンテナAPIのURIは、次のとおりです。
services.bluekai.com/Services/WS/sites
関連するAPIコール
次に、通常、コンテナAPIを使用した後に実行するAPIコールを示します。
コンテナAPIコールの後 | ユースケース |
---|---|
カテゴリAPI | プライベート・タクソノミに、コンテナで収集されるユーザー属性を表すファーストパーティ・カテゴリを個別に追加します |
ルールAPI | コンテナによって収集されたユーザー属性をカテゴリにマッピングする分類ルールを個別に作成します。 |
スケジュール | コンテナからサードパーティ・タグが発火される場所、時間および対象を指定します。 |
ユースケース
コンテナとサイトIDを使用したデータ収集
コンテナとそのサイトIDを使用して、ユーザー・データをOracle Data Cloudプラットフォームに転送できます。
サイトIDは一意の識別子となり、これを使用して、Oracle Data Cloudプラットフォームでサイトを管理できます。
コンテナAPIを使用してコンテナを作成し、プラットフォームUIのコンテナ・ツールを使用してJavaScriptとHTMLタグ・コードを追加できます。コードによってサイトからデータが収集されてプラットフォームに転送されます。データは、IDスワップに使用される分類属性か、一意のユーザーID (UUID)となります。コンテナはすべてのデータ収集方法で必要になります。
EUデータをオンボーディングするデータ・プロバイダ。所在地が欧州連合(EU)であるユーザー・プロファイルのデータを収集するには、オラクル社の一般データ保護規則(GDPR)の利用許諾書に署名している必要があります。契約に署名しておらず、かつEUの1か国以上に対して構成されているコンテナを使用してコンテナAPIのPOSTまたはPUTリクエストを実行した場合、コンテナAPIによってエラーが返され、コンテナは作成されません。この契約を取得して署名するには、オラクル社のアカウント担当者にお問い合せください。
コンテナとサイトIDを使用したデータ配信
サイトIDを使用して、ユーザー・データを配信できます。
コンテナAPIを使用してコンテナを作成し、データをサーバー・データ・トランスファーを介して配信する場合は、生成されたサイトIDを正規表現ピクセルに挿入した後、ピクセルURL APIを使用してキャンペーンを宛先に関連付けることができます。
JSONリターン・タグ・タイプのコンテナを使用して、タグをホストするWebページに直接キャンペーン・データを配信することもできます。
GETレスポンスのサマリー
コンテナAPIのGETリクエストは、コンテナまたはコンテナのリストを返します。
プロパティ | タイプ | 説明 |
---|---|---|
allowed_buyers
|
オブジェクト | transaction_scope がpermissionedに設定されている場合、このオブジェクトによって、このサイトで落札する可能性がある購入者のid およびname が表示され、それ以外の場合は空のリストになります。
|
analytics_only
|
ブール | サイトがアナリティクスにのみ使用されるか(true )、データ収集にのみ使用されるか(false )を示します |
country_list_type
|
列挙 | blocked_countries リスト内の国がWHITELISTとBLACKLISTのどちらにあるかを示します。デフォルトはBLACKLISTです。 |
blocked_countries
|
リスト | データ収集がユーザーのIPアドレスに基づいてホワイトリスト登録またはブラックリスト登録される国に対する、2文字のISO 3166-1 alpha-2国コードのリスト。新規コンテナでは、オランダ(NL)はデフォルトでブロックされます。ホワイトリストを使用する場合、このフィールドには少なくとも1つの国が含まれている必要があります。 将来、このフィールドの名前は、その機能をより反映した |
created_at
|
日付 | サイトが作成された日時を示すタイムスタンプ。 |
data_transfer_boost_enabled
|
ブール | 最初のページ・ロード後、ユーザーがページを表示している間、n秒ごとにコンテナ・タグを再発火するか(true )どうかを指定します。これにより、オークション・スロットの制限を超えても、ページのパフォーマンスへの影響なく、コンテナから発火できるサードパーティ・ピクセルの数を増やすことができます。コンテナ・タグは、最大15回再発火できます。コンテナ・タグが再発火される頻度は、データ・トランスファー間隔に基づきます。たとえば、デフォルトのオークション制限を10に設定してデータ・トランスファー・ブーストを有効にし、データ・トランスファー間隔を7秒に設定してコンテナに30個のサードパーティ・ピクセルを追加した場合は、次のことが発生します。
true )。 |
data_transfer_boost_interval
|
整数 | data_transfer_boost_enabled フラグをtrue に設定した場合に、コンテナ・タグを再発火する頻度(秒単位)を指定します |
data_transfer_limit_range
|
整数 | イメージ・タグを発火するためにコンテナで使用できるスロットの最大数。データ・プロバイダの場合、これは、データの販売またはIDスワップの実行に使用できるスロットの数です。DMPユーザーの場合、これは、ファーストパーティ・データをパートナに配信するために使用できるスロットの数です。 |
group_id
|
整数 | サイトのグループに割り当てられたユニークID。グループには、サイトのデスクトップ・バージョンとモバイル・バージョンの両方が含まれます。 |
id
|
整数 | コンテナが作成されたときに生成されたサイトID。これは、(たとえば、国ごとに個別のWebサイトがある場合に)個々のWebサイトの管理に使用される一意の識別子です。 |
name
|
文字列 | サイトの名前 |
partner
|
オブジェクト | パートナベースのid とname が含まれるオブジェクト。
|
private_data
|
ブール | サイトから収集されたデータが、私的に使用するもので、ホワイトリストに登録されていないパートナに販売できない(1 )か、パブリックOracle Data Marketplaceのすべてのパートナに販売できる(0 )かを示します |
redirect_domains
|
配列 | サイトがリダイレクトできるドメインをホワイトリストに登録するために使用する有効なURL文字列のリストを指定します。redir キーと値のペアのパラメータが含まれるOracle Data Cloudドメイン・コール(tags.bluekai.com)がこのサイト・ドメイン・ホワイトリストに対して評価され、その後リダイレクトが許可されます。例: "redirect_domains" : ["www.google.com", "www.facebook.com"] |
transaction_scope
|
文字列 | このサイトで落札できる、ホワイトリストに登録された購入者を示します。これは、次の値のいずれかになります。
|
type
|
文字列 | サイトのタイプで、デスクトップの場合は0 、モバイルの場合は1 になります |
updated_at
|
日付 | サイトが最後に変更された日時を示すタイムスタンプ |
タグ・リダイレクト・ドメイン・ホワイトリストの更新
redirect_domains
プロパティには、コンテナのタグ・リダイレクト・ドメイン・ホワイトリストが含まれます。付加されているsample_containers_redir.py Pythonスクリプトを変更し、次のプレースホルダをユースケースの正しい値に置き換えて、コンテナのホワイトリストを更新できます。
{YOUR_SITE_ID}
: コンテナが作成されたときに生成されたサイトID{YOUR_WEB_SERVICE_USER_KEY}
: Webサービス・ユーザー・キー{YOUR_WEB_SERVICE_PRIVATE_KEY}
: Webサービス秘密キー{YOUR_REDIRECT_DOMAINS}
: ホワイトリストに登録するタグ・リダイレクト・ドメインのカンマ区切りリスト。 ドメインは、二重引用符(""
)で囲む必要があります。例:"www.google.com", "www.oracle.com", "www.facebook.com", "www.twitter.com"
スクリプトの中カッコ({}
)は、置き換える必要があるプレースホルダ値を示しています。
スクリプトによって、コンテナAPIに対するGETリクエストが実行されて、サイト詳細がプルされた後、PUTリクエストが実行されて、入力したリダイレクト・ドメインでサイトが更新されます。
ブロックされた国の更新
コンテナAPIを使用してデータ収集をブロックしている国を更新できます。これを行うには、URLで更新するサイトID、目的の構成に応じてWHITELISTまたはBLACKLISTに設定されたcountry_list_type
、JSON本文内のblocked_countries
フィールドでブロックする2文字のISO 3166-1 alpha-2国コードのリストを指定してPUTリクエストを実行します。次のコード例は、EUでのデータ収集をブロックするコンテナの作成方法を示しています(中カッコ{}
は、入力する必要がある値のプレースホルダを示しています)。

#!/usr/bin/python
import os
import sys
import urllib
import urllib2
import cookielib
import urlparse
import hashlib
import hmac
import base64
import json
import random
headers = {"Accept":"application/json","Content-type":"application/json","User_Agent":"Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1) Gecko/20090624 Firefox/3.5"}
serviceUrl = 'https://services.bluekai.com/Services/WS/sites/{YOUR_SITE_ID}'
# Add your user id and key
bkuid = '{YOUR_WEB_SERVICE_USER_KEY}'
bksecretkey = '{YOUR_WEB_SERVICE_PRIVATE_KEY}'
## Example PUT data
## Enter list of countries where data collection is blocked
data = "{\"country_list_type\": \"BLACKLIST\", \"blocked_countries\": [\"EU\"]}"
def signatureInputBuilder(url, method, data):
stringToSign = method
parsedUrl = urlparse.urlparse(url)
print parsedUrl
stringToSign += parsedUrl.path
# first split the query into array of parameters separated by the '&' character
print parsedUrl.query
qP = parsedUrl.query.split('&')
print qP
if len(qP) > 0:
for qS in qP:
qP2 = qS.split('=', 1)
#print qP2
if len(qP2) > 1:
stringToSign += qP2[1]
print stringToSign
if data != None :
stringToSign += data
print stringToSign
h = hmac.new(bksecretkey, stringToSign, hashlib.sha256)
s = base64.standard_b64encode(h.digest())
print s
u = urllib.quote_plus(s)
print u
newUrl = url
if url.find('?') == -1 :
newUrl += '?'
else:
newUrl += '&'
newUrl += 'bkuid=' + bkuid + '&bksig=' + u
return newUrl
def doRequest(url, method, data):
try:
cJ = cookielib.CookieJar()
request = None
if method == 'PUT' :
request = urllib2.Request(url, data, headers)
request.get_method = lambda: 'PUT'
elif method == 'DELETE' :
request = urllib2.Request(url, data, headers)
request.get_method = lambda: 'DELETE'
elif data != None :
request = urllib2.Request(url, data, headers)
else:
request = urllib2.Request(url, None, headers)
# request.add_header('If-Modified-Since' , 'Fri, 31 Aug 2012 14:01:51 PDT')
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cJ))
u = opener.open(request)
rawData = u.read()
print rawData
print "200 ok"
return rawData
except urllib2.HTTPError, e:
print "HTTP error: %d %s" % (e.code, str(e))
print "ERROR: ", e.read()
return None
except urllib2.URLError, e:
print "Network error: %s" % e.reason.args[1]
print "ERROR: ", e.read()
return None
# Comment and uncomment both lines for your request
def main(argv=None):
#newUrl = signatureInputBuilder(serviceUrl, 'GET', None)
#newUrl = signatureInputBuilder(serviceUrl, 'POST', data)
newUrl = signatureInputBuilder(serviceUrl, 'PUT', data)
print newUrl
#doRequest(newUrl, 'GET', None)
#doRequest(newUrl, 'POST', data)
doRequest(newUrl, 'PUT', data)
if __name__ == "__main__":
main()