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: BigQueryにロードしたデータフィードをDataStudioで…

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

  2. Adobe Analytics

    検索エンジン-有料とは-Adobe Analyticsの指標説明

    今回は検索エンジン-有料について説明いたします。検索エンジン-有料と…

  3. Adobe Analytics

    AdobeAnalytics:WordPressやHTML5内の動画を計測する

    こんにちは、エクスチュアの鈴木です。Adobe Analyti…

  4. Adobe Analytics

    Adobe Analytics:ワークスペースでコンボグラフを作ってみる

    こんにちは。エクスチュアの篠原です。先日のAdobe Ana…

  5. Adobe Analytics

    AdobeAnalytics: スクロールで目標に到達したらカスタムリンク

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

最近の記事

  1. Streamlitを使った簡単なデータアプリケーション作成ガ…
  2. 生成AI機能を活かしたデータカタログ製品「Secoda」を試…
  3. 回帰分析はかく語りき Part2 重回帰分析
  4. 第14回関西DB勉強会-Snowflake Summit参加…
  5. Open Interpreter+VScode+Docker…
  1. Google Tag Manager

    同一サイトにGTMを複数導入する危険性について
  2. Amazon Web Services

    ELB (ALB・NLB・CLB) をサクッと学ぶ
  3. プログラミング

    Node.jsでCSVファイル内のダブルクオートで囲まれたカラム内のカンマを除去…
  4. ブログ

    DirectionAPI+Tableauでドライブ時間の可視化(前編)
  5. ブログ

    ダッシュボードに使うべき10のグラフ①
PAGE TOP