简介
都说好东西要分享出去,但这个项目例外!我们将教你使用 PyGithub 自动生成周报——千万不要让人知道你学了这个项目,否则你将承包全公司人的周报!
每个程序员都有一个痛,那就是周报
每次写周报的时候,都感觉身体被掏空……
“我这周TM都干了什么了?”
文章图片
“我也不知道”
文章图片
“我这周加了辣么多功能,修了辣么多BUG,语言岂能描述我工作量的万分之一?”
文章图片
别担心,这个项目就将帮你解决这个痛!
借助 PyGithub ,自动生成周报!
让你明白学习是多么的重要!
文章图片
一、课程介绍
1. 内容简介
很多项目是依托于 Github 平台进行需求发布、开发管理、多人协助的。如果你主管某个项目,并且想查看参与成员每一周的项目参与活跃度,我们可以通过查看他们提交的 commit 数量、issue 数量来大致评估。
手动查询是否耗费人力、精力。所以我们通过调用 Github 的开发 API 来制作一个自动周报统计脚本。
2. 课程知识点
Django 3.4.3
PyGithub
3. 实验环境
Xfce终端
Python 3.4.3
4. 效果截图
文章图片
二、关于自动周报脚本的故事
在实验楼中,所有的开发以及课程管理流程都是基于 Github 的。
当我们的网站以及实验环境出现问题时,石头哥会将问题汇总发布到对应开发代码仓库的 issue 中,并指派开发人员进行修复。
当需要上线一个新的 feature 时,石头哥也会重复这个操作,发布 feature 的 issue,并指派开发人员进行研发。对于课程的管理亦是如此,当有些课程中的实验版本有误或者某些文档中的措辞不准确时,我的上司也会将其修改的任务发布成 issue ,并指派给我们。
为了查看大家一周的工作量,石头哥培养了我们写周报的好习惯。在这一周中,我们每个修复了多少个 issue ,进行了多少次代码提交 commit,都要我们在周报中体现出来。好比这样:
冬瓜 的 commit 周报
冬瓜 在本周共有 10 次 commits
Add movie model for network & add widget - Tue, 14 Mar 2017 05:17:34 GMT
Update setting content about userinfo- Tue, 14 Mar 2017 05:17:34 GMT
update some code to fix bug - Tue, 14 Mar 2017 05:17:34 GMT
Update README.md- Tue, 14 Mar 2017 05:17:34 GMT
Complete showing the date. fixed #4- Tue, 14 Mar 2017 05:17:34 GMT
Update date and luner api and model - Tue, 14 Mar 2017 05:17:34 GMT
Update setting page & add some cell - Tue, 14 Mar 2017 05:17:34 GMT
Add TKSwitcherCollection by cocoapods and update README - Tue, 14 Mar 2017 05:17:34 GMT
Update README.md to show process - Tue, 14 Mar 2017 05:17:34 GMT
Complete weather and degree update by location - Tue, 14 Mar 2017 05:17:34 GMT
每到周末写周报虽然不会浪费多少时间,但是多少会扰乱周末的好心情 。
众所周知,程序员都是十分懒的。写代码只为了去简化很多事情。一天,石头哥找到我:“每周写周报好麻烦,要不咱们利用 Github 的 API 自动统计每个人每周的贡献,自动生成周报。这样就能省去大家很多事情!”
其实冬瓜心里很早就想写一个这种东西,既然石头哥将此重任托付给我,那冬瓜说干就干!
三、浏览Github文档,确定功能
先订个小目标,我们需要获取的是指定仓库的 commit 和 issue 中 comment 记录。对于代码的提交,可以用 commit 来体现,这个不用多言。
而在实验楼中课程的审核,是由对应 issue 的 comment 来体现的。例如下图:
文章图片
当我们审核完某个课程的时候,就会在 comment 处发布我们的审核结构。
所以利用 Github 的 API,我们需要根据特定的仓库,来获取其 commit 或者 issue 中的 comment 记录,从而生成周报。我们在官方的 API 中找到了 commit 和 comment 文档:
但是我们发现,在文档中的例子全部都是使用 curl 来响应接口的。当然我们用 Python 也可以做到这些事情,只不过对其进行数据封装一定会大大加重我们的工作量,所以我们引入一个 Github 的 API 封装库-PyGithub。
PyGithub 这个 Python 的封装库兼容 Python 2.7 和 Python 3.x。通过使用它可以达到调用函数接口以完成对于 Github 的 API 调用。并且传入的参数都是 Python 中常用的对象,而不是晦涩的字符串。
四、安装PyGithub包
我们在实验楼的环境中,先对 apt-get 的源进行更新
$ sudo apt-get update
$ sudo apt-get upgrade #时间有点久,耐心等待
【python文档处理脚本|python文档处理脚本 github_使用 Python3 编写 Github 自动周报生成器】然后我们来安装 Python3 的包管理工具 pip:
$ sudo apt-get install python3-pip
在安装 pip 之后,我们要用其安装我们开发周报生成器所需要的工具:PyGithub 以及 ipython。
我们先新建一个目录作为项目目录:
$ mkdir repobot && cd repobot
$ sudo pip3 install pygithub
$ sudo pip3 install ipython
PyGithub 是我们需要的库。
iPython 是一个交互式测试 Python 代码的工具,在之后测试 PyGithub 接口的时候,你会发现这个工具十分好用。
五、测试 PyGithub 接口,获取指定 repo 的 commite 记录
启动 iPython 导入 PyGithub 库,对其进行 Class 接口的测试。当然,测试的时候不是漫无目的的,可以根据 PyGithub 官方文档 来尝试。
$ ipython3
键入 ipython3 之后,进入 ipython 的交互式界面,之后我们输入的代码都会和 Python 代码一样交给解释器处理。
备注:和 IDLE 类似,我们可以使用 tab 补全。不同的是 iPython 的交互速度和补全提示功能做的更加完善。
In [1]: from github import Github
In [2]: gg = Github('', '').get_user()
In [3]: gg
Out[3]: AuthenticatedUser(login=None)
我们使用 PyGithub 官方给出的最简示例,使用我自己的账号进行创建 Github 对象,并使用之中的 get_user() 方法,看到反馈结果。我们可以继续对这个对象进行验证:
In [4]: gg.name
Out[4]: 'Desgard_Duan'
是的,冬瓜 Github 的 ID 确实是 Desgard_Duan 。这下可以放心的使用了。继续参照官方文档 我们来获取一下个人用户中的所有仓库信息:
In [5]: for repo in gg.get_repos():
...: print(repo.name)
...:
Calendouer-iOS
DGAdLaunchView
DGCuteHelper
DGDownloaderButton
...
这样就获取到了自己所有的代码仓库列表。这是我们重要的一步尝试。因为我们的目标就是通过指定的 repo 从而获取到期对应的 commite 记录。
查看 PyGithub 的 Repository 对应文档 ,在这之中,可以查询到对应代码仓库的 commites 的 Get 方法:
get_commits(sha=NotSet, path=NotSet, since=NotSet, until=NotSet, author=NotSet)
Parameters:
sha – string
path – string
since – datetime.datetime
until – datetime.datetime
author – string or github.NamedUser.NamedUser
or github.AuthenticatedUser.AuthenticatedUser
Return types:
github.PaginatedList.PaginatedList
of github.Commit.Commit
这里面 sha 其实对应的是 commit 的 sha 识别号或者是 repo 的分支名。path 是路径,author 不用多说是提交者 id,而 since 和 until 是由 PyGithub 进行封装的,这里面我们只需要传入 datetime 对象即可。例如我们现在要查询 Calendour-iOS 这个仓库从现在开始至七天前的某个仓库的 commit 情况:
In [0]: import datetime
In [1]: repo = gg.get_repo("calendouer-ios")
In [2]: repo.name# 检测是否获取到对应仓库Out[2]: 'Calendouer-iOS'In [3]: commits = repo.get_commits(sha = 'master', since = datetime.datetime.now() - datetime.timedelta(days = 7), until = datetime.time.now())
In [4]: for cm in commits:
...: print(cm.sha)
...: print(cm.commit.message)01589f0756b4423b0e5122d26a9d0a4222776c63
关于Setting页面的静态cell的优化
fb31aa63555871b7e5447ecb460f8c0af9d47205
关于我的页面静态cell的优化2d4e2c619d68204c8e49445a4699bdbbcacf4dad
改进静态cell的配置381ba051990ff11cb24224d3ee1a2fde44f129ae
Update userdefault setting fixed #5e6f82f839706903eb4e42b9450234638a585ae3b
Add the animation of show label
f349761cf3460a8c64f0497805dd0b93f0f07c57
Udpate random movie recommand.4d9166e8991df1a3cc4e9e742aeca5ef40df4ddb
Update files & change the weather icon by weather, now & add animation741391cc4e5525fefc08fc4fc6c93ad2b4e0c31c
Complete the movie model to translate data to card cell. fixed #2de9849daeb2b4e97681d51ddea3b2543249da7b6
Add movie model for network & add widget
我们可以看到,已经获取到了指定指定仓库指定时段提交的 commits 记录。至此我们的调试工作以及做完了一大部分。
篇幅有限,后续步骤及详细代码点击【使用 Python3 编写 Github 自动周报生成器】进行查看,直接来实验楼撸代码学习啊!
在线开发环境:
项目开发学习,自然少不了动手实践,实验楼给每个学习者都提供了在线的开发环境,可以跟着教程随时动手操作学习~
文章图片
推荐阅读
- python京东抢购|python京东抢购 github_GitHub - DevGuan/jd-autobuy: Python爬虫,京东自动登录,在线抢购商品...
- python|python github api_PyGithub: PyGithub 是一个 Python 库,封装了 Github V3 API 的各种操作
- 源码分享|GitHub每月优秀热门项目推荐(2021年10月)
- 学习工具|idea把代码提交到 远程 码云 仓库
- 工具|开发者必备神器!最新稳定版发布,这些新特性你需要知道!
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)
- GitHub|7 款可替代 top 命令的工具
- Spring Boot Serverless 实战系列 | 性能调优
- 讲真,你可能真不会用Github!