python文档处理脚本|python文档处理脚本 github_使用 Python3 编写 Github 自动周报生成器

简介
都说好东西要分享出去,但这个项目例外!我们将教你使用 PyGithub 自动生成周报——千万不要让人知道你学了这个项目,否则你将承包全公司人的周报!
每个程序员都有一个痛,那就是周报
每次写周报的时候,都感觉身体被掏空……
“我这周TM都干了什么了?”
python文档处理脚本|python文档处理脚本 github_使用 Python3 编写 Github 自动周报生成器
文章图片

“我也不知道”
python文档处理脚本|python文档处理脚本 github_使用 Python3 编写 Github 自动周报生成器
文章图片

“我这周加了辣么多功能,修了辣么多BUG,语言岂能描述我工作量的万分之一?”
python文档处理脚本|python文档处理脚本 github_使用 Python3 编写 Github 自动周报生成器
文章图片

别担心,这个项目就将帮你解决这个痛!
借助 PyGithub ,自动生成周报!
让你明白学习是多么的重要!
python文档处理脚本|python文档处理脚本 github_使用 Python3 编写 Github 自动周报生成器
文章图片

一、课程介绍
1. 内容简介
很多项目是依托于 Github 平台进行需求发布、开发管理、多人协助的。如果你主管某个项目,并且想查看参与成员每一周的项目参与活跃度,我们可以通过查看他们提交的 commit 数量、issue 数量来大致评估。
手动查询是否耗费人力、精力。所以我们通过调用 Github 的开发 API 来制作一个自动周报统计脚本。
2. 课程知识点
Django 3.4.3
PyGithub
3. 实验环境
Xfce终端
Python 3.4.3
4. 效果截图
python文档处理脚本|python文档处理脚本 github_使用 Python3 编写 Github 自动周报生成器
文章图片

二、关于自动周报脚本的故事
在实验楼中,所有的开发以及课程管理流程都是基于 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 来体现的。例如下图:
python文档处理脚本|python文档处理脚本 github_使用 Python3 编写 Github 自动周报生成器
文章图片

当我们审核完某个课程的时候,就会在 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_使用 Python3 编写 Github 自动周报生成器
文章图片

    推荐阅读