GitLab获取人员参与项目-贡献项目列表
时间:2019-10-24
本文章向大家介绍GitLab获取人员参与项目-贡献项目列表,主要包括GitLab获取人员参与项目-贡献项目列表使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
前言
最近在做的统计报表项目包含人员代码提交量。
要获取人员代码提交量首先要知道人员参与的项目。GitLab个人页面中有Contributed projects页面,如下图:
遗憾的是GitLab api里没有相应的API接口。
目前的做法只能通过页面爬取。做法是使用接口登录,然后访问该页面接口,然后解析数据。
获取token
GitLab登录页面是有csrf_token保护的,因此要先从signin页面抓取authenticity_token。页面中有多个authenticity_token,不过都是一样的。
import requests
import lxml
signin_url = 'http://gitlab服务地址/users/sign_in'
session = requests.session()
res = session.get(signin_url)
html = etree.HTML(res.text)
token, = html.xpath('//form[@id="new_ldap_user"]//input[@name="authenticity_token"]//@value') or ['']
使用session是为了保持登录状态,这里使用lxml解析并获取token,首先要使用pip install lxml安装。也可以使用正则或者bs4进行解析。
登录
然后使用authenticity_token及用户名密码进行登录。
# ldap登录
login_url = 'http://gitlab服务地址/users/auth/ldapmain/callback'
data = {'utf8': '✓', 'authenticity_token': token, 'username': '登录用户名', 'password': '登录密码'}
session.post(login_url, data=data)
我们这里是使用ldap登录的,使用普通方式登录的也一样,换下login_url即可。
获取用户参与项目
url = f'http://gitlab服务地址/users/{username}/contributed.json'
res = session.get(url)
html = etree.HTML(res.json()['html'])
_projects = html.xpath('//span[@class="project-full-name"]')
projects = [project.xpath('string(.)').replace('\n', '').replace(' ', '') for project in _projects]
这里面不是直接请求的用户贡献项目页面,而是加了.json的AJAX请求地址。使用XPath的strings()函数获取当前节点下的所有文本,并替换掉换行、空格。
projects便是解析出的用户参与项目列表。
完整代码
import requests
import lxml
GITLAB_BASE_URL = 'gitlab服务地址'
def gitlab_login(username, password):
"""登录gitlab返回登录后的session"""
# 从页面获取csrf_token
signin_url = 'GITLAB_BASE_URL/users/sign_in'
session = requests.session()
res = session.get(signin_url)
html = etree.HTML(res.text)
token, = html.xpath('//form[@id="new_ldap_user"]//input[@name="authenticity_token"]//@value') or ['']
# ldap登录
login_url = 'GITLAB_BASE_URL/users/auth/ldapmain/callback'
data = {'utf8': '✓', 'authenticity_token': token, 'username': username, 'password': password}
session.post(login_url, data=data)
return session
def get_user_contributed(username):
"""从Gitlab获取人员贡献项目"""
session = gitlab_login('登录用户名', '登录密码')
url = f'GITLAB_BASE_URL/users/{username}/contributed.json'
res = session.get(url)
html = etree.HTML(res.json()['html'])
_projects = html.xpath('//span[@class="project-full-name"]')
projects = [project.xpath('string(.)').replace('\n', '').replace(' ', '') for project in _projects]
print(projects)
return projects
if __name__ == '__main__':
get_user_contributed('GitLab用户名')
原文地址:https://www.cnblogs.com/superhin/p/11731404.html
- 【自然框架】QuickPager asp.net 分页控件的Ajax分页方式。
- 骑行在华盛顿 针对320万次共享单车骑行数据的分析
- 【自然框架】QuickPagerSQL——专门生成分页用的SQL的类库
- 【数据科学】数据科学中的 Spark 入门
- 【自然框架】QuickPager分页控件的单独的源码 V2.0.4.2。
- 用 iPhoneX 的 FaceID 刷脸解锁真的靠谱吗?
- 【自然框架】用CMS的栏目举例,聊一聊从“一层”到“三层”的变化
- java如何自定义鼠标指针
- 面向对象最重要的是“抽象”,三层最重要的也是“抽象”,没有抽象就不是真正的面向对象、三层。
- 唯一不变的就是一直在变”--“数据”的华丽“变身术”
- 借用 疯狂秀才 的页面,修改了一下自然框架后台管理的页面。
- PDF.NET(PWMIS数据开发框架)之SQL-MAP目标和规范
- PDF.NET数据开发框架 之SQL-MAP使用存储过程
- 用接口实现事件的一种方法,只是玩玩。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- laravel实现按月或天或小时统计mysql数据的方法
- laravel model模型处理之修改查询或修改字段时的类型格式案例
- 对laravel的session获取与存取方法详解
- php 中self,this的区别和操作方法实例分析
- Laravel使用原生sql语句并调用的方法
- Yii框架自定义数据库操作组件示例
- laravel 使用事件系统统计浏览量的实现
- PHP之多条件混合筛选功能的实现方法
- PHP多进程简单实例小结
- 解决laravel5中auth用户登录其他页面获取不到登录信息的问题
- Yii框架学习笔记之应用组件操作示例
- laravel 之 Eloquent 模型修改器和序列化示例
- TP5框架请求响应参数实例分析
- laravel 模型查询按照whereIn排序的示例
- 解决在laravel中auth建立时候遇到的问题