假期的时候想做一个 iOS Widget,显示最近 App 的销售数据,于是玩了一下 App Store Connect 的 API。记录一下过程,以供后续回顾和加强。
如何调用 App Store Connect 的 API
该 API 是通过 JWT 验证的 Rest API,我用的编程语言是 Python,处理 JWT 验证的库是 @lepture 的 Authlib,使用起来非常方便。
代码大概如下:
def create_token(private_key_id, issue_id, auth_key_path):
header = {
"alg": "ES256",
"kid": private_key_id,
"typ": "JWT"
}
payload = {
"iss": issue_id,
"exp": int(time.time()) + 1200,
"aud": "appstoreconnect-v1"
}
key = open(auth_key_path).read()
return jwt.encode(header, payload, key).decode('utf8')
如何得到每天的销售数据
销售数据的 API 入口是 https://api.appstoreconnect.apple.com/v1/salesReports
,如果要得到当天的销量的话,其中 filter[frequency]
参数的值为 DAILY
,filter[reportDate]
为类似 2020-10-08
,filter[reportSubType]
为 SUMMARY
即可。
返回的结果是 gzip 后的 csv 销量数据,用类似这样的代码就可以解压并写成文件:
def decompress_and_writetofile(response, name):
content = gzip.decompress(response.content)
f = open(name, 'w')
f.write(content.decode('utf8'))
f.close()
如何计算 Developer Proceeds
用 Numbers 或 Excel 打开 csv 文件后,可以看到详细的 Sales 数据。但其实这些数据很多都是和 Sales 无关的。因为 App 的 Update、Re-download 等等都会记录在这个表格里,简单的说,所有与该 App 或者该 App 的 IAP 相关的包括初次下载、再次下载、升级、购买、内购、恢复购买等等行为,都会成为 Sales 的一部分。
这就要求对这 Sales 数据进行过滤和计算才能得到真正的当时的收入数据。幸好最终的计算也是比较简单的,那就是把 Units 这列,乘以 Developer Proceeds,就是预估的收入数据了。
但是这些有一个问题,那就是 Developer Proceeds 是按用户购买时的货币来记录的,并不会根据汇率给转换一个结果出来。这样做的原因是,最终收入是付款那几天的汇率决定的,当日的「销售和趋势」的收入是仅供参考的,因而 API 返回的数据并没有给出参考汇率的必要。
如何计算大致的汇率
虽说无法去计算准确的当日产生的收入,但自己还是可以去人工做一次汇率转换,以得到一个参考数据的。这时就要用到一些汇率转换的 API。
我找到的两个免费的 Python API 是:forex-python 和 Exchange Rates API,前者支持货币较少,但支持查询历史汇率,后者支持货币较多,但免费版本似乎不支持历史汇率。可以综合起来使用。
根据上节得到的结果,简单计算一下就可以得到和 App Store Connect API 大致接近的收入预估了。
总结
经过一段时间的完善后,App Store Connect 的 API 确实可以让我们不用打开 App Store Connect 网站,也能完成几乎所有围绕着 App 开发前后的任务了,甚至还有比网站后台更丰富的数据纬度。值得使用!
参考资料
- Authlib:强大又全面的处理各种验证的库;
- App Store Connect API:App Store Connect 的 API
- App Store Connect API -> Sales and Finance Reports:App Store Connect 的销售相关的API
- 产品类型标识符的参考列表:解析销售数据不同的 Product Type Identifier 时需要参考的列表
- Is there a way to download payments data programmatically from App Store Connect?:Developer Forums:关于 Sales 数据不是汇率转换后的问题:
- 查看付款信息:关于汇率是怎么确定的信息;
- forex-python:免费汇率 API 之一
- Exchange Rates API:免费汇率 API 之二
拜读了,有用但是有限(我个人的问题)。我想实现下多应用基于 7天以及30天的销售额统计报告下载,主要是想看看交易类型的 收款和退款,但是不知道怎么下手写这个代码。我对于python也是非常基础,最多会个简单爬虫这样子,想请教应该往什么方向去看看呢?