Fitbit Snowflake

External Network Accessを使ってSnowflakeとFitbitAPIを繋いでみた話

投稿日:

FitbitはAPIがしっかり整備されていて、OAuth2 endpoint経由でデータが取り放題。
せっかくなので、話題のExternal Network Access(2023年12月現在 PuPr)を試してみようと思う。
つまり、FitbitAPI→Snowflakeをやってみようと思う。

Fitbit APIを使用するにはOAuth2.0 Authorizationを通す必要がある。
Snowflakeの公式にOAuth2.0 Endpoint経由でGoogle翻訳APIと連携する段取りが書かれていて、
それをそのままFitbit APIのものに差し替えるだけで動いた。

外部ネットワークアクセスの例

外部ネットワークアクセスについては以下。

2016年6月に書いた記事。phpで検証をしていた。
この辺りからバッテリーがダメになる度に新しいFitbit Charge(1,2,3)を買って溜めてきた。
この間、FitbitがGoogleに買われてしまったり、スマホアプリが大幅に変わったり、色々あった。
基本的な機能はずっと動いているので、7年分のデータが溜まっているんじゃないかな、と期待。

Fitbit API側の準備

OAuth2連携に必要な情報を dev.fitbit.com から取得する必要がある。
Authorization Code Grant Flow with PKCE

こちらを参考にさせていただいた。

以下を準備すればOK。

  • access-token
  • refresh-token
  • client-id

Snowflakeでリソース作り

Snowsightでポチポチとリソースを作っていく。

最後に外部アクセス統合を作成する。
ストレージ統合や、Notification統合など、統合の作成にはACCOUNTADMINが必要で、
同様に外部アクセス統合の作成にはACCOUNTADMINが必要とのこと。

外部ロケーション(ネットワーク)にアクセスするUDFsを書くロールを作成する。
UDFsを書く際に、シークレットを参照する必要がある。
UDFsを書けるロールにシークレットのREAD権限を付与しておく必要がある。
以下、そのままでは SECURITYADMINがDB・スキーマに触れないので環境により修正が必要。

本体の実装

PythonでOAuth2 Endpoint経由でFitbit APIにGETリクエストを投げるFunctionを書く。
最初、トークンのexpire時のrefreshを自力で書いていたが、get_oauth_access_token(‘cred’)により、
自動的にrefreshしてくれていることに気づいた。

実行結果は以下。1日毎の歩数を1ヶ月分取得できた(恥…)。

結論

PuPrのExternal Network Accessを使用して、FitbitAPI→Snowflakeが出来ることを確認した。
(途中、自動的にトークンをrefreshしてくれている、と書いたが、何度かExpireさせないと良くわからない。)
相手がOAuth2.0ならとても簡単に繋ぐことができると思う。
次は、せっかくなのでSiS(Streamlit in Snowflake)で可視化してみたりしたい。

-Fitbit, Snowflake
-

Copyright© ikuty.com , 2024 AllRights Reserved Powered by AFFINGER4.