こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。
今回はSAINT分類データをAdobe I/OのAPIを使って取得する方法についてです。
AAのUIからもSAINT分類データをTSV形式でダウンロードする事が可能です。
しかし、ファイルサイズが1MBを超えてしまう場合、FTPというレガシーなプロトコルを使ってAdobe指定のFTPサーバーからファイルをダウンロードするという残念なエクスペリエンスを強いられます。
というわけで、もっとモダンなエクスペリンスを求めるためにAdobe I/OのAPIを使ってSAINT分類データを取得する処理を実装しました。
作ったものはgithubに置いてありますので、以下要所を説明します。
https://github.com/youngdongk/get-saint-api
Adobe I/Oプロジェクトを作成する
Adobe I/Oコンソールを開いて、「Create new project」からプロジェクトを作成します。
作成したら、「Add API」で「Adobe Analytics」を選んで追加します。
必要な権限を追加してから、キーペアをzipファイルでダウンロードします。
認証の作成では「JWT」を選択してください。
JWT認証を実装する
ここからが本題。
JWT認証をしてAPI実行に必要なトークンを生成する処理をNode.jsで実装します。
まずは簡単なプログラムを書きました。
これ↓です。
JWTペイロードを生成して認証サーバーにPOST送信して24時間有効なトークンを取得する、という処理を実装しました。
このNode.jsプログラムの実行方法は後述します。
ClassificationsAPIを実装する
続いて、ClassificationsAPIを実装します。
これまたNode.jsでプログラムを作成しました。
これ↓です。
SAINT分類データのエクスポートジョブを生成してからデータを取得するために、CreateExport, GetStatus, GetExportというメソッドを実行するための処理を実装しています。
このNode.jsプログラムの実行方法は以下で説明します。
プログラム実行のためのbashスクリプト
さて、ここまでに作成したtoken.jsとget_saint_api.jsを実行するためのbashスクリプトを書きます。
#!/bin/bash set -eu export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin ##設定ここから## # API認証情報 export ADB_ORG_ID="123456789@AdobeOrg" #OrgID export ADB_TECH_ACC_ID="abcdefg@techacct.adobe.com" #Tech Account ID export ADB_CLIENT_ID="0987654321" #client ID export ADB_CLIENT_SECRET="1234-5678-abcd-efgh" #client secret # エクスポート設定 export RSID="exturexturecom" export VAR="trackingcode" export EMAIL="exture@example.com" export DATE_START="2010-01-01" export DATE_END="2020-12-31" # ファイル名定義 export SAINT_JSON="saint.json" export SAINT_TXT="saint.txt" export LOAD_TXT="load.txt" ##設定ここまで## # 空ファイル作成 : > ${SAINT_JSON} : > ${SAINT_TXT} : > ${LOAD_TXT} export TOKEN=$(node token.js) # job作成 export JOB_ID=$(node exec_saint_api.js "CreateExport") echo "JOB_ID: ${JOB_ID}" # status確認 sleep 60 export FILE=$(node exec_saint_api.js "GetStatus") echo "FILE_ID: ${FILE%,*}" echo "PAGE_NUM: ${FILE#*,}" # download node exec_saint_api.js "GetExport" #jqでJSONをCSV変換 cat ${SAINT_JSON} |jq -r '.[]|.data[]|.row|@csv' > ${SAINT_TXT}
何をやってるかと言うと、まずAdobeI/Oのコンソールで作成したAPI実行に必要なJWT認証情報を環境変数として定義してます。
これらは全てAdobeI/Oコンソールから作成・取得出来ます。
続いて、SAINT分類データの取得に必要なAdobeAnalyticsのレポートスイートIDや変数名、通知先メアドなどを環境変数に持たせます。
出力するファイル名も環境変数で定義してあります。
そしてこのbashスクリプトを実行すると、まずはtoken.jsを使ってJWT認証を行ってトークンを取得します。
このトークンを使って、SAINT分類データのエクスポートジョブの作成から分類データの取得までをget_saint_api.jsが実行してます。
JSONファイルをCSV変換する
APIで取得した分類データはJSON形式になってます。
そのままではExcelやエディタで編集出来ないので、jqコマンドを使ってCSVに変換してます。
jqコマンドは以前↓の記事でも使いましたが、JSONを操作するためのLinuxコマンドです。
Linux Tips: コマンドラインでJSONをCSVに変換する
とても便利なので使い方を覚えると役に立ちます。
CSVに変換したSAINT分類データはExcelで編集したり、またはAdobeAnalyticsのDatafeedと一緒にBigQueryにロードしてBIツールで分析に使うのも良いでしょう。
もちろんBigQuery以外のデータウェアハウスに入れてもよいですし。
TL;DR
AdobeAnalyticsのSAINT分類データを取得するために、AdobeI/OのAPIを実装する方法について紹介しました。
AdobeI/OのAPIではJWT認証を使います。
また、APIで取得したJSONデータはCSVに変換すると扱いやすくなります。
あと、どうでも良いんですけど今はもう「SAINT」って言わずにただの「分類」って言うみたいですね。
どうでも良いです。
弊社では、Adobe Analytics認定エキスパート資格・Google Cloud認定プロフェショナルデータエンジニア資格・Linux Professional Institute認定資格を持ったエンジニア達が各種マーテックツールの導入実装コンサルティングサービスや、GCP/AWS/Azureなどのパブリッククラウドを使ったデータ分析基盤構築コンサルティングサービスを提供しております。
お問い合わせはこちらからどうぞ。