ReactNative、Expo環境でのログ解析デファクトスタンダードのAmplitude(ExpoSDK37からはfirebase analyticsも使えるようになりました)。
無料枠でもダッシュボードが充実しまくっているのでかなり満足なのですが、生のデータを扱いたくなりました。
てことでGUIに頼らずにデータを得られるAmplitudeAPIでハマったところをまとめます。
公式ドキュメントはこちら。
5つの注意点
おとなしくCurlを使う
公式ドキュメントを見てみると、サンプルコードが全部Curl。
なんでやねん。
ちょっとのぞいてみると
curl -u API_Key:Secret_Key 'https://amplitude.com/api/2/events/segmentation?e=\{"event_type":"Share%20Song","filters":\[\{"subprop_type":"event","subprop_key":"SocialChannel","subprop_op":"is","subprop_value":\["facebook"\]\}\]\}&m=totals&start=20141001&end=20141004&i=7&g=country'
とな。
{}と[]がバックスラッシュでエスケープされていたり、半角スペースはエンコードされていたり、パラメタがネストしていたり、Curlで書くにはとてもめんどくさそう。
ってことで、Pythonのrequestsで頑張ってみましたが、結構時間がかかりそうだったので諦めて、Curlを使うことに。
と言ってもターミナルで実行できても嬉しくないので、Pythonのsubprocessモジュールを使って、curlコマンドを実行することにしました。
変数はテンプレートリテラルで埋め込めばよろし。
requestsとかでできた人いたらぜひ教えてください!
User ID => user_id
APIのパラメタでUser IDを指定したい時のkeyはuser_idです。
Amplitudeのダッシュボードにある、デフォルトのユーザープロパティUser IDを指すkeyですが、そのままUser IDだとダメ。
エンコードしてUser%20IDでもダメ。
user_id。
ドキュメントにも全然書いてなかった…。
自分で作ったプロパティにはgp:をつける
例:"Age" => "gp:Age"
User ID(APIでのkeyはuser_id)など、Amplitudeがデフォルトで用意してくれているプロパティを指定する場合はそのままでいいのですが、自分で設定したプロパティは、プロパティ名の前にgp:をつける必要があります。
エンコードする
パラメタで指定するvalueも全部エンコードして使わないとダメです。
Amplitudeのドキュメントにもあるエンコード用のサイトはさっきSSL証明書が切れてしまったので、こちらのサイトとかでエンコードすればよろし。
あと、無駄なスペースは全部消すこと。
{}と[]をバックスラッシュでエスケープ
{}と[]はバックスラッシュでエスケープします。
パラメタからcurlコマンドを自動生成するときは "{" => "\{" とかで置換すればよろし(置換時にエスケープを無効化したりちょっと面倒かも)。
上記を踏まえたコマンドの例
例えば、自分で設定したNameプロパティ(Name => gp:Name)が田中(田中 => %E7%94%B0%E4%B8%AD)であるユーザーの、音楽を再生するイベント(Play Music => Play%20Music)の再生時間("duration")を2020年3月9日から2020年4月9日まで全部足したい時は以下。
curl -u API_KEY:SECRET_KEY 'https://amplitude.com/api/2/events/segmentation?e=\{"event_type":"Play%20Music","filters":\[\{"subprop_type":"user","subprop_key":"gp:Name","subprop_op":"is","subprop_value":\["%E7%94%B0%E4%B8%AD"\]\}\],"group_by":\[\{"type":"event","value":"duration"\}\]\}&start=20200309&end=20200409'
#まとめ
てな感じで、いくつかハマりどころがありましたが、上記を守れば、APIを自由に叩けると思います。
間違ったフォーマットで書いても、ほぼ全くエラー箇所教えてくれないのでちょいきつかったです。
誰かのお役に立てれば!