ユーザー・データAPI
ユーザー・データAPIを使用して、Oracle Data Cloudプラットフォームにユーザー・データをプログラマティックにオンボーディングして、そのデータを自分のサイトに戻します。ユーザー・データAPIは、オフライン・データ、タクソノミ、Webサイトおよびモバイル・アプリの間の常に動いているパイプとして機能します。
ユーザー・データAPIを使用して、ユーザーが分類されているカテゴリに関する情報を取得することもできます。この情報を使用して、ユーザーからのプライバシ関連のリクエストを満たすことができます。
EUデータ。所在地が欧州連合(EU)であるユーザー・プロファイルのデータを収集および受信するには、オラクル社の一般データ保護規則(GDPR)の契約に署名している必要があります。この契約を取得して署名するには、オラクル社のアカウント担当者にお問い合せください。
ユーザー・データAPIでは、最大1,000コール/秒で、ユーザー当たり1コールがサポートされます。データを収集または配信する対象のユーザーごとに、個別のAPIコールを実行する必要があります。バルクAPIを使用して、1つのHTTPS POSTリクエストの本文で、個々のユーザー・データAPIコールをバッチ処理できます。バルクAPIを使用すると、レイテンシが短縮され、スループットが最大化されます。バルクAPIへのアクセスをリクエストするには、My Oracle Support (MOS)にお問い合せください。リクエストに、1日当たりのサブリクエストの最大数と任意のカスタム要件を含めます。MOSスペシャリストが、該当するWebサービス・キーでバルクAPIコールを実行できるようにします。
ユーザー・データAPIレスポンスは、通常、APIリクエストが米国から行われる場合は300 ms以内、米国外から行われる場合は500-600 msで配信されます。
このトピックの内容
APIリファレンス
次の埋込み参照ドキュメントでは、各メソッドのパラメータについて説明し、コール用のテンプレートを提供しています。ただし、ツールからライブAPIコールを実行することはできません。
次のリンクを新しいタブで開くと、ドキュメントが3つのペインの形式で表示されます。
このAPIの詳細は、My Oracle Support (MOS)にお問い合せください。
ベース・パス
https://api.tags.bluekai.com/getdata/siteID/v1.2/...
サポートされているIDタイプ
オンボーディングおよび配信するデータは、次の表で説明するいくつかのIDタイプにリンクできます。
IDタイプ | パラメータ | IDスペース | 説明 |
---|---|---|---|
BKUUID | userid
|
プライマリID (デスクトップおよびモバイルWeb) | IDスワップ、SDT配信またはJSONリターン・タグを介して受信した、難読化されたOracle Data Cloudの一意のユーザーID (BKUUID)。 |
PUUID |
セカンダリID (BKUUIDにリンクされます。デスクトップおよびモバイルWeb)
|
電子メール・ハッシュ、アカウントIDハッシュ、Cookie IDなどの識別子になる、パートナベースの一意のユーザーID (PUUID)。渡すPUUIDは、BKUUIDにIDスワップされる必要があり、IDスワップされない場合は、ユーザーが見つからなかったことを示す404エラーが表示されます。詳細は、IDスワップを参照してください。 PUUIDを渡す場合、ユーザー・データAPIコールに含めるサイトIDが有効になっている必要があり、有効になっていない場合は、ユーザーが見つからなかったことを示す404エラーが表示されます。これを行うには、MOSチケットをオープンし、パートナ名、パートナID、IDスワップ・サイトID、およびユーザー・データAPIコールで渡すサイトIDを含めて、ユーザー・データAPIのpuseridアクセスをリクエストします。 phintを介して、IDスワップされたPUUIDを渡す場合(たとえば、Oracle Data Cloudコア・タグを使用してIDスワップを実行する場合)、 ID同期の設定の詳細は、IDスワップを参照してください。 |
|
MAID | adid idfa
|
プライマリID、モバイル・アプリ | adid またはidfa を渡すと、このMobile Advertising IDにリンクされたデータ(プライマリIDスペースで動作する)を送信および取得できます(送信または取得するデータは、BKUUIDにはリンクされません)。国の識別メソッド: MAIDにリンクされたデータをオンボーディングする場合、ユーザー・データAPIコールで国コードを渡して、ユーザーの国の場所を指定する必要があります。ただし、ユーザーの国を識別できないシナリオに対応するために、同じMOSチケットで、ユーザーの国の場所を分類する次のメソッドのいずれかを指定できます(国コードを渡さず、かつこれらのいずれかのメソッドを選択しない場合は、国コードが指定されていないことを示す400エラーが表示されます)。
デフォルトまたは未指定の国のメソッドをリクエストするには、ユーザー・データAPIのSITES_DEFAULT_CCODEをリクエストして、パートナ名、パートナIDおよび分類サイトIDを含めて、(a)使用するデフォルトの国または(b)ユーザーの国の場所を未指定としてマークすることを指定します。 |
データ収集
ユーザー・データAPIを使用すると、データ・ウェアハウス、CRMデータベース、またはその他のオフライン・ソースに格納されているユーザー・データを、いつでも個別にオンボーディングしてアクティブ化できます。これにより、必要な場合にいつでも、オフライン・ソースでモデルとアナリティクスを実行してユーザーをセグメント化し、その属性をタクソノミに直接インポートできます。ユーザー・データは、すぐにタクソノミに追加されて、アクティブ化の準備が整います。
データをオンボーディングするには、まず、プラットフォームのUIを使用するか、コンテナ(サイト) API、カテゴリAPIおよびルールAPIを使用して、サイトID、カテゴリおよびルールを作成する必要があります。
リクエスト
api.tags.bluekai.com/getdata/{siteid}/v1.2?{idType}={userId}&phint={key}={value}&bkuid={Web Service Key}&bksig={Method Signature}
に対して、次のコンポーネントを指定してGETリクエストを送信することで、データをオンボーディングするためのユーザー・データAPIコールを実行できます。
- サイトID。作成して、ルールに含めたサイトID。
- IDタイプとユーザーID。BKUUID (userid)、PUUID (puserid)またはMAID (adidまたはidfa)のIDタイプと、実際のID。MAIDは8-4-4-4-12の形式で渡す必要があります。
- phint。ルールに含めた、ユーザーの属性と行動を表すキーと値のペア。Oracle Data Cloudプラットフォームでは、ルール内のサイトIDとphintが評価されて、ユーザーが追加されるカテゴリが決定します。
- Webサービス・キー。Oracle Data Cloud APIコールを実行するためのキー。これを取得するには、シートにログインして、「Tools」→「Web Service Key Tool」をクリックします。Webサービス・キーの取得の詳細は、ここをクリックしてください。
- メソッドの署名。HTTP_METHOD、URI_PATH、QUERY_ARG_VALUESおよびPOST_DATAを文字列バイト配列に暗号化し、Webサービスの秘密キーで結果の文字列を署名することによって生成された、リクエストの署名(bksig)。ユーザー・データAPIコールの認証の詳細は、ここをクリックしてください。
MAIDまたは他の非Cookie IDタイプにリンクされたデータをオンボーディングする場合は、ユーザーのデータが取得された場所の2文字のISO 3166-1 alpha-2の国コードに設定されたccode
パラメータを渡し、create_profile
フラグを1に設定する必要もあります。これにより、IDスペースの新しいユーザー・プロファイルをプロファイル・ストアに追加できます。プロファイルがすでに存在する場合、phintパラメータで渡すユーザー属性のみが、ユーザーのプロファイルに追加されます。
したがって、MAIDのユーザー・データAPIコールの構文は、次のようになります。api.tags.bluekai.com/getdata/{siteid}/v1.2?idfa|adid={8-4-4-4-12}&phint={key}={value}&ccode={countryCode}&create_profile=1&bkuid={Web Service Key}&bksig={Method Signature}
ユーザー・データAPIでデータを送信するときに含めることができるすべてのパラメータの詳細は、パラメータを参照してください。
リクエストの例
次の例は、BKUUID、PUUIDおよびMAIDにリンクされたデータをオンボーディングするために、ユーザー・データAPIリクエストを実行する方法を示しています。それぞれの例で、サイトID 50838とpurchaser=smartphoneのphintがコールに渡されています。
BKUUID
https://api.tags.bluekai.com/getdata/50838/v1.2?userid=3PR/ef6y99YlryOu&phint=purchase=smartphone&bkuid=a3c18b227976ad07da5d679c7259f726631d39cf49252926407dc05c3e8be643&bksig=uBtWOAzM6cduAbEeaQoU6%2BkNUL87%2Brxudio2DC00Y5c%3D
PUUID
https://api.tags.bluekai.com/getdata/58038/v1.2?puserid=z0OgPvTRj990wQs&phint=purchase=smartphone&bkuid=a3c18b227976ad07da5d679c7259f726631d39cf49252926407dc05c3e8be643&bksig=uBtWOAzM6cduAbEeaQoU6%2BkNUL87%2Brxudio2DC00Y5c%3D
MAID
https://api.tags.bluekai.com/getdata/58038/v1.2?adid=6D92078A-8246-4BA4-AE5B-76104861E7DC&phint=purchase=smartphone&ccode=US&create_profile=1&bkuid=a3c18b227976ad07da5d679c7259f726631d39cf49252926407dc05c3e8be643&bksig=uBtWOAzM6cduAbEeaQoU6%2BkNUL87%2Brxudio2DC00Y5c%3D
レスポンス
ユーザー・プロファイルが見つかったか、作成された場合、ユーザー・データAPIは200コードを返します。ユーザーが存在しないか、Cookieに対してIDが同期されていない場合は、ユーザーが見つからなかったことを示す404エラーが返されます。正常なレスポンスの場合、ユーザー・データAPIは、次のような場合にもユーザーIDを返します。
- BKUUID (userid)にリンクされたデータをオンボーディングする場合は、レスポンスにユーザーの難読化されたBKUUIDが含まれます。
- PUUIDにリンクされたデータについては、レスポンスに、ユーザーのPUUID (puserid)と難読化されたBKUUIDが含まれます。
- MAIDにリンクされたデータについては、レスポンスにはユーザーのidfaまたはadidは含まれません。
レスポンスの例
次の例は、PUUIDにリンクされたユーザー・データをオンボーディングするための、ユーザー・データAPIリクエストに対するレスポンスを示しています。
{ "status": 200, "msg": "ok", "userid": "3PR/ef6y99YlryOu", "puserid": "z0OgPvTRj990wQs", "categories": [] }
データ配信
ユーザー・データAPIを使用して、ユーザー・データをWebサイトまたは内部システムに配信できます。このAPIでは、オーディエンスでターゲットになっているユーザーのカテゴリIDを返すことができます。これにより、顧客の属性と行動に基づく最適なサイト・コンテンツと広告を使用して、顧客をターゲットできます。
ユーザー・データAPIでデータを配信する場合に考慮する必要のある制限事項は次のとおりです。
- APIコールでは、ユーザーのすべての履歴カテゴリは取得されません。
- PUUIDに関連付けられたデータに対してAPIを使用する場合、コールではPUUIDにリンクされたすべてのプロファイルは取得されません。最初に作成されたプロファイルのみが取得されます。
- PUUIDにリンクされたすべてのIDを更新するようにAPIコンテナが構成されている場合は、ユーザー情報を取得するコールではプロファイルが返されません。
データを配信するには、プラットフォームUIを使用するか、オーディエンスAPIおよびキャンペーンAPIを使用して、最初にオーディエンスを作成および配信する必要があります。データ配信を構成する場合、配信メソッドとしてJSONリターンを指定し、ユーザー・データAPIコールで使用するのと同じサイトIDを指定します。
リクエスト
GETリクエストの送信により、データを配信するユーザー・データAPIコールを実行できます
api.tags.bluekai.com/getdata/{siteid}/v1.2?{idType}={userId}&bkuid={Web Service Key}&bksig={Method Signature}
次のコンポーネントを使用:
- サイトID。作成して、ルールに含めたサイトID。
- IDタイプとユーザーID。BKUUID (userid)、PUUID (puserid)またはMAID (adidまたはidfa)のIDタイプと、実際のID。
- Webサービス・キー。Oracle Data Cloud APIコールを実行するためのキー。
- メソッドの署名。生成されたリクエストの署名。
ユーザー・データAPIでデータを取得する際に含めることができるすべてのパラメータの詳細は、APIリファレンスドキュメントを参照してください。リクエストでphintを渡して、データのオンボーディングと配信を同時に実行することもできます。
filterbycampidsパラメータでキャンペーンIDのカンマ区切りリストを渡すことで、ユーザー・データAPIによって返されるカテゴリIDをフィルタできます。これにより、ユーザー・データAPIで、1つ以上の特定のキャンペーンによってターゲットおよび獲得されたカテゴリのみを返すことができます。デフォルトでは、ユーザー・データAPIでは、すべてのキャンペーンによってターゲットおよび獲得されているカテゴリが返されます。
レスポンス
ユーザー・データAPIでは、ターゲットされて配信されているユーザーのプロファイルにリンクされたカテゴリID、ユーザーが最後にカテゴリでタグ付けされた時間、およびカテゴリでタグ付けされた回数が返されます。ユーザーが存在しないか、Cookieに対してIDが同期されていない場合は、ユーザーが見つからなかったことを示す404エラーが返されます。
次の例は、ユーザー・データAPIのデータ配信リクエストに対するレスポンスを示しています。
{ "status": 200, "msg": "ok", "userid": "3PR/ef6y99YlryOu", "categories": [ { "id": 1211430, "count": 3, "lastmodified": 1520881959 } ] }
例
サンプルのユーザー・データAPIレスポンス - 成功(カテゴリを含む)
{ "status": 200, "msg": "ok", "userid": "<BlueKai_UUID>", "puserid": "<Partner_UUID>", "categories": [{ "id": 123, "count": 1, "lastmodified": 1342722630 }, { "id": 323, "count": 3, "lastmodified": 1342722400 }] }
サンプルのユーザー・データAPIレスポンス - 成功(カテゴリを含まない)
{ "status": 200, "msg": "ok", "userid": "ABCD", "puserid": "XYZ123", "categories": {} }
サンプルのユーザー・データAPIのエラー・レスポンス
{ "status": 400, "msg": "user id is empty", "userid": "", "puserid": "", "categories": {} }
レジストリ・リクエスト
ユーザー・データAPIを使用して、ユーザーが分類されているカテゴリを見つけることができます。たとえば、ユーザーが自分について収集されたデータを確認するためにプライバシ・リクエストを送信した場合は、GETコールを使用して、ユーザーに適用されるカテゴリのリストを取得できます。これらのレジストリ・コールには、個別のエンドポイント(api.tags.bluekai.com/getregistrydata)があります。次の構文を使用します。
api.tags.bluekai.com/getregistrydata/{siteID} /v1.2?{idType}={userID}&bkuid={Web Service Key}&bksig= {Method Signature}
次のコンポーネントを使用:
- サイトID。作成して、ルールに含めたサイトID。
- IDタイプとユーザーID。BKUUID (userid)、PUUID (puserid)またはMAID (adidまたはidfa)のIDタイプと、実際のID。
- Webサービス・キー。Oracle Data Cloud APIコールを実行するためのキー。
- メソッドの署名。生成されたリクエストの署名。
レスポンス
ユーザー・データAPIは、ユーザーのプロファイルにリンクされているカテゴリIDを返します。次の例は、レジストリ・リクエストへのレスポンスを示しています。
{ {
"status": 200,
"msg": "ok",
"userid": "3PR/ef6y99YlryOu",
"categories": [ {
"id": 1211432,
"name": "5-10%",
"path": "Oracle Modeling 360 - private > ExampleCompany > US Default > Visitors > 5-10%
} {
"id": 1211434,
"name": "5-10%",
"path": "Oracle Modeling 360 - private > ExampleCompany > US Default > Visitors > 10-15%
} {
"id": 1211436,
"name": "5-10%",
"path": "Oracle Modeling 360 - private > ExampleCompany > US Default > Visitors > 15-20%
} ] }
ユーザー・データAPIリクエストが成功すると、ユーザーがタグ付けされた、すべての新しい適格なカテゴリIDを含むJSON形式のリストが返されます。
パートナ・クリア
パートナ・クリアにより、特定のサイトまたはパートナIDに関連付けられたすべてのサイトのデバイスのすべてのカテゴリが削除されます。カテゴリが削除されると、プロファイルはターゲットされなくなります。このコールは通常、「私のデータを削除してください」リクエストへのレスポンスとして使用されます。
次の構文を使用します。
api.tags.bluekai.com/api/v2/users/{id-type}/{id-value}/tags?
次のコンポーネントを使用:
id-type: パートナID (PUUID)の場合は{id-value}として特別な値id
その他の有効な定義は、IdType
プッシュのsource
フィールドからです: https://push.bluekai.com/Push/idtype
次に例を示します。
- パートナID (PUUID)の場合は
id
- BlueKaiのプロファイルIDの場合は
bkuuid
(難読化されている可能性が高いです) - MAIDの場合は
idfa
またはadid
次の表は、必要な機能を取得するための様々なHTTPメソッドおよびURLをまとめたものです。
メソッド | HTTP本文 | URL | ヘッダー | 機能 |
---|---|---|---|---|
DELETE
|
空 |
または
|
X-SiteID:2000
|
パートナ・クリア - サイト2000のユーザーのカテゴリを削除します(uri引数のサイトIDは"X -SiteID"と同じである必要があります) |
DELETE
|
空 | api.tags.bluekai.com/api/v2/users/idfa/12345678-1234-1234-1234-123456781234/tags?partner=1000
|
パートナ・クリア - partnerID 1000のユーザーのカテゴリを削除します。これは、そのパートナに関連付けられたすべてのサイトを意味します。 |
エラー・レスポンスのサマリー
ユーザー・データAPIリクエストが成功しなかった場合は、エラー・コードとメッセージの説明を含むJSON形式のデータを受信します。次の表は、リクエストが失敗した場合に、レスポンスのstatus
フィールドとmsg
フィールドで返されるエラー・ステータス・コードとメッセージを示しています。
ステータス・コード | メッセージ | サポートされるバージョン |
---|---|---|
200 | "ok" | すべて |
400 | "user id is empty" | すべて |
404 | "user id not found" | すべて |
403 | "invalid site id in the request" | すべて |
400 | "unsupported version of api specified" | すべて |
500 | "internal server error" | すべて |
400 | "invalid bkuid specified in the request" | バージョン1.2 |
400 | "The bkuid specified does not have access to the site" | バージョン1.2 |
400 | "signature specified mismatch" | バージョン1.2 |
400 | "signature specified is empty" | バージョン1.2 |
Pythonコードの例
サンプルPythonスクリプトは、認証の署名の生成方法、ユーザー・データAPIリクエストURLの構築方法、およびプラットフォームに対するHTTPコールの実行方法を示しています。
次の表は、デスクトップ・ユーザー、モバイル・ユーザーおよびモバイル・アプリ・ユーザーに対してこのスクリプトを実行するために必要となるフィールドと構文を表示しています。
サンプル・スクリプトの必須フィールド
ユーザー・タイプ | IDタイプ | フィールド | 例 |
---|---|---|---|
デスクトップ・ユーザーまたはモバイル・ユーザー | BKUUID | siteid、userid、bkuid、bksecretkey
|
./userDataApi.py -s <siteid> -u <userid> -n <phint> -c <campids> -t <target> -b <bkuid> -k <bksecretkey> |
デスクトップ・ユーザーまたはモバイル・ユーザー | PUUID | siteid、puserid、pfield、bkuid、bksecretkey
|
./userDataApi.py -s <siteid> -p <puserid> -f <pfield>-n <phint> -c <campids> -t <target> -b <bkuid> -k <bksecretkey> |
モバイル・アプリ・ユーザー | IDFA | siteid、idfa、bkuid、bksecretkey
|
./userDataApi.py -s <siteid> -e <idfa> -n <phint> -c <campids> -t <target> -b <bkuid> -k <bksecretkey> |
モバイル・アプリ・ユーザー | ADID | siteid、adid、bkuid、bksecretkey
|
./userDataApi.py -s <siteid> -d <adid> -n <phint> -c <campids> -t <target> -b <bkuid> -k <bksecretkey> |

import base64
import hashlib
import hmac
import logging
from collections import namedtuple
import argparse
import requests
from requests.models import PreparedRequest
try:
from urllib.parse import urlunparse, urlparse, unquote_plus, parse_qs
except ImportError:
from urlparse import urlunparse, urlparse, parse_qs
from urllib import unquote_plus
logger = logging.getLogger('User Data API')
'''
This script generates signed url by given parameters, and sending get request
the elementary parameters you must supply in are:
siteid, bkuid, bksecretkey, in addition should use at least one of the
next parameters to supply for identify the user for getting or sending data
about:
-userid
-puserid
-adid
-idfa
In addition you can add more optional parameters which let you get/send more
or more specific information by using one of the next options:
*puserid, phint , target, filterbycampids
*puserid must be followed by pfield or be known in advance to Oracle
'''
# the next parameter is tuple of ("arg shortcut name", "arg name", helper")
cmd_args = namedtuple('cmd_args', ['short', 'arg_name', 'helper'])
required_parameters = [
cmd_args("-s", "--siteid",
"The unique site identifier generated when you created your "
"container"),
cmd_args("-b", "--bkuid", "Your web service user key"),
cmd_args("-k", "--bksecretkey", "your web service private key"),
]
optional_parameters = [
cmd_args("-u", "--userid",
"The obfuscated Oracle Data Cloud unique user ID "
"that you received via an ID swap, SDT delivery, or JSON Return "
"tag."),
cmd_args("-p", "--puserid", "Your partner-based unique user ID (PUUID), "
"which may be an email hash, account ID hash, "
"cookie ID, "
"or other identifier.\nThe PUUIDs you pass "
"must be ID swapped "
"to BKUUIDs or you will get 404 user not "
"found errors"),
cmd_args("-f", "--pfield",
"The type of key associated with the partner-based "
"UUID you passed in the puserid field."),
cmd_args("-d", "--adid",
" enables you to send and get the data linked to this "
"mobile advertising ID, which operates in a primary ID "
"space"),
cmd_args("-e", "--idfa",
" enables you to send and get the data linked to this "
"mobile advertising ID, which operates in a primary ID "
"space"),
cmd_args("-c", "--campIds", "A list of comma-delimited campaign IDs"
"This field is used for filtering the "
"categories included in the user data API "
"response based on the specified campaign IDs "
"that have "
"targeted and won the user."),
cmd_args("-t", "--target", "indicate whether the ability to use a set of "
"conditions in a schedule that determine "
"whether a tag is fired"),
]
optional_multiply_parameters = [
cmd_args("-n", "--phint",
" A key-value pair representing the user's attributes "
"and behavior, which you included in your rules")
]
def sign_string(bk_secret_key, str_to_sign):
h = hmac.new(bytes(bk_secret_key.encode('utf-8')), bytes(
str_to_sign.encode('utf-8')),
hashlib.sha256)
return base64.standard_b64encode(h.digest())
def generate_string_to_sign(url, method):
parsed_url = urlparse(url)
query_arr = parse_qs(parsed_url.query)
query_values = ''.join([''.join(v) for v in query_arr.values()])
return method + parsed_url.path + query_values
def get_parsed_args_dict():
parser = argparse.ArgumentParser()
named_required = parser.add_argument_group('required arguments')
named = parser.add_argument_group('extra optional arguments')
named_multiply = parser.add_argument_group('positional multiply arguments')
for current_arg_detail in optional_parameters:
named.add_argument(current_arg_detail.short,
current_arg_detail.arg_name,
help=current_arg_detail.helper)
for current_arg_detail in required_parameters:
named_required.add_argument(current_arg_detail.short,
current_arg_detail.arg_name,
help=current_arg_detail.helper,
required=True)
for current_arg_detail in optional_multiply_parameters:
named_multiply.add_argument(current_arg_detail.short,
current_arg_detail.arg_name,
help=current_arg_detail.helper,
action='append', nargs='*')
args = parser.parse_args()
return vars(args)
def filter_args_dict(args_dict):
return {k: v for k, v in args_dict.items() if v}
def build_url_by_args():
args_in_use = filter_args_dict(get_parsed_args_dict())
# handle special fields which are not related to query part of url
siteid = args_in_use.pop("siteid", None)
bkuid = args_in_use.pop("bkuid", None)
bksecretkey = args_in_use.pop("bksecretkey", None)
url_before_sign = urlunparse(
('https', 'api.tags.bluekai.com', '/getdata/' + siteid + '/v1.2',
None, None, None))
req = PreparedRequest()
req.prepare_url(url_before_sign, args_in_use)
return req.url, bkuid, bksecretkey
def get_signed_url(url_before_sign, bk_uid, bk_secret_key):
if not bk_uid or not bk_secret_key:
raise ValueError('bkuid or bksecretkey are required and missing')
url_before_sign = unquote_plus(url_before_sign)
string_to_sign = generate_string_to_sign(url_before_sign, "GET")
signature = sign_string(bk_secret_key, string_to_sign)
params = {'bkuid': bk_uid, "bksig": signature}
req = PreparedRequest()
req.prepare_url(url_before_sign, params)
return req.url
def do_request(url):
result = requests.get(url)
logger.info("The request you create is\n{}\n".format(url))
raw_data = result.content
logger.info("the request result is:\n {}\n".format(str(raw_data)))
return raw_data
def main():
logging.basicConfig(level=logging.INFO, format='%(name)s - %(levelname)s - %('
'message)s')
print('\nGenerates a signed url using the given arguments and sends a '
'GET request.')
url_by_param, bk_uid, bk_secret_key = build_url_by_args()
signed_url = get_signed_url(url_by_param, bk_uid, bk_secret_key)
do_request(signed_url)
if __name__ == "__main__":
main()