LoginSignup
0
0

More than 1 year has passed since last update.

【スケジューラ】PayPal Rest APIを利用してみる(Transaction:分析)

Last updated at Posted at 2022-11-03

前回の記事でPayPal Rest APIにGetリクエストを発信し、Transaction情報を取得しファイルに保存しました。
今回は、そのファイルを分析しながらJSON形式のデータを読み解いていきたいと思います。
そして再度、Sharperlightスケジューラのタスクを利用します。
なぜ、Sharperlightスケジューラのタスクを利用しているかというと、このような、つまりRest APIを利用してデータを自前のデータベースに保存および同調させ、Sharperlightの強力なレポーティング機能等を利用して業務に役立つよう可視化するといったソリューションを作成する場合は、同調プロセスを自動化したいという理由からです。

今回の分析タスクを作成するにあたり、本来はPayPal Rest API側のスキーマや取得するデータ構造等の変更によって発生するであろうこちら側の変更作業をできる限り減らしたいので、様々な手法やSharperlightの機能を利用して、それらを実現させていくのですが、今回は解説記事ということで、その辺りは省略します。

データ構造のチェック

取得したJSONデータファイルを開いてみるとこのような構造が拝見できます。
image.png
この一部分の画像には、transaction_detailsということで2つのレコードが表示されており、それぞれのレコードが7つの_infoグループを持っていることが分かります。今回は各レコードのtransaction_infoグループの情報だけを取り出していきます。

transaction_infoグループはどのようなデータ構造になっているのかな?このようになっています。
image.png
更に子情報をもつアイテムも見えますね。それぞれの子情報はこんな感じでした。
image.png
孫はいなさそうですね。
この各レコードのtransaction_info情報をデータベースの[Transaction_Info]テーブルに保存しようという考えです。各レコードのtransaction_info情報には子情報をもつアイテムが存在しますが、それらをフラット化していこうと思います。
つまり、このようにします;
[paypal_account_id]
[transaction_id]
[transaction_event_code]
[transaction_initiation_date]
[transaction_updated_date]
[transaction_amount_currency_code]
[transaction_amount_value]
[transaction_status]
[ending_balance_currency_code]
[ending_balance_value]
[available_balance_currency_code]
[available_balance_value]
[protection_eligibility]

データの読み込み

Sharperlightスケジューラのタスクでデータを読み込む処理を作成していきます。JavaScriptで全部書いてもいいのですが、今回は少し手間を省いていきます。
Sharperlightアプリケーションメニューからスケジューラを起動します。

一般タブ

一般タブではこのような感じでコードグループ説明を記入します。
image.png

アクションタブ

アクションタブに移動して、新規アイコンでアクションを追加します。最初に追加するアクションはクエリの組み合わせアクションです。このアクションでは定義したクエリが返すレコード毎に、別の処理を繰り返し実行することができます。Forループ文のような処理を行うことができます。
クエリを編集ボタンでクエリの作成を開始します。
フィルター領域では、製品システムテーブルにはWebページのテーブル、CSV、JSON、XMLまたはODataを指定します。
URLリンクフィルターには、JSONデータファイルを指定します。(今回は1ファイルのみとしたので、直接指定します)
ファイルを指定すると、エンジンがファイルを分析して、選択可能なアイテムを選択領域に表示します。
開始位置フィルターには、データ構造のルートアイテムであるtransaction_detailsを指定します。
最後に出力領域に今回の対象情報であるtransaction_infoを指定します。
image.png
プレビューボタンで出力値を確認します。各レコードのtransaction_info情報だけが出力されているのが分かります。今回PayPal Rest APIから取得したTransactionのデータは16レコードあったということが分かりますね。
image.png

次に、これら16のレコードを一つ一つ処理していきます。その処理にはJavaScriptを利用します。各出力レコードの参照には出力名{%trans_info}を使用します。

新規アイコンを利用してJavaScriptアクションを追加します。
下部のスクリプト欄にはこのようなコードを記述します。一番最初の行でクエリの組み合わせで戻ってくるデータの一行を受け取ります。後はオブジェクトに変換し、列を一つ一つ処理していきます。途中、子オブジェクトも処理していきます。処理した結果をその都度コンソールに表示させて確認します。
image.png

// Get a record
var output = lib_task.QueryCombinationValueGet('trans_info');
var rec = JSON.parse(output);

// Get columns for the record
var cols = Object.keys(rec);
for (var c in cols){
       if (typeof rec[cols[c]] !== 'object'){
              console.log(cols[c] + " / " + rec[cols[c]]);
              
       }else{       // Processing child Information
              var childRec = rec[cols[c]];
              var childRecCols = Object.keys(childRec);
              for (var cc in childRecCols){
                     console.log(cols[c] + ': ' + childRecCols[cc] + " / " + childRec[childRecCols[cc]]);
              }
       }
}

接続テストボタンで実行すると、このように列名とその値が取得できました。子情報もフラット化できました:ok_hand:
image.png
最後にクエリの組み合わせ終了アクションを追加してループを閉めます。
image.png

あとはこの情報をSharperlightのWriteback(書き戻し)機能を利用して、データベースに書込んでいきます。この記事ではある期間の限られたTransactionデータを例として取得して分析をしましたが、実際にはこのような処理を発展させて全てのデータを同調させ、そのデータを利用して様々なレポートの作成を可能にします。
デルタ更新機能などを組み込んだスケジューラのタスクでこの処理を自動化し、前回取得したデータ以降に作成された最新のデータのみを取得しデータベースに追加していきます。

長くなったので今回はここまで。

では、失礼します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0