GitLab获取人员参与项目-贡献项目列表

目录

  • 前言
  • 获取token
  • 登录
  • 获取用户参与项目
  • 完整代码

前言

最近在做的统计报表项目包含人员代码提交量。
要获取人员代码提交量首先要知道人员参与的项目。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

时间: 2024-10-07 02:30:16

GitLab获取人员参与项目-贡献项目列表的相关文章

在github上参与开源项目贡献代码

1 登录github, 点击自己感兴趣的repository的fork按钮,这样自己的github主页会有一个拷贝. 2 在自己本地修改同时保持和原来的repository同步: git remote -v, 看看自己当前git repository的configure, origin 表示自己的repository 要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用,运行 git remote add [shortname] [url]:git remote add upstream

CRM项目的实施必须全体人员参与!

<div class="card-body article-content" deep="5"> 因为CRM系统软件</a>涉及到公司业务流程管理全过程中的行业,必须得到营销推广.市场销售.实施.会计等单位的兼容.根据在宣布实施CRM以前,全体人员的参与<strong>CRM项目实施</strong></a>,能够得到必需的資源兼容,并促进有关部门的协作,让她们迅速的接纳CRM. <strong>

转帖:向开源项目贡献源码(以 Orchard 为例)

原文地址:http://yangw80.blog.163.com/blog/static/247518002201552692516908/ 在开源项目满天飞的时代,仅仅把开源项目拿来用是不够的,要适当的参与到开源项目的修改中,这对自己,对别人,都有很大意义.比如你在用项目 A 的 2.0 版本,你修改了 5 个地方并且都没有把修改贡献给项目 A,只是自己用.当项目更新到 3.0 版本的时候,你发现多了很多有趣的功能(自然没有包括自己修改的 5 个地方),于是你更新 3.0 的步骤就会麻烦许多.

如何从零开始参与大型开源项目

https://mp.weixin.qq.com/s/jJDm-aT8Z9YrAH8GxZ9kOQ 上世纪 70 年代,IBM 发明了关系型数据库.但是随着现在移动互联网的发展,接入设备越来越多,数据量越来越大,业务越来越复杂,传统的数据库显然已经不能满足海量数据存储的需求.虽然目前市场上也不乏分布式数据库模型,但没有品位的文艺青年不是好工程师,我们觉得,不,这些方案都不是我们想要的,它们不够美,鲜少能够把分布式事务与弹性扩展做到完美.受 Google Spanner/F1 的启发,一款从一开始

【Git项目管理】分布式 Git - 向一个项目贡献

分布式 Git - 向一个项目贡献 向一个项目贡献 描述如何向一个项目贡献的主要困难在于完成贡献有很多不同的方式. 因为 Git 非常灵活,人们可以通过不同的方式来一起工作,所以描述应该如何贡献并不是非常准确 - 每一个项目都有一点儿不同. 影响因素包括活跃贡献者的数量.选择的工作流程.提交权限与可能包含的外部贡献方法. 第一个影响因素是活跃贡献者的数量 - 积极地向这个项目贡献代码的用户数量以及他们的贡献频率. 在许多情况下,你可能会有两三个开发者一天提交几次,对于不活跃的项目可能更少. 对于

(转)花20分钟写的-大白话讲解如何给github上项目贡献代码

本文献给对git很迷茫的新手,注意是新手,但至少会点基本操作,有点基本概念的新手,我不会从怎么用github和git是什么开始讲的.如果作为新手你看书又看不进去,原理又太复杂,有没有直接了当告诉我们怎么给项目贡献代码,并和项目同步代码的大体流程.于是我快速写了这么个东西.一来整理下自己混乱的思路,二来想号召大家一起用git开发点东西,可是好几个同鞋只会寂寞的给自己push. 我先说下 我之前对github操作的一些迷茫历程,然后之后是怎么解惑的. 1. 最最开始,我以为git clone [项目

Atitit.attilax的&#160;case&#160;list&#160;项目经验&#160;案例列表

Atitit.attilax的 case list 项目经验 案例列表 1. Atian inputmethod 输入法3 2. Ati desktop engine桌面引擎3 3. Acc资金账户系统4 4. Attrib manager  属性管理器4 5. Auth sys权限系统4 6. Ad filter广告过滤系统 php 实现5 7. Big data Folder  base Store enginee大数据存储引擎(基于分布式文件夹)5 8. Disk Store engine

怎样在Github参与一个开源项目

转载:http://www.csdn.net/article/2014-04-14/2819293-Contributing-to-Open-Source-on-GitHub 最近一年开源项目特别的热,很多技术大会或论坛都以开源项目作为主题进行探讨,可见这是一种趋势.而Github作为开源项目的著名托管地,可谓无人不知,越来越多的个人和公司纷纷加入到Github的大家族里来,为开源尽一份绵薄之力.对于个人来讲,你把自己的项目托管到Github上并不表示你参与了Github开源项目,只能说你开源了

Netty+WebSocket 获取火币交易所数据项目

Netty+WebSocket 获取火币交易所时时数据项目 先附上项目项目GitHub地址 spring-boot-netty-websocket-huobi 项目简介 本项目使用 SpringBoot+Netty来开发WebSocket服务器,与火币交易所Websocket建立连接,时时获取火币网交易所推送过来的交易对最新数据. 该项目可以直接运用于实际开发中,做为获取各大交易所最新交易对相关数据的项目. 项目本身也是我在之前公司为了获取各大交易所数据所开发的项目,现在只是重新整理了下代码,现