news 2026/7/14 19:11:13

gitlab api调用案例(一)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
gitlab api调用案例(一)

获取有效用户项目及权限信息

python3 getGitlabUserPriMsg.py

#!/usr/bin/python3 import requests import json from datetime import datetime, timedelta # GitLab API URL 和访问令牌 GITLAB_URL = "https://gitlab.umi.com/api/v4" PRIVATE_TOKEN = "X" HEADERS = {"PRIVATE-TOKEN": PRIVATE_TOKEN} def fetch_all_projects(): """获取所有项目列表(自动处理分页)""" page = 1 projects = [] while True: params = { "per_page": 100, "page": page } response = requests.get(f"{GITLAB_URL}/projects", headers=HEADERS, params=params) response.raise_for_status() current_page_projects = response.json() if not current_page_projects: break projects.extend(current_page_projects) if len(current_page_projects) < 100: break page += 1 return projects def fetch_project_members(project_id): """获取单个项目的所有成员信息(过滤禁用用户)""" members_url = f"{GITLAB_URL}/projects/{project_id}/members/all" response = requests.get(members_url, headers=HEADERS) if response.status_code == 403: print(f"项目 {project_id} 权限不足,跳过") return [] response.raise_for_status() # 过滤非激活状态用户 active_members = [ member for member in response.json() if member.get('state') == 'active' ] return active_members def format_output(project, members): """格式化输出结果(移除了有效期列)""" output = [] output.append(f"项目名称: {project['name']}") output.append(f"项目地址: {project['web_url']}") output.append(f"最后活跃: {project['last_activity_at']}") output.append("\n成员列表:") output.append(f"{'用户名':<20}{'姓名':<20}{'权限等级':<15}") output.append("-" * 55) for member in members: access_level = { 10: "Guest", 20: "Reporter", 30: "Developer", 40: "Maintainer", 50: "Owner" }.get(member['access_level'], "未知") output.append( f"{member['username']:<20}" f"{member['name']:<20}" f"{access_level:<15}" ) return "\n".join(output) def main(): try: # 获取所有项目 all_projects = fetch_all_projects() print(f"发现 {len(all_projects)} 个项目") # 清空旧报告文件 open("gitlab_permission_report.txt", "w").close() # 遍历处理每个项目 for project in all_projects: members = fetch_project_members(project['id']) # 过滤掉空成员列表的项目 if not members: continue report = format_output(project, members) # 输出到控制台并保存文件 print("\n" + "="*60) print(report) with open("gitlab_permission_report.txt", "a") as f: f.write(report + "\n\n") except requests.exceptions.HTTPError as e: print(f"API 请求失败: {e.response.status_code} {e.response.text}") except Exception as e: print(f"程序异常: {str(e)}") if __name__ == "__main__": main()

输出结果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 19:08:10

Godot动画状态机实战:Idle与Walk平滑切换完整指南

在游戏开发中&#xff0c;角色动画的流畅切换是提升游戏体验的关键环节。很多开发者在处理角色从静止到移动的过渡时&#xff0c;常常遇到动画卡顿、切换不自然的问题。本文将深入讲解Godot引擎中动画状态机的使用方法&#xff0c;重点演示如何实现Idle&#xff08;空闲&#x…

作者头像 李华
网站建设 2026/7/14 19:07:07

NCM格式解密原理与实战:从AES加密到本地音乐文件转换

1. 项目概述&#xff1a;为什么我们需要关注NCM格式解密&#xff1f;如果你是一个网易云音乐的老用户&#xff0c;或者像我一样&#xff0c;喜欢把一些特别钟爱的歌单、专辑下载到本地&#xff0c;以备离线收听或导入其他设备&#xff0c;那你大概率已经和.ncm这个文件后缀打过…

作者头像 李华
网站建设 2026/7/14 19:03:28

‘不会SQL就没有数据权‘:ChatBI能否真正打破一线的数据鸿沟

导语 先做一个概念澄清&#xff1a;一线业务人员常说的"我没有数据权"&#xff0c;其实混合了两件不同的事——取数权&#xff08;能不能自己把数据拉出来&#xff09;和数据权&#xff08;能不能基于数据做判断、提主张、影响决策&#xff09;。过去很多年&#xff…

作者头像 李华
网站建设 2026/7/14 19:03:19

k8s 部署 Headlamp

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

作者头像 李华
网站建设 2026/7/14 19:02:57

AD74412R与PIC18F85J50在工业控制中的高效应用

1. AD74412R与PIC18F85J50的黄金组合&#xff1a;工业控制系统的性能跃迁 在工业自动化领域&#xff0c;数据采集精度和系统响应速度就像人的神经系统——既要敏锐感知环境变化&#xff0c;又要快速做出反应。ADI的AD74412R四通道可配置I/O芯片与Microchip的PIC18F85J50微控制器…

作者头像 李华