从只提供当前数字的api中记录历史统计数据。
api_stats的Python项目详细描述
api_stats是一个python工具,旨在从api端点记录统计信息。例如,github api为每个版本提供了单个下载次数;通过运行此工具,您可以轻松地绘制滚动平均值和历史数据。
快速启动
api_stats加载一个“配置文件”,告诉它要获取什么以及要记录哪些字段。这个文件是一个python脚本,将由api_stats加载,它有一个单独的全局stats作为与程序的接口。此接口当前提供两个函数:record(key, value)和get_json(url)。
下面是一个配置文件示例,它记录了从github版本下载每个文件的次数:
releases=stats.get_json("https://api.github.com/repos/remram44/api_stats/releases")forreleaseinreleases:relname=release.get('tag_name')orrelease['name']forassetinrelease['assets']:stats.record('%s/%s'%(relname,asset['name']),asset['download_count'])
然后可以绘制数据,例如使用matplotlib:
python -m api_stats.plot -m '^(.+)$''api_stats:\g<1>' data.jsonl
更复杂的例子
您可能希望使用函数将从特定源检索数据点的操作考虑在内:
defgithub(repo):releases=stats.get_json("https://api.github.com/repos/%s/releases"%repo)forreleaseinreleases:ifrelease['draft']:continuerelname=release.get('tag_name')orrelease['name']forassetinrelease['assets']:stats.record('github/%s/%s/%s'%(repo,relname,asset['name']),asset['download_count'])github('VisTrails/VisTrails')github('remram44/api_stats')defpypi(pkg):releases=stats.get_json("https://pypi.python.org/pypi/%s/json"%pkg)['releases']forrelname,releaseinreleases.items():forassetinrelease:stats.record('pypi/%s/%s/%s'%(pkg,relname,asset['filename']),asset['downloads'])pypi('VisTrails')pypi('api_stats')
这将在pypi/<pkg_name>/<version>/<filename>和github/<owner>/<repo>/<version>/<filename>下记录数据。然后,您可以绘制数据,每个项目一个数字,按版本聚合,但同时添加pypi和github,使用:
python -m api_stats.plot \ -m '^pypi/([^/]+)/([^/]+)/.+$''\g<1>:\g<2>'\ -m '^github/[^/]+/([^/]+)/v([^/]+)/.+$''\g<1>:\g<2>'\ releases.jsonl