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. Ad Hoc Analysis

    Adobe Analytics: Ad Hoc Analysisでセグメントの条件を一気に追加する方…

    Adobe Analyticsでセグメントを作るとき、「A または B…

  2. Google Analytics

    Cloud FunctionsとOpenWeather APIを使ってGoogle Analytic…

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

  3. Adobe Analytics

    はじめてのAdobe Analytics実装②

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

  4. Adobe Analytics

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

    今回は訪問者数について説明いたします。訪問者数とは期間中にサイトを…

  5. Adobe Dynamic Tag Manager

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

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

  6. Adobe Analytics

    Adobe Analytics:セグメントの落とし穴:滞在時間がおかしくなる

    Adobe Analyticsの持つ機能の中でも特に強力で便利な機能の…

最近の記事

  1. 【GA4/GTM】dataLayerを使ってカスタムイベント…
  2. 【GA4/GTM】dataLayerを活用しよう
  3. ジャーニーマップをデジタルマーケティングの視点で
  4. ChatGPT ProからClaude3 Proへ移行した話…
  5. その分析、やり方あってる?記述統計と推測統計の違い
  1. ブログ

    ①DMPについて
  2. Databricks

    Databricks: Spark DataFramesをJDBCから作成する
  3. ObservePoint

    ObservePoint:強力でアツい機能を持つサイト監査ツールの紹介
  4. Looker

    Looker: 公開されているLookML Blockをクローンして使う方法
  5. IT用語集

    データセット(Dataset)、データソース(Data Source)って何?
PAGE TOP