troccoを使ってApp Store Connect APIからDL数をSnowflakeにETLする
概要
App Store Connect APIを使ってアプリのDL数をSnowflakeに投入して、Tableauなどで可視化したい!って要望があったのでやってみました。
今回は、APIからDL数を取得して、Snowflakeに投入する所までを書きたいと思います。
App Store Connect
trocco接続情報の作成のための情報
必要な情報は、対象となるアプリの以下の情報
- Issuer ID
- Key ID
- 秘密鍵
APIキーを作成する際の権限は、「Finance」以上であることが必要とのことです。
秘密鍵の取得方法
- Users and Access を選択し、Keysタブを選択
- (+) ボタンをクリックして、API KEYを作成。このとき権限は「Finance」以上にする
その後
再度、Users and Accessから、Download API Key で、秘密鍵(Private Key)をダウンロードする。
このダウンロードは一度しかできないので、厳重に管理する
-----BEGIN PRIVATE KEY-----
................................................................................................................................................................................................
-----END PRIVATE KEY-----
みたいな内容です。
① Issuer Key
② KEY ID
③ 秘密鍵(Download API Key)
【AppStoreConnect】新規DL数を取得
新規DL数の情報を取得するエンドポイントは、https://api.appstoreconnect.apple.com/v1/salesReports
なのでApp Store Connect API側の設定として、これら(IssuerID、KeyID、秘密鍵、エンドポイント)を用意します。
あと、上記のEndpointの必須パラメータとして「vendor_id」があるのでそちらも合わせて用意します。
vendor_idの取得
vendor_idは、https://nsdev.jp/apple/ios/8813.html を参考に
売上概要レポートの画面に出る
troccoの設定
【trocco】転送設定の新規作成
転送元に、App Store Connect API
転送先に、Snowflake
を選択し、「この内容で作成」をクリックします。
設定名と必要とあれば共有するグループを設定します。
【trocco】②転送元App Store Connect APIの設定で「+接続情報を追加 」をクリックします
- 名前
- Issuer ID
- Key ID
- 秘密鍵
を入力します。
必要に応じて、「共有するグループ」も設定し、
「保存」をクリックします。
取れるパラメータ
https://api.appstoreconnect.apple.com/v1/salesReports に必要な情報はこちら
- filter[frequency] : DAILY, WEEKLY, MONTHLY, YEARLY
- filter[reportSubType] : SUMMARY, DETAILED
- filter[reportType] : SALES, PRE_ORDER, NEWSSTAND, SUBSCRIPTION, SUBSCRIPTION_EVENT, SUBSCRIBER
- filter[vendorNumber]:https://help.apple.com/app-store-connect/#/dev3a16f3fe0 の「ベンダー番号の表示」を参照
あとは、
filter[reportDate] で日時指定する
↑を指定しない場合は、前日分が集計される(2022年1月19日22時に実行したら、2022年1月28日分が集計された)
なお、filter[frequency]をWEEKLYとした場合は、
https://tech.pepabo.com/2021/03/29/app-store-connect/ にこのように描いてらっしゃいます。
WEEKLYのデータを取るときは注意が必要で、週の日曜日の日付を指定する必要があります。
取得するタイミングも注意が必要で時差を考慮する必要があります。
具体的には、日本標準時(JST)と、太平洋標準時(PST)では、17時間の時差があります。
これに加え、レポートの配信タイミングがPSTの午前8時までに配信されます。
この点に注意をする必要があります。
取れるパラメータの組合
reportType | reportSubType | frequency | version |
---|---|---|---|
SALES | SUMMARY | DAILY, WEEKLY, MONTHLY, YEARLY | 1_0 |
SUBSCRIPTION | SUMMARY | DAILY | 1_2, 1_3 |
SUBSCRIPTION_EVENT | SUMMARY | DAILY | 1_2, 1_3 |
SUBSCRIBER | DETAILED | DAILY | 1_2, 1_3 |
NEWSSTAND | DETAILED | DAILY, WEEKLY | 1_0 |
PRE_ORDER | SUMMARY | DAILY, WEEKLY, MONTHLY, YEARLY | 1_0 |
reportType について
reportType | 内容 | 説明URL |
---|---|---|
SALES | 売上概要レポート | https://help.apple.com/app-store-connect/#/dev15f9508ca |
PRE_ORDER | 予約注文レポート | https://help.apple.com/app-store-connect/#/dev831e72dd9 |
NEWSSTAND | 雑誌/新聞レポート | https://help.apple.com/app-store-connect/#/itc9eefc011c |
SUBSCRIPTION | サブスクリプションレポート | https://help.apple.com/app-store-connect/#/itc5dcdf6693 |
SUBSCRIPTION_EVENT | サブスクリプションのイベントレポート | https://help.apple.com/app-store-connect/#/itc0b9b9d5b2 |
SUBSCRIBER | サブスクリプション登録者レポート | https://help.apple.com/app-store-connect/#/itcf20f3392e |
【trocco】②転送元App Store Connect APIの設定
API Endpoint : https://api.appstoreconnect.apple.com/v1/salesReports
入力ファイル形式: CSV/TSV ※検証まち
カスタム変数:
-
: 文字列 : 2022-01-15targatDate
クエリパラメータ: - filter[reportType] : SALES
- filter[reportSubType] : SUMMARY
- filter[frequency] : DAILY
- filter[version] : 1_0
- filter[vendorNumber] : (VENDOR_IDを入力)
- filter[reportDate] :
targetDate
【trocco】③ 転送先Snowflakeの設定
適宜設定する
Snowflakeの設定する上で注意点としては、すべて「大文字」で行うこと
→ DB名、スキーマ名、テーブル名、WAREHOUSE名
小文字で書くと Snowflake上で SELECT * FROM "hoge" みたいに、" でくくらなければならなくなるので
テーブル名は、「APP_STORE_CONNECT_DL_SUMMARY_DAILY
」としておきます。
転送モードは、「追記(INSERT)」
【trocco】 Step2 データプレビュー・詳細設定
プレビューが成功すると
と、スキーマプレビューと詳細設定が表示されます。
詳細設定
カラム名を大文字へ
Snowflakeに入れる場合、カラム名は すべて大文字 にしておくほうが良いです。
※これは、小文字入りだと Select "Privider" from hoge; のように""でくくらなければならなくなるので
非常に面倒ですが、カラム名を大文字のみ(スペースは、_) にします
転送時刻カラム設定
カラムを追加する に変更します
転送するカラム名も大文字にしておきます(私は、INSERT_TIMESTAMP
としています)
ワークフローを使って過去分を全部入れる
新規ワークフロー作成
troccoの左メニュー ワークフロー
をクリック
+新規ワークフロー作成
をクリック
ワークフロー名:AppStoreConnect過去分一括登録
その他はとりあえずデフォルトで問題なし
共有グループは必要に応じて設定
フロー編集
trocco転送ジョブ の横の + をクリックし、「App Store Connect API→Snowflake SALES_SUMMARY_DAILY」 を追加
カスタム変数でループ実行 に チェック
ループの種類:文字列展開でループ
対象カスタム変数:
1 : 2021-12-21
ループ回数を追加
をクリックしてループ変数を追加
2 : 2021-12-22
・・・・ 以下必要な分だけ追加
※文字列の生成などをもっとうまくやる方法もあるかもだけど、ちょっといい方法が見当たらなかった
※Excelなどでパラメータに入れる文字列を生成して、一列まとめてコピペすると自動的にループが追加されるという裏技もある
ワークフローを使って、前日分を毎日自動で取り込むように設定する
前日分を集計する場合は、
パラメータ:filter[reportDate] の指定を削除する
カスタム変数の
した転送設定を別途作成し、新たにワークフローを作成する。
今回はカスタム変数の設定はせず、新たに作った(filter[reportDate]を削除)を定期実行するようにワークフローを組む
画面下部のスケジュール設定 の横の +
をクリックし、
毎日15時00分
で登録をする
AppStoreConnectのDAILY集計は、UTFで計算されるみたいなので、前日分を集計するには、午前9時以降が良さそう(時差9時間なので)
余裕を見て15時00分(JST)で定期実行させてみようと思う
【追記】 前日分を10時(JST)で実行したところ
"status" : "404",[0x85] "code" : "NOT_FOUND",[0x9f] "title" : "The request expected results but none were found",[0xe1] "detail" : "Report is not available yet. Daily reports for the Americas are available by 5 am Pacific Time; Japan, Australia, and New Zealand by 5 am Japan Standard Time; and 5 am Central European Time for all other territories."[0x1cb] } ][0x1d1]}
このようなエラーが。
レポートはまだ利用できません。南北アメリカの日報は太平洋時間の午前5時までに入手できます。日本、オーストラリア、ニュージーランドの日本標準時の午前5時まで。他のすべての地域では、中央ヨーロッパ時間の午前5時です。
午前5時・・・・ってことは、9時間時差があるから14時。余裕を見て15時に実行してみます
【追記】
filter[reportDate]を削除し、1時間毎に起動してみたところ、
日本時間の21時起動分が成功しました。もう一日様子を見てみるつもりです
参考
Discussion