無料で便利なMetabaseですが、クエリに対し、1グラフだったり、取り回しが悪いことがあります。
そこで、大枠のクエリだけはMetabase上で書き、
Python/Rで集計軸を変えたり、結合するといったことをしたくなりました。
基本的な手順
- session_idを取得
- 上記を使い、カードからデータを取得する
という順番で行きます。
1つめは/session
,2つ目は/card//query
というAPIを叩けば良さそうです。
ただし、2つめのAPIは二種類(実際のカード表示/ファイル出力)あり、
ファイルDLのAPIでないと、全量とれないようです。
コード
とりあえず、だらだら書くとこんな感じです。
import requests import json base_url = "your metabase url" # session_idを取得 ipass = {'username':'your_user_name','password':'your pass'} res = requests.post(base_url + '/api/session',json=ipass) headers = { 'X-Metabase-Session':json.loads(res.text)['id], 'Content-Type':'application/json' } # データを取得 import pandas as pd card_id = '100' res_format = 'json' url = base_url + '/api/card/{0}/query/{1}'.format(card_id.res_format) res_data = requests.post(url,headers = headers) df = pd.read_json(res_data.text)
▼read_jsonに関してはこちら(時々日付を勝手にparseするので、、、)
再利用性をあげるために
上記をクラスかなんかにすると便利です。
class Metabase: def __init__(self,user,pass,base_url): self.user_name = user self.pass = pass self.base_url = base_url self.session_id = #上のsession_idとるところ def get_data(self,card_id): #上のデータをとるところ return df
この.pyを読み込み、インスタンス化してあげれば、毎回使いまわせますね。