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 Experience Cloud

    Adobe Summit 2020レポート: Building for a Cookie-less …

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

  2. Adobe Experience Cloud

    Adobe Summit 2020レポート: 5 Marketing Trends That Wil…

    こんにちは。エクスチュアインターン生の畝川(せがわ)です。今回…

  3. Adobe Analytics

    次のページとは-Adobe Analyticsの指標説明

    今回は次のページについて説明します。次のページとはサイトを訪問した…

  4. Adobe Analytics

    Adobe Analytics: カスタムリンク計測を1行で書く

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

  5. Adobe Dynamic Tag Manager

    【Adobe Analytics,Launch】進化するDebugger

    こんにちは!林です。みなさんはもう新しいDebuggerを試さ…

最近の記事

  1. 回帰分析はかく語りき Part3 ロジスティック回帰
  2. GCSへのSnowflake Open Catalogによる…
  3. VPC Service Controlsで「NO_MATCH…
  4. モダンデータスタックなワークフローオーケストレーションツール…
  5. Streamlit in Snowflakeによるダッシュボ…
  1. Amazon Web Services

    ELB (ALB・NLB・CLB) をサクッと学ぶ
  2. マーケティング

    ジャーニーマップをデジタルマーケティングの視点で
  3. Google Analytics 4

    【GA4/GTM】dataLayerを使ってカスタムイベントを発生させてみよう
  4. Google Apps Script(GAS)

    GoogleスプレッドシートのデータをGASで整理する【setValue・set…
  5. Google Cloud Platform

    Looker: サンバーストグラフを使って階層データを可視化する
PAGE TOP