データ活用

APIを活用したSaaSからのデータ抽出方法

Ryosuke Ishii

みなさんの会社ではSaaSを利用していますでしょうか? 有名なところならばSalesforceやSanSanなどがありますね。

SaaSは手軽にサービスを活用できて、企業の業務に切っても切れない存在となっています。しかし自社で管理しているデータベースのように簡単にデータ抽出ができないというネックも存在します。

今回の記事ではAPIを活用したデータ抽出について解説をします。

りょうさん
りょうさん

この3年でSaaSからのデータ抽出を10件以上経験した、私のベストプラクティスです

基幹システム以外からのデータ抽出のニーズ

SaaS以前は自社ネットワークからのデータ抽出だった

クラウドサービスが出回る以前は、各社それぞれでサーバーを管理していました。自社内にサーバールームを設置するか、データセンターに置くか、物理的な場所はそれぞれでしたが、自社のセキュリティ下にデータベースがあり、それぞれの基幹システムからデータ抽出をしていました。

SaaSの誕生によりデータ抽出はハイブリッドになった

しかしSaaSが誕生し、企業のデータはパブリッククラウドの中に格納されるようになりました。

SaaS内にあるデータをデータウェアハウスに格納して、他のシステムからのデータと分析したいのですが、以前の自社ネットワークからのデータ抽出方式だと困難で、他のデータ抽出方法が必要となりました。

またこれらは自社データなのでいわゆるファーストパーティデータに分類されますが、データ分析の世界ではセカンド・サードパーティデータをあわせた分析を推奨しています。

あわせて読みたい
Cookieブロックが加速化する時代の中で知っておくべきサードパーティデータとは?ファーストパーティデータ セカンドパーティデータとの違いと役割とは?
Cookieブロックが加速化する時代の中で知っておくべきサードパーティデータとは?ファーストパーティデータ セカンドパーティデータとの違いと役割とは?

これらのニーズから、自社ネットワーク以外からのデータ抽出方法の必要性に注目が集まっています。

SaaSからどのようにしてデータを抽出するのか

SaaSは一般的にはこちらからデータベースを直接参照することはできません。テナントごとに様々な顧客のデータがあるのでセキュリティの観点からデータベースへの接続が禁止されています。

ではどのようにデータを取得するのか、代表的なものを3つ紹介します。

データエクスポート機能をつかう(手動)

最もシンプルな手段です。SaaSの中で[エクスポート]機能をつかい、CSVなどの外部ファイルにしてデータウェアハウスに取り込みます。手動で実施することもありますし、RPAで自動化するパターンもあります。

お手軽に実施できます(RPA組むのはちょっと大変)ですが、データハンドリングが難しいです。例えば3日前のデータの取り込み直しをする場合など、設定をいろいろ変更する必要がありますね。

ETLツールを使用する

ETLツールは専用のドライバーを持っています。たとえばSalesforceやKintoneのように有名なSaaSであれば、ETLツール側で専用のドライバーを作っているので、そちらから接続することができます。技術的な難易度は大幅に下がりますので、ドライバーがあればぜひ活用しましょう。

ETLツールの詳細についてはこちらを参照してください。

あわせて読みたい
ETLツールの歴史と今後への期待
ETLツールの歴史と今後への期待

データコネクタツールを使用する

世の中にはデータ接続用のさまざまなドライバーを保持しているツールがありますので、CDataからデータ取得するのも良いでしょう。

CData 高機能なデータコネクタ
CData 高機能なデータコネクタ

APIを使用する

今回の記事の本命はこちらです。世の中にあるSaaSはとても数が多く、ドライバー開発が追いつきません。また海外産であったり、ニッチなSaaSになるとなかなか専用ドライバーがありません。

その場合はAPIを通してデータを抽出しましょう。
APIについての詳細はこちらの記事で紹介されています。

APIの仕組みとは?メリットや連携の事例を初心者向けにわかりやすく解説
APIの仕組みとは?メリットや連携の事例を初心者向けにわかりやすく解説

APIが開放されているSaaSにはプログラムからデータの登録やデータの抽出ができたりします。APIはSaaSメーカー側で設定している機能のみが使用できますので、下記のようなデータを取得したいSaaSのAPIリファレンスをよく読む必要があります。

Getting started with the Oura API
Getting started with the Oura API

それでは以降から、具体的なAPIからのデータの抽出の仕方を解説します。

APIからデータを抽出する

素直なAPI? 意地悪なAPI?

先ほど述べた通り、APIはSaaSメーカー側が仕組みを用意します。そしてこのAPIについて正式な規格がございません。(きっと今はない)

そのため、メーカーによってデータの取得内容がバラバラです。

わかりやすいところだと、CSVファイルなのかJSONファイルなのか、選択できるのか、です。JSONだとデータベースへの取り込みに工夫が必要になります。

また、SaaSメーカー側の立場となると、自分のところの貴重なデータを無闇に抽出させて外部環境で使われることに良い気持ちを感じないでしょう。そのためAPIの開放はオプションで有料化しているところもあります。

その中でもデータが一括抽出できないなどの制限があります。

とあるeラーニングを提供してるSaaSは学習コースごとのユーザーの進捗状況を抽出できるのですが、全コースは一回で取れず、各コースを選択しなければ抽出できない仕様でした。

そのため、プログラムで全コース一覧を取得し、繰り返し条件でコースをひとつずつ選んでユーザーの進捗を取得するようにせねばなりませんでした。

このようにデータ抽出をする目線で素直なAPIか意地悪なAPIかを判定してみましょう。

APIからデータを抽出する

素直なAPIならばETLやBIツールが使える

データ抽出しやすいAPIであればツールをつかって取得ができます。下記は一例ですが、SaaS(BIツール)のAPIをETLツールで呼び出しています。

一回のコールで取りたいデータが全部CSVで取得できるのであれば、ETLツールのようにGUIで取得できるでしょう。

あわせて読みたい
MotionBoardのWebAPIを使ってMotionBoardのデータをDataSpiderで外部に出力する
MotionBoardのWebAPIを使ってMotionBoardのデータをDataSpiderで外部に出力する

意地悪なAPIならばPythonが相性がいい

私は約10種類はAPI経由でデータを抽出しています。その経験から見て、8割は素直なAPIではありません。そのためPythonでデータを抽出しています。

具体的にOura Ringの取得方法の記事がありますので、興味ありましたらご覧ください。

あわせて読みたい
【Oura Ring×Web API】毎日のアクティビティを可視化しよう!【歩数, 消費カロリー, 着座時間, etc.】
【Oura Ring×Web API】毎日のアクティビティを可視化しよう!【歩数, 消費カロリー, 着座時間, etc.】

APIからデータを抽出する場合、Pythonは必要不可欠と言えるでしょう。私は下記で紹介しているデイトラ Pythonコースで学習をして、Pythonを使えるようになりました。

あわせて読みたい
データ分析者にオススメする、デイトラPythonコースの活用方法
データ分析者にオススメする、デイトラPythonコースの活用方法
ChatGPTに任せられる部分もある

ChatGPTが使える現代ではコードのすべてを記述する必要はありません。だいたいのやり方はChatGPTでつくれますので、そのコードを理解して操れれば開発工数を大幅に削減できます。

Q
実際にChatGPTに依頼してみたらこんな感じ

Oura RingのAPIを使用してPythonでデータを抽出し、それをCSV形式で保存するプログラムの基本的な例を以下に示します。なお、Oura APIを利用するには、事前にAPIの認証トークンを取得しておく必要があります。

import requests
import csv
from datetime import datetime

# APIエンドポイント
oura_api_url = "https://api.ouraring.com/v1/userinfo"
# ここにあなたのアクセストークンを入れてください
access_token = "your_access_token"

# APIリクエストヘッダー
headers = {
    "Authorization": f"Bearer {access_token}"
}

# APIリクエストを送信
response = requests.get(oura_api_url, headers=headers)

# APIからのレスポンスを確認
if response.status_code == 200:
    data = response.json()

    # データをCSVに保存
    csv_filename = f"oura_data_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv"
    with open(csv_filename, mode='w', newline='') as file:
        writer = csv.writer(file)

        # CSVのヘッダーを記述
        writer.writerow(data.keys())

        # CSVにデータを書き込み
        writer.writerow(data.values())

    print(f"Data successfully saved to {csv_filename}")
else:
    print(f"Failed to retrieve data: {response.status_code}")

プログラムの説明

  1. APIエンドポイントとアクセストークン: oura_api_urlはOura APIのエンドポイントで、access_tokenにはOura APIから取得したアクセストークンを入力します。
  2. APIリクエストの送信: requests.get()メソッドを使って、Oura APIにリクエストを送信します。アクセストークンはヘッダーに追加して認証を行います。
  3. レスポンスの確認: レスポンスが成功(ステータスコード200)した場合、json()メソッドを使ってデータを取得します。
  4. CSVファイルへの保存: csv.writerを使って、データをCSVファイルに書き込みます。ファイル名には現在の日時が含まれ、保存先ファイル名が一意になるようにします。
  5. エラーハンドリング: レスポンスが失敗した場合、エラーメッセージを表示します。

注意点

  • Oura APIから取得できるデータには、userinfo以外にも、睡眠データや活動データなどがあります。APIエンドポイントを変更することで、異なるデータを取得できます。
  • プログラムを実行するには、事前にOura Ring APIからアクセストークンを取得しておく必要があります。
  • 詳細なAPIの使用方法やデータ形式については、Oura APIのドキュメントを参照してください。

Pythonでデータを抽出する手順

りょうさん
りょうさん

実際にAPIからデータを抽出する手順を紹介します

手順は大きく4ステップになります。

ドキュメントを用意する

まずは情報収集です。データを抽出したいSaaSのAPIのドキュメントを探しましょう。ここに取得手順が記載されています。

ドキュメントは英語が多いです。頑張って読み込むか、翻訳をしましょう。

Getting started with the Oura API
Getting started with the Oura API

最近では公式がPythonのライブラリを用意してくれている場合もあります。それ以外はHTTPリクエストで取得することが多いです。

Talend API Testerを使ってAPIに接続する

いきなり重要ポイントです。HTTPリクエストの難しいところはHTTPに指定のパラメータを入れてもすぐに動かない、なんらかの間違いがありエラーになります。この検証をプログラムの中で実装すると、プログラムが悪いのか接続の仕方が悪いのかわからなくなります。

そのため、まずはこのように設定すれば必ずつながるよねと理解する必要があります。

ETLツールのTalendさんは無料でAPI Testerを開放しています。こちらを使用するとサクッと検証ができて大変オトクです。

まずはTalend API Testerをつかって、APIとの接続の検証をしましょう。

Pythonを書く

APIによって難易度が変わるのがこの部分です。またここでデータ分析しやすい形にデータを加工することが重要です。もちろんデータベースに入れてから加工をしてもいいのですが、PythonのPandas DataFrameの加工技術は優秀なのでここで任せてしまっても良いです。

またPandasライブラリにはJSON→CSVの変換も用意しているので、やりたいことのほとんどができてしまいます。すごいぞPython。

各種APIのPythonの書き方については、いずれ別記事で紹介させていただきます。

データ連携スクリプトに乗せる

もちろんPythonで抽出したデータを直接データベースに入れても構いません。私の場合は取得するデータの数が多いので、ETLツールで一本のデータ取り込みスクリプトを作成しているので、そこに完成したプログラムを乗せます。

ETLのスクリプトについては下記の記事を参考にしてください。

開発コスト・運用コストを抑えたスクリプトの構築方法
開発コスト・運用コストを抑えたスクリプトの構築方法

少し遠回りな手法になりますが、基幹システムのデータ抽出も併せて、「すべてのデータ抽出はETLツールから取得する」という思想を持っておくと、引き継ぎ時の管理コストを下げることができます。

データ連携の仕組みは「誰かに引き継ぐ前提」を強くもっておかないと24時間365日あなたが見守ることになりますので、そこは避けていきましょう。

さいごに

現代では自社ネットワーク内のデータベース以外にもSaaSのデータを抽出する必要性が出てきました。ファーストパーティデータが変わりつつあること、そしてセカンド・サードのデータもとれるようになっている今はデータ抽出の方式について議論・検証をしておく必要があります。

今回のデータ抽出方法が完全に正解とは限りませんが、効率的な方法であると思います。日々技術や知識をアップデートして、あらゆるデータを溜められる環境を構築できるようにしましょう。

ABOUT ME
石井 亮介(りょうさん)
石井 亮介(りょうさん)
データパレード 代表取締役
㈱データパレードの代表取締役で高田馬場の町中華のChief Data Officerをしています。 BIツールのセールスエンジニア・システムエンジニア・カスタマーサクセス歴10年以上経験、データエンジニア領域とコンサルティングが得意です。BIツール研究所・DMS Cubeなどデータ系コミュニティーのアンバサダーをしています
記事URLをコピーしました