Adobe Analytics

Adobe Analytics: SegmentsAPIを使って大量のセグメント設定を作成・更新する

こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。

今回はAdobe Marketing Cloud / Adobe AnalyticsのSegments APIを使ってセグメントを操作する方法についてです。
大量のセグメント設定を一括で作成・変更する際にはAPIを使えばあっという間です。

Segments API 1.4

Adobe Developer ConnectionでApplication登録を行う

まずはApplication登録を行う必要があります。

1. Developer Connectionにアクセスして、AdobeIDでログインします。
2. [Developer Tools] > [Applications] を開き、[+Add]をクリックします。
3. 必要項目を入力します。
アプリの名前と、Orgと、スコープが必須項目です。スコープはSegmentsだけあればOKです。

4. Create をクリックすると、[Application ID]と[Application Secret]の2つが表示されるので、メモしておきます。後ほどOAuth2認証の時に使います。

APIを実装したプログラムを作る

AdobeのAPIの認証方法は、かつてはWSSE認証を使ってました。
しかし現在はOAuth2.0認証がサポートされてます。

というわけで、
1. OAuth2認証でtokenを取得
2. tokenを使ってセグメント一覧を取得
3. 取得したセグメントを編集後、tokenを使って保存
以上を行うためのAPI実装をしてみます。

requestパッケージとnode-rest-clientパッケージを使うので、npmでインストールしておきます。

$ npm install request --save
$ npm install node-rest-client --save

まずはOAuth2認証をしてtokenを取得します。

/* token.js */
var request = require('request');

var headers = {
    'Content-Type' : 'application/x-www-form-urlencoded'
};
 
var options = {
    url : 'https://api.omniture.com/token',
    method : 'POST',
    headers : headers,
    auth : {
        user : "xxxxx", // [ApplicationID]
        password : "yyyyy" // [ApplicationSecret]
    },
    json : true,
    form : {
        'grant_type' : 'client_credentials'
    }
};

request(options, function (error, response, body) {
    var token = body.access_token;
    console.log(token);
});

実行すると、OAuth2認証が実行されてtokenが帰ってきます。
tokenの有効期限は3600秒、つまり1時間あります。
以降のAPIコールの際にtokenを使い回すために、シェル変数に保存しておきます。

$ token=`node token.js`

次は、セグメント一覧を取得するAPIを実装します。tokenを引数で受け取って、Segments.Getに渡します。
取得した一覧は、segment.jsonファイルに保存されます。

/* get.js */
var token = process.argv[2];

var fs = require('fs');
var output = 'segments.json';

var Client = require('node-rest-client').Client;
var client = new Client();

var args = { 
    headers: {
        'Authorization' : 'Bearer ' + token,
        'Content-Type' : 'application/json'
    },
    parameters: {
        method: "Segments.Get"
    },
    data: {
        accessLevel: "owned",
        fields: [
            "definition",
            "reportSuiteID"
        ]
    }
};

client.post("https://api.omniture.com/admin/1.4/rest/", args, function (data, response) {
    fs.writeFile(output, JSON.stringify(data, null, 2), function(err) {
        if(err) {
            console.log(err);
        } else {
            console.log("JSON saved to " + output);
        }
    }); 
});

実行するときはこのようにします。

$ node get.js $token

これによって出来上がったsegments.jsonは、以下のようなJSONファイルになってます。
各セグメント設定が配列形式でおさまってるJSONです。

[
  {
    "id": "xxxxx",
    "name": "初回訪問",
    "reportSuiteID": "exturexturedev",
    "definition": {
      "container": {
        "type": "visits",
        "rules": [
          {
            "name": "Visit Number",
            "element": "visitnumber",
            "operator": "equals",
            "value": 1
          }
        ]
      }
    }
  },
  {
    "id": "yyyyyy",
    "name": "訪問者:検索エリア:沖縄",
    "reportSuiteID": "exturexturedev",
    "definition": {
      "container": {
        "type": "visitors",
        "rules": [
          {
            "name": "Custom eVar 1",
            "element": "evar1",
            "operator": "equals",
            "value": "okinawa"
          }
        ]
      }
    }
  }// (中略)
]

このjsonファイルを編集して、書き換えたいところを書き換えたり、
新たな設定を追加します。
新規のセグメント設定を追加する場合は、idは不要で、その他のフィールドのみ記入します。

そして今度はそのJSONファイルを食わせて、セグメント設定を一括更新するためのプログラムを書いてみます。

/* save.js */
var token = process.argv[2];

var fs = require('fs');
var json = JSON.parse(fs.readFileSync('segments.json', 'utf8'));

var request = require('request');

var Client = require('node-rest-client').Client;
var client = new Client();

var args = { 
    headers: {
        'Authorization' : 'Bearer ' + token,
        'Content-Type' : 'application/json'
    },
    parameters: {
        method: "Segments.Save"
    }
};

for (var i=0; i<json.length; i++) {
    args.data = json[i];
    client.post("https://api.omniture.com/admin/1.4/rest/", args, function (data, response) {
        console.log(data) // 保存できたセグメントID
    });
}

実行するときはこのようにします。

$ node save.js $token

save.jsを実行すると、segments.jsonを読み込んで、セグメント設定配列の数だけforループしながらSegments.Saveを実行します。

実行結果はこのようになります。

{ segmentID: 'xxxxxx' }
{ segmentID: 'yyyyyy' }
{ segmentID: 'zzzzzz' }
// 以下略

保存できたセグメントのIDが表示されます。

どんな場面で役にたつか

こんな事で大量のセグメントを手分けして作った事があれば、APIで自動化すれば一発で解決します。

同じようなセグメント設定だが、ディメンションの値だけ異なるバリエーションを何個も作る必要がある

管理画面上でテンプレとなるセグメントを一つ作って、それをAPIで取得してJSONの雛形として利用する。
→ それをディメンションの値の分だけコピーして複製したものをAPIで一括登録

サイトのドメイン変更・URL構成の変更によってセグメントのディメンション設定を何個も直す必要がある

セグメント一覧をAPIで取得して、URL/ドメインの変更になった部分だけ書き換えてAPIで登録しなおす。

というように、自動化すれば時間とリソースをかける作業も一瞬で終わるようになります。
今回はAdobe Marketing Cloud / Adobe AnalyticsのSegments APIをNode.jsで実装したプログラムについてでした。

弊社はAdobe Marketing Cloud関連のAPI実装支援も行なっておりますので、AMCの定期的な処理をAPIで自動化したい!というご要望がございましたらぜひお問い合わせください。
お問い合わせはこちらからどうぞ。

ブログへの記事リクエストはこちらまで

ピックアップ記事

  1. 最速で理解したい人のためのIT用語集

関連記事

  1. Adobe Analytics

    Adobe AnalyticsからDWHレポートをGoogle Cloud Storageにアップロ…

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  2. Adobe Dynamic Tag Manager

    Adobe DTMからAdobe Launchに一発アップグレード

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  3. Google Cloud Platform

    Node.js+GAE: 日本語自然文を形態素解析してネガポジ判定をする

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  4. Adobe Analytics

    はじめてのAdobe Analytics実装②

    前回勉強した内容をもとに、今回は実際にエクスチュアのs_code.js…

  5. Adobe Analytics

    Adobe AEP SDKをTypeScriptで開発したReactNativeアプリに実装する

    こんにちは、エクスチュアの権泳東(權泳東/コン・ヨンドン)です。…

  6. Adobe Analytics

    訪問回数 とは-Adobe Analyticsの指標説明

    これから、この場をお借りして私が学んだことを書いていきます。よろしく…

最近の記事

  1. モダンデータスタックなワークフローオーケストレーションツール…
  2. Streamlit in Snowflakeによるダッシュボ…
  3. Streamlit in SnowflakeによるStrea…
  4. Streamlitを使った簡単なデータアプリケーション作成ガ…
  5. 生成AI機能を活かしたデータカタログ製品「Secoda」を試…
  1. Adobe Analytics

    Launchにおける検証環境の確認方法
  2. ブログ

    ⑥DMPについてー日本に進出していないDMP
  3. Google Apps Script(GAS)

    GASを利用してWebスクレイピングをやってみよう
  4. ブログ

    "Marketo"を使ってみて。パート2
  5. Google Cloud Platform

    Google Compute Engine: 一定時間経過したらタスクを強制終了…
PAGE TOP