"""Gitea API 客户端:获取指定用户/组织的最新仓库。""" import os import requests class GiteaClient: """简单的 Gitea API 客户端。""" def __init__(self, base_url: str, token: str = None): # 去掉末尾的斜杠,避免拼接出双斜杠 self.base_url = base_url.rstrip('/') self.token = token or os.environ.get('GITEA_TOKEN') def _headers(self): headers = {'Accept': 'application/json'} if self.token: headers['Authorization'] = f'token {self.token}' return headers def get_latest_repos(self, owner: str, limit: int = 10): """获取指定用户或组织的最新仓库。 参数: owner: 用户名或组织名 limit: 返回的仓库数量上限 返回: 仓库信息列表(dict),按更新时间倒序排列。 """ url = f'{self.base_url}/api/v1/users/{owner}/repos' params = {'sort': 'updated', 'limit': limit} resp = requests.get(url, headers=self._headers(), params=params, timeout=15) resp.raise_for_status() repos = resp.json() # 按 updated_at 倒序排序,确保拿到真正最新的 repos.sort(key=lambda r: r.get('updated_at', ''), reverse=True) return repos[:limit] def get_org_latest_repos(self, org: str, limit: int = 10): """获取指定组织的最新仓库。""" url = f'{self.base_url}/api/v1/orgs/{org}/repos' params = {'sort': 'updated', 'limit': limit} resp = requests.get(url, headers=self._headers(), params=params, timeout=15) resp.raise_for_status() repos = resp.json() repos.sort(key=lambda r: r.get('updated_at', ''), reverse=True) return repos[:limit]