AI 生成: 一个从 Gitea 服务器获取最新项目的工具,支持命令行使用和 Web 界面查看。
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
"""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]
|
||||
Reference in New Issue
Block a user