Files
gitea-latest-project-fetche…/gitea_client.py
T

52 lines
1.8 KiB
Python

"""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]