スマートデバイスとクラウドサービスとの連携を容易にするiPaaSの活用② ～定期的にFitbit APIから情報を取得し、Databaseに保管してみた～

# はじめに

[前回の記事](https://qiita.com/ryota_n/items/5ee949399e039f54be66)ではAlexaからの要求をもとにiPaaSを経由してCloudantから情報を取得しました。今回は、iPaaSのスケジューラー機能でFitbitから定期的に情報を取得し、Object Storageに保管する処理を実施してみましたので紹介します。

アーキテクチャーの概要は以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/81b6a1e3-046e-69c7-caa1-efccb88b299f.png)

# 0. 事前準備

まずは、FitbitとICOS（IBM Object Storage）の準備を進めていきます。

## 0.1 Fitbitのアプリケーション設定

FitbitのAPIに関するSwaggerファイルは[こちら](https://dev.fitbit.com/build/reference/web-api/explore/fitbit-web-api-swagger.json)で提供されていますので、こちらを取得しておきます。

また、このAPIを呼び出す際には、アプリケーション登録が必要です。
[developerサイト](https://dev.fitbit.com/)にログインし、以下の画面から設定していきます。

この中の「Redirect URL」については、App Connect on Cloudの設定を記入する必要がありますので、後続の手順で確認出来たら更新します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/1494971f-e66e-28ca-b63c-147b0a6356f5.png)

## 0.2 IBM Cloud Object Storageの設定

IBM Cloudの無料枠でICOSインスタンスを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/7be498d9-2ac1-7392-9723-dd2fd8364aab.png)

インスタンス作成後は、コンソールにアクセスできますので、事前にFitbitの情報を保管するバケットを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/9b8e4659-14ed-50b4-0f64-641213feda04.png)

今回は、以下のような設定で作成しています。
また、外部からのアクセスになりますのでパブリック・アクセスを有効化しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/6b1c7012-5c9d-ce3f-7d19-c0b94aeadec0.png)

接続のためのエンドポイントの確認と、資格情報を登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/1e9d24d7-8d44-0017-60c9-d29c0cb31ca5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/c819c523-5f50-d7a1-8adb-7a31c0690afc.png)

# 1. App Connectの設定

今回は、スケジューラー起動を実装しますので、「Create a event-driven flow」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/403a7b36-1091-cc16-cba4-ed6232417bfb.png)

処理は以下のような流れとなります。

1. Scheduler でFlow起動
2. APIでFitbitからデータ取得
3. IBM Object Storageへオブジェクト作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/6f2995e9-bd52-7852-d0d1-1893c21303fd.png)

各処理は以下のように設定していきます。

## 1.1 SchedulerでFlow起動

ToolboxからSchedulerを登録します。
例えば、1日に1回フローを起動する場合は、以下のような設定となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/5811b0e1-68f1-5026-4de1-ebe346cbd466.png)


## 1.2 APIでFitbitからデータ取得

フローからAPIを呼び出すためには、事前にカタログに外部APIを登録する必要があります。
以下のように左のカタログメニューからAPIを登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/0537baa7-4b1c-7598-34cc-03374624d01a.png)

次の画面で手順0.1で取得したSwaggerファイルをインポートします。
しかし、そのままではインポートしても接続ができなかったため、今回は「paths」の「/oauth2/token」、「/1.1/oauth2/introspect」を削除する必要がありました。現在（2022年9月）のApp Connectのバージョンでは、OAuthのパス設定が接続動作時に悪影響をもたらしていると推測されます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/075eb157-8424-f31b-ad97-18318ec7cab4.png)

App Connectのアカウントの登録画面では、手順0.1で登録したアプリケーションのClient IDを設定し、Fitbitのアプリケーションには、ここに提示されているRedirect URIを設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/8f36afbe-2841-ea17-8c98-2b570431aa60.png)

APIやアカウントが無事に登録されたらフローの開発画面に戻ります。
以下のように登録したAPIとアカウントを利用することができます。
以下の例では、心拍数情報を取得するgetHeartByDatePeriodを使用して、date欄に本日の日付を設定し、期間は1日分取得しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/092ff0c4-1c22-24ff-2655-83d814be6889.png)


## 1.3 IBM Object Storageへオブジェクト作成

今回は、ICOSへObjectを作成したいので、「Create Object」アプリケーションを追加します。
また、ICOSのアカウント登録は、手順0.2で設定した値をもとに以下のように設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/2b356ea9-5943-d859-bf60-b409fa194e96.png)

アカウントが登録できると、以下のようにBucketの情報が取得できます。
あとは、用途に合わせて、Object nameや、content、Content Typeを設定していきます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/b989e355-4357-2eea-ae3a-0d643fe576a8.png)

以上で必要な設定は終了です。

# 2. 稼働確認

フローをスタートすると、スケジューラーで起動されます。
起動したことは、左メニューのログにも出力されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/80562a9b-a928-9892-87ea-ceb1b6d6d3af.png)


フローが正常に起動すると、ICOSのバケットにオブジェクトが作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/403443/34947d32-6edd-b38b-6eca-0b1edc9d904b.png)



以上です。