从只提供当前数字的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
Example Plot with matplotlib

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Mockito错误地给出InvalidUseofMatcherException?   java在Google BigQuery中查找非查询作业的数据行计数   java Recyclerview和适配器未显示   java替换。带有对象的equals()。等于()   java在HashMap中找到最常见的值   如何使用eclipse在python和java之间切换   java“规范化”HashMap中的密钥哈希   java是否忽略Apache Commons CSV/OpenCSV中QuotenClosed字段中的分隔符?   数据结构Java中是否存在弱/软双向映射?   Java Play 2.4使用注入为类编写测试用例   安卓如何解决这个问题。java代码中的lang.ExceptionInInitializerError?   java使用Hadoop处理大型数据集时,在Mapper中排序数据的最佳方法是什么   java以单引号而不是双引号封送属性可能吗?   java在现有Swing项目中使用JavaFX的MediaPlayer   java在使用maven 3时清理存储在aws s3中的旧版本maven工件   java是Spring数据(JPA)存储库线程安全吗?(aka是SimpleParepository线程安全的)   java如何在JSP中访问动态属性(Struts2)   javajavax。打印PrintException:打印机不接受作业   用java语言递归求数组中所有元素的和   java单元测试Springboot MockMvc返回403禁止