获取有效用户项目及权限信息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, headersHEADERS, paramsparams) 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, headersHEADERS) 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(fAPI 请求失败: {e.response.status_code} {e.response.text}) except Exception as e: print(f程序异常: {str(e)}) if __name__ __main__: main()输出结果
gitlab api调用案例(一)
发布时间:2026/7/14 19:11:15
获取有效用户项目及权限信息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, headersHEADERS, paramsparams) 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, headersHEADERS) 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(fAPI 请求失败: {e.response.status_code} {e.response.text}) except Exception as e: print(f程序异常: {str(e)}) if __name__ __main__: main()输出结果