クラウドカメラサービスSafie の API をドライバー化:各種ツールから接続してみた

Safie

こんにちは。CData Software Japanリードエンジニアの杉本です。

本記事では、各種 Web API を ODBC / JDBC / ADO.NET といった標準のDB接続規格でアクセスできるようにするCData API Driverを用いて、Safie の API に各種ツールから接続する方法を紹介します。

ExcelやAccess・Power BIなどのエンドユーザーが利用するUIベースのツールはもちろん、Visual StduioやEclipseといった開発ツールからも接続することが可能です。

対象 API

Safieはネットワークカメラ・クラウド録画サービス市場で圧倒的なシェアを誇るクラウドカメラサービスです。ハウスメーカーや物流、製造など様々な業界で利用されています。

https://safie.jp/

Safie ではデベロッパー向けのAPI も提供されており、API を通じてデバイスや人物検出結果のデータ取得やスナップショットの作成などを実行することができ、様々なサービスとの連携に活用することができるようになっています。

実現イメージ

この記事では Safie API に対してBI やETL/EAI など、様々なツールから接続します。しかしながら、各API  は単純にツールと接続・連携することはできません。

各ツールがどのようにWeb API 側へリクエストを投げるべきかの判断材料や各種認証方法の処理、メタデータの情報等が無いためです。そのためには基本的にカスタムコネクタを作るか、プログラムを組まなければいけません。

そこで、CData API Driver を用いて、このボトルネックを解決します。

まず、各ツールからはODBCやJDBCインタフェースでSQL(Select文)をCData API Driverに向けて発行してもらいます。そのリクエストを受け取った CData API Driverは、Safie API のエンドポイントに対して、SQL文を解釈し、HTTPリクエスト発行します。

リクエスト後、JSON フォーマットで返ってきたデータをCData API Driver が各種インタフェースフォーマットにデータを変換してツールに返します。

これにより、各種ツールからアドホックにSQLによるリクエストがあったタイミングで最新のデータをSafie API から取得することが可能となります。

各種接続シナリオと必要なツール

CData API Driver は様々なツールとの接続に利用できますが、今回は以下のツールを用いて接続する方法を解説していきます。

- Excel(Excel-addin で利用)
- Access(ODBC 接続で利用)
- PowerBI (Power BI Connector 接続で利用)
- ASTERIA Warp(JDBC Driver 接続で利用)
- CDataSync 

なお、CData API Driverは上記以外にも様々なツールと連携することが可能です。

https://www.cdata.com/jp/kb/tech/rest-article-list.rst

テーブル(ビュー)一覧

CData API Drvier で Safie APIに接続するためには専用の設定ファイル(Profile)が必要になります。

Safie API Profile では、以下のテーブル(ビュー)を提供しています。用途に合わせて、接続してみてください。

Name

API

Link

Devices

デバイス一覧取得

https://developers.safie.link/reference/api#tag/Devices-v2/operation/get-v2-devices

Events

イベント一覧取得

https://developers.safie.link/reference/api#tag/Events-v2/operation/get-v2-devices-events

Locations

位置情報取得

https://developers.safie.link/reference/api#tag/Devices-v2/operation/get-v2-devices-location

Media

メディア一覧取得

https://developers.safie.link/reference/api#tag/Devices-v2/operation/get-v2-devices-media

MovieClips

ムービークリップ一覧取得

https://developers.safie.link/reference/api#tag/Movie-Clips-v2/operation/get-v2-movie_clips

PdCaptures

人物検出結果一覧の取得

https://developers.safie.link/reference/api#tag/AI-People-Count-v2/operation/get-v2-devices-pd-captures

Shares

シェア一覧取得

https://developers.safie.link/reference/api#tag/Shares-v2/operation/get-v2-shares

Snapshots

スナップショット一覧取得

https://developers.safie.link/reference/api#tag/Snapshots-v2/operation/get-v2-snapshots

StandardEvents

標準イベント一覧取得

https://developers.safie.link/reference/api#tag/Devices-v2/operation/get-v2-devices-standard-events

なお、Events やPdCaptures などはAPI の仕様上、データの取得のためにDeviceId などのを条件指定する必要があります。

以下にクエリするための条件式をまとめておいたので、参考にしてみてください。

SELECT * FROM Devices;

SELECT * FROM Events WHERE DeviceId = 'YOUR_DEVICE_ID' and Timestamp > '2023-12-01T01:57:00+09:00' and Timestamp < '2023-12-01T23:57:00+09:00';
SELECT * FROM Events WHERE DeviceId IN (SELECT DeviceId FROM Devices) and Timestamp > '2023-12-01T01:57:00+09:00' and Timestamp < '2023-12-01T23:57:00+09:00';

SELECT * FROM Locations WHERE DeviceId = 'YOUR_DEVICE_ID';
SELECT * FROM Locations WHERE DeviceId IN (SELECT DeviceId FROM Devices);

SELECT * FROM Media WHERE DeviceId = 'YOUR_DEVICE_ID' and Timestamp > '2023-12-01T01:57:00+09:00' and Timestamp < '2023-12-01T23:57:00+09:00';
SELECT * FROM Media WHERE DeviceId IN (SELECT DeviceId FROM Devices) and Timestamp > '2023-12-01T01:57:00+09:00' and Timestamp < '2023-12-01T23:57:00+09:00';

SELECT * FROM MovieClips WHERE DeviceId = 'YOUR_DEVICE_ID';
SELECT * FROM MovieClips WHERE DeviceId IN (SELECT DeviceId FROM Devices);

SELECT * FROM PdCaptures WHERE DeviceId = 'YOUR_DEVICE_ID' and CapturedAt > '2023-12-11T01:57:00+09:00' and CapturedAt < '2023-12-11T23:57:00+09:00';
SELECT * FROM PdCaptures WHERE DeviceId IN (SELECT DeviceId FROM Devices) and CapturedAt > '2023-12-01T01:57:00+09:00' and CapturedAt < '2023-12-01T23:57:00+09:00';

SELECT * FROM Shares WHERE DeviceId = 'YOUR_DEVICE_ID' and View = 'none';

SELECT * FROM Snapshots WHERE DeviceId = 'YOUR_DEVICE_ID';
SELECT * FROM Snapshots WHERE DeviceId = 'YOUR_DEVICE_ID' and TakenOn > '2023-12-12T01:57:00+09:00' and TakenOn < '2023-12-12T23:57:00+09:00';
SELECT * FROM Snapshots WHERE DeviceId IN (SELECT DeviceId FROM Devices) and CapturedAt > '2023-12-01T01:57:00+09:00' and CapturedAt < '2023-12-01T23:57:00+09:00';

SELECT * FROM StandardEvents WHERE DeviceId = 'YOUR_DEVICE_ID' and Timestamp > '2023-12-11T01:57:00+09:00' and Timestamp < '2023-12-11T23:57:00+09:00';
SELECT * FROM StandardEvents WHERE DeviceId = 'YOUR_DEVICE_ID' and Timestamp > '2023-12-11T01:57:00+09:00' and Timestamp < '2023-12-11T23:57:00+09:00' and Type = 'motion';

Safie API 利用準備

Safie のAPI をCData 製品から利用するためにはAPI Key が必要になります。API Key の取得のためには、以下のSafie Developers サイトでユーザー登録が必要なので、この登録を最初に行います。

https://developers.safie.link/signup

API キー認証アプリケーションの登録については下記のドキュメントを参考にしてみてください。

https://developers.safie.link/tutorial/api-key

登録が完了し、デバイスと紐づけを行ったら、以下のAPI キーを控えておきます。

API データ処理用 設定ファイルを作成

続いて、Safie の API を CData API Deiver が解釈できるように設定ファイル(API Profile)を作成します。

すでに私が作成したものがあるので、以下のURLからダウンロードしてください。

https://cdatajbuilds.s3.ap-northeast-1.amazonaws.com/APIProfiles/Safie.apip

保存先フォルダは後ほど使用するので「C:\APIProfiles\Safie.apip」といったパスで、ツールからアクセスが可能な任意のフォルダに配置してください。

CData API Driver のインストール

各種ツールとSafie API を繋ぐために必要となるCData API Driver をインストールします。

基本的なインストール・設定方法は各種Driver 共通ですので、ここではODBC Driver を例に説明します。

まず、CData API ODBC Driver の30日間の評価版をダウンロードします。ダウンロードの際には、Email の登録が必要となります。

https://www.cdata.com/jp/apidriver/download/

ダウンロードしたsetup.exeファイルを自分が利用したいツールがインストールされているマシンでセットアップします。インストールウィザードに従い、EULAを確認した上でセットアップを完了します。

※途中、ライセンスサーバーへのオンラインアクティベーションが行われるためネットワーク環境に接続されている必要があります。

インストールが完了すると、ODBCのDSN設定のウィンドウが立ち上がります。

以下の項目をセットし、「接続のテスト」をクリックします。

プロパティ名

備考

Profile

C:\APIProfiles\Safie.apip

ダウンロードしたProfile のパスを指定

Profile Settings

APIKey=your_api_key;

事前に取得したAPI Key を指定

これで CData API Driver から Safie API への接続が完了します。

接続完了後、データモデルタブから利用できるビューやカラム、データのプレビューが実施できます。

それでは実際に各種ツールからの接続方法を解説していきましょう。

Excel から Safie API に接続(Excel Add-in for API)

Excel からの接続には「CData Excel Add-in for API」を使います。

CData Excel Add-in for API をインストール後、Excelを立ち上げるとCDataタブが追加されていることがわかります。このタブから各種操作を実施します。

接続を開始するには、CDataタブから[取得元 API]をクリックします。

最初に接続するためのウィザードが表示されるので、「CData API Driver のインストール」の内容と同様に各種パラメータを入力します。

接続後、対象テーブルを選択し、クエリを編集の上、「OK」をクリックします。

必要に応じて、条件式も指定することができます。

クリック後、対象のデータが一括で取得できます。

Access リンクテーブル から Safie API に接続(CData API ODBC Driver)

次はCData ODBC Driverを利用して、Access リンクテーブルから接続してみたいと思います。

あらかじめ新規にAccess を立ち上げて、空のデータベースを作成しておきましょう。

続いて「外部データ」タブから「新しいデータ ソース」→「他のソースから」→「ODBC データベース」を選択します。

ウィザードが表示されるので「リンクテーブルを作成」を選択し、「OK」をクリックします。

データソースの選択では「コンピューターデータソース」から事前に作成したCData API Driver用DSNを選択し「OK」をクリック

テーブルの一覧が表示されるので、任意のテーブルを選択し「OK」をクリックします。

設定後、リンクテーブルが追加され、以下のようにSafie のデータを閲覧することができるようになります。もちろん、通常通りクエリデザイナーでも使用可能です。

PowerBI から Safie API に接続(CData API Driver for Power BI)

最後にCData ODBC Driver を用いて、Power BI からSafie のデータを取得します。

PowerBI Desktop を起動して、「データを取得」をクリックします。

データ接続先一覧の中から「CData API」を選択し、「接続」をクリックします。

データソース名は先程登録したSafie のDSNを入力し「OK」をクリックします。

テーブルの一覧から対象となるテーブルを選択し「読み込み」をクリックします。

以下のようにSafieのデータを読み込みことができます。

条件式を含めてクエリしたい場合は、Advanced Options のSQL statement を利用しましょう。

あとはPoewr BI の機能を用いて、ビジュアライズに利用することができます。

ASTERIA Warp から Safie API に接続(CData JDBC API Driver)

ASTERIA Warpでは、フローデザイナーを使って、データ処理のプロセスを作成します。

フローデザイナーの基本的な利用方法についてはWarpの[フローデザイナー操作ガイド](https://help.asteria.com/documentation/warp/ja/current/flow/designer/index_guide.html)を参照してみてください。

CData JDBC API Driver はインストール後、「cdata.jdbc.api.jar」と「cdata.jdbc.api.lic」のファイルをAsteriaのドライバーフォルダ(asteriahome5\system\lib\drivers)に登録します。

その後、ASTERIA Warpを立ち上げて、フローデザイナーにアクセスし、CData JDBC Driverを使用するために接続を追加します。

画面左のコネクションペイン上にある電源ボタンをクリックをクリックすると、「コネクションの作成」ダイアログが表示されます。

「接続種別」として「RDB」を選択、「名前」に分かりやすい名前を設定し「OK」をクリックします。


作成したコネクションをダブルクリックすると、画面右のインスペクタに接続プロパティが表示されます。「基本」タブでドライバーのパスとURLをそれぞれ設定します。        

プロパティ名

備考

ドライバーのパス

例)C:\asteriahome5\system\lib\drivers\cdata.jdbc.api.jar

 

URL

jdbc:api:Profile=C:\APIProfiles\Safie.apip;ProfileSettings="APIKey=your_api_key;";

 

構成後、「接続のテスト」を実行して、成功すればOKです。

これでコネクションの作成は完了です。あとは、フロー上でデータベースタブにある「RDBGet」のコンポーネントを使って、データの取得が行なえます。

「RDBGet」フローに配置し、ダブルクリックします。

コネクションの選択ウインドウが表示されるので、先程作成したSafieのコネクションを選択しましょう。

その後、SQLビルダーが表示されるので、取得したいデータが格納されている、任意のテーブルとカラムを選択します。

あとは、「モデルにSQLを適用する」をクリックし「SELECTテスト」でデータが正常に取得できているかを確認します。

以下のようにデータが参照できれいればOKです。設定を保存してSQLビルダーを閉じます。

あとは Asteria Warp の機能で様々なサービスとSafie のデータの連携を実現できます。

CData Sync から Safie に接続

https://www.cdata.com/jp/sync/

CData Sync ではデータソースとして、Safie に接続することができます。

CData Sync Windows版の場合は「Safie.apip」のプロファイルをSyncの本体が存在するフォルダの「www\app_data\profiles」に配置してください。profilesフォルダが存在しない場合は手動で作成してください。

> C:\ProgramData\CData\sync\profiles

Cross-Platform版の組み込みJettyで構成している場合は、以下のフォルダにapipファイルを配置します。

> /opt/sync/profiles

配置後、CData Sync を起動すると以下のようにデータソースとして Safie コネクタが利用できるようになります。

接続プロパティは以下の通り設定します。入力後、「保存およびテスト」ボタンをクリックし、接続テストが完了すればOKです。

プロパティ名

備考

Profile

C:\APIProfiles\Safie.apip

ダウンロードしたProfile のパスを指定

Profile Settings

APIKey=your_api_key;

事前に取得したAPI Key とAPI Token を指定

併せて、任意の同期先の接続情報も構成しておきましょう。

接続完了後、新しくジョブを作成します。

先程作成した Safie のコネクションを選択します。

ジョブを作成した後は、Safie の同期対象となる任意のテーブルとしてタスクを追加しましょう。

必要に応じてクエリを調整し、条件指定を追加することができます。

例えばStandardEvents で条件指定を行いたい場合は、以下のように指定することが可能です。DATE TIME関数を利用して、アドホックにデータを取得することも可能です。

REPLICATE [StandardEvents] SELECT * FROM StandardEvents WHERE DeviceId = 'XXXXXX' and Timestamp > '2023-12-11T01:57:00+09:00' and Timestamp < '2023-12-11T23:57:00+09:00';

データのプレビュー画面で、実際に取得が成功しているかどうかを確認できました。

あとは、任意のスケジュールを指定してデータのレプリケーションを実行できます。

試しに手動で実行してみると、それぞれのレプリケーション件数が結果として表示されます。

RDBの中でもレプリケーションされたデータが確認できました。

終わりに

これら以外にもCData API Driverは各種ETLツールや帳票ツールなどからも接続することが可能です。

以下のCData オンラインナレッジベースには、各種ツールからの接続方法を紹介した記事が多数掲載されているので、是非見てみてください。

https://www.cdata.com/jp/kb/

不明な点があれば、テクニカルサポートまでお気軽にどうぞ!

https://www.cdata.com/jp/support/submit.asp

トライアル・お問い合わせ

関連コンテンツ