タイトル通りアフィリエイト広告のバリューコマースのレポート情報を定期的に取得してSlackに連携する方法を紹介します。アフィリエイトサイト登録を行っている方が前提となります。
この記事ではブラウザ上でAPIが実行できるところまで試してみます。
まだ未登録の方はバリューコマース登録画面から登録してみてください。
レポートAPIを利用するまでの流れ
まずは管理画面にログインし「レポートAPI」をクリックします

認証用のキーを取得する
レポートAPI画面上にあるAPI認証キーのCLIENT_KEY、CLIENT_SECRETを取得します。

次に https://uic.jp/base64encode/ にアクセスして「テキストエリアから」の部分に上で取得した2つの文字列を|(パイプ)で接続して入力します。 例)YYYY|XXXX
区切り文字欄を空白にして表示ボタンをクリックすることで上部の結果画面にエンコード後の文字列が表示されるので控えます。次のトークン取得時の署名情報として利用します。

続けてChrome拡張機能を使ってWebAPIを利用しますのでこちらのページから拡張機能をインストールします。
これで準備完了です。レポートAPIを利用するにはトークンの取得→レポートAPI実行の流れになりますので、まずはトークン取得を行いましょう。
トークン取得APIを実行
利用マニュアルにアクセスしてAPIの仕様を確認します。以下の通り拡張機能にて赤線枠部分を入力してください。
URL部分は「https://api.valuecommerce.com/auth/v1/affiliate/token/?grant_type=client_credentials」を入力します。
HEADERS部分はマニュアル通りに事前に控えた署名情報を入力します。この時 Bearerの後に半角スペースが入るため注意してください。

成功すると以下のように200 OKとなりレスポンスが返ってきます。ここで赤枠内の bearer_token として返却された値を控えておきます。この値を利用することでレポートAPIが実行可能になります。

レポートAPIを実行する
次にレポートAPIのマニュアルを参照します。次は以下の通り赤枠線内を指定して実行してください。
URL部分は「https://api.valuecommerce.com/report/v2/affiliate/transaction/?from_date=2019-09-01」を入力します。 ※最後の日付部分は取得開始日になるため適当な値に変更してください。
HEADERS部分はAuthorizationのBearerの後に前回取得したbearer_token文字列を指定してください。

成功するとレスポンスのrowdata部分に注文データが返却されます。

日付指定の他にも広告主やプログラムの指定などが出来ますのでマニュアルを参考にして色々試してみてください。
フローを考える
ここまでの対応フローは以下の2点でした。
1.バリューコマースAPIでToken情報を取得する
2.1で取得したToken情報を使って注文情報取得APIから注文情報を取得する
最後に以下を導入して完了になります。
3.2で取得した注文情報をSlackで連携する
1,2のAPI実行をGoogleAppsScriptで作成
バリューコマースAPIでToken情報を取得する
手動で取得したレスポンスを見つつ、Token情報取得APIのレスポンスからToken情報を取得して表示します。
// 起動するファンクション
function myFunction() {
// バリューコマース管理画面からbase64エンコードした情報
var apiToken = 'XXX';
// token取得
var tokenParams = {'headers' : {'Authorization' : 'Bearer ' + apiToken}};
var resTokenJson = UrlFetchApp.fetch('https://api.valuecommerce.com/auth/v1/affiliate/token/?grant_type=client_credentials', tokenParams);
// JavaScriptで扱いやすくするため戻ってきた結果をJsonからJavaScriptのオブジェクトに変換
var res = JSON.parse(resTokenJson);
// token情報を抜き出し
Logger.log(res.resultSet.rowData.bearer_token);
}
まずは結果をLoggerで出力していますので、メニューの▶から実行後に、メニューの表示→ログから注文情報が出力されていることを確認します。
注文情報APIから注文情報を取得する
取得したToken情報を使って注文取得APIを実行します。同じくレスポンスから必要な情報を抜き出してログ表示しています。上記と同じく実行後にログ出力に問題ないことを確認します。
// 起動するファンクション
function myFunction() {
// バリューコマース管理画面からbase64エンコードした情報
var apiToken = 'XXX';
// token取得
var tokenParams = {'headers' : {'Authorization' : 'Bearer ' + apiToken}};
var resTokenJson = UrlFetchApp.fetch('https://api.valuecommerce.com/auth/v1/affiliate/token/?grant_type=client_credentials', tokenParams);
// JavaScriptで扱いやすくするため戻ってきた結果をJsonからJavaScriptのオブジェクトに変換
var res = JSON.parse(resTokenJson);
// token情報を抜き出し
var token = res.resultSet.rowData.bearer_token;
// 取得したTokenを使って注文APIを実行
var params = {'headers' : {'Authorization' : 'Bearer ' + token}};
// 仮:from_dateは固定で注文データが取れる日までさかのぼって指定
var resJson = UrlFetchApp.fetch('https://api.valuecommerce.com/report/v2/affiliate/transaction/?from_date=2019-09-01', params);
var res = JSON.parse(resJson);
// 注文情報を抜き出し
var orderInfo = "";
// 注文情報は複数返ってくるのでループ内で注文情報を取得
for (var cnt in res.resultSet.rowData) {
// 会社名と報酬額だけを抜け出してカンマ区切りで文字列作成
orderInfo = orderInfo + res.resultSet.rowData[cnt].merchantName + ',' + res.resultSet.rowData[cnt].affilPayment + '\n';
}
Logger.log(orderInfo);
}
注文情報をSlackで連携する
最後に上記で取得したorderInfoをSlackAPIで送信して完了です。from_dateが固定のままだと毎回同じ注文情報が取得されてしまうので、前日分だけを取得するように変更します。
Slackに送信するファンクションの作成やAPIの利用方法はこちらの記事を参照ください。
GoogleAppsScriptでAppStore新着をSlack連携する
// 起動するファンクション
function myFunction() {
// バリューコマース管理画面からbase64エンコードした情報
var apiToken = 'XXX';
// token取得
var tokenParams = {'headers' : {'Authorization' : 'Bearer ' + apiToken}};
var resTokenJson = UrlFetchApp.fetch("https://api.valuecommerce.com/auth/v1/affiliate/token/?grant_type=client_credentials", tokenParams);
// JavaScriptで扱いやすくするため戻ってきた結果をJsonからJavaScriptのオブジェクトに変換
var res = JSON.parse(resTokenJson);
// token情報を抜き出し
var token = res.resultSet.rowData.bearer_token;
// 取得したTokenを使って注文APIを実行
var params = {'headers' : {'Authorization' : 'Bearer ' + token}};
// 前日日付を取得してfrom_dateとto_dateに指定
var yesterday = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy-MM-dd');
var resJson = UrlFetchApp.fetch('https://api.valuecommerce.com/report/v2/affiliate/transaction/?from_date=' + yesterday + '&to_date=' + yesterday, params);
var res = JSON.parse(resJson);
// 注文情報を抜き出し
var orderInfo = "";
// 注文情報は複数返ってくるのでループ内で注文情報を取得
for (var cnt in res.resultSet.rowData) {
// 会社名と報酬額だけを抜け出してカンマ区切りで文字列作成
orderInfo = orderInfo + res.resultSet.rowData[cnt].merchantName + ',' + res.resultSet.rowData[cnt].affilPayment + '\n';
}
// 注文がある場合のみSlackに送信する
if (orderInfo) {
slackPost(orderInfo)
}
}
上記のようにコードを修正したら最後にトリガ登録して終了です。
まとめ
今回はバリューコマースのAPIを例に説明しましたが、何らかのAPIで情報を取得し、加工して、Slackなどに連携するパターンはよく使います。
今回の例を参考に他のパターンでも試していただければと思います。