GitHub 助手
- 作者仓库星标 0
- 作者仓库 skills-registry
GitHub Repository Stats via REST API
Overview
Use the GitHub REST API (no SDK needed) with curl + python3 to pull PR and
issue data for a given repo and date range. The unauthenticated rate limit is 60
requests/hour; set GITHUB_TOKEN in the environment for 5000/hour.
Base URL pattern
https://api.github.com/repos/{owner}/{repo}/pulls # PRs
https://api.github.com/repos/{owner}/{repo}/issues # Issues (includes PRs!)
https://api.github.com/search/issues # Search endpoint
Issues endpoint returns both issues AND pull requests. Filter with
"pull_request" in itemto separate them.
Authenticated header (use when token available)
AUTH_HEADER="-H \"Authorization: token $GITHUB_TOKEN\""
Pagination pattern
GitHub paginates at 100 items max per page. Always loop until an empty page:
import requests, time
def fetch_all(url, params, token=None):
headers = {"Authorization": f"token {token}"} if token else {}
headers["Accept"] = "application/vnd.github+json"
results = []
page = 1
while True:
params["page"] = page
params["per_page"] = 100
r = requests.get(url, headers=headers, params=params)
if r.status_code == 403:
time.sleep(60) # rate-limited, back off
continue
data = r.json()
if not data:
break
results.extend(data)
if len(data) < 100:
break
page += 1
return results
Date filtering
GitHub REST API supports since parameter (ISO 8601) for issues/PRs but NOT
until. Filter the until boundary in Python after fetching:
from datetime import datetime, timezone
def parse_dt(s):
return datetime.fromisoformat(s.replace("Z", "+00:00"))
start = datetime(2024, 12, 1, tzinfo=timezone.utc)
end = datetime(2024, 12, 31, 23, 59, 59, tzinfo=timezone.utc)
created_in_range = [i for i in items
if start <= parse_dt(i["created_at"]) <= end]
Key fields
| Field | Description |
|---|---|
number |
PR/issue number |
state |
"open" or "closed" |
created_at |
ISO 8601 creation timestamp |
closed_at |
ISO 8601 close timestamp (null if open) |
merged_at |
ISO 8601 merge timestamp (PRs only, null if unmerged) |
pull_request.merged_at |
In issue-endpoint results; same as above |
user.login |
Author login |
labels |
List of {"name": "..."} objects |
Detecting merged PRs
Via /pulls endpoint, merged_at is present and non-null.
Via /issues endpoint, check item.get("pull_request", {}).get("merged_at").
Computing average time-to-merge
from datetime import datetime, timezone
def days_between(a, b):
da = datetime.fromisoformat(a.replace("Z", "+00:00"))
db = datetime.fromisoformat(b.replace("Z", "+00:00"))
return (db - da).total_seconds() / 86400
merged = [p for p in prs if p.get("merged_at")]
avg = sum(days_between(p["created_at"], p["merged_at"]) for p in merged) / len(merged)
avg_rounded = round(avg, 1)
Finding top contributor
from collections import Counter
logins = [p["user"]["login"] for p in prs]
top = Counter(logins).most_common(1)[0][0]
Output: write report.json
import json, pathlib
report = {
"pr": {
"total": total_prs,
"merged": merged_count,
"closed": closed_count,
"avg_merge_days": avg_merge_days,
"top_contributor": top_contributor,
},
"issue": {
"total": total_issues,
"bug": bug_count,
"resolved_bugs": resolved_bugs,
}
}
pathlib.Path("/app/report.json").write_text(json.dumps(report, indent=2))
<!-- tomevault:4.0:skill_md:2026-05-22 -->Source: cxcscmu/SkillLearnBench — distributed by TomeVault.
- 流狐分类
- 工程开发
- 作者声明 Agent
- 未找到明确声明;不据此推断已兼容或已测试
- 静态检查
- 88 / 100 · 启发式扫描,不代表运行安全
- 作者 / 版本 / 许可
- @tomevault-io · 未声明 license
- 流狐 Token 估算
- 低消耗
- 流狐接入估算
- 需简单配置
- 是否需要外部 API Key
- 需要 · GitHub
- 检测到的系统要求
- 未声明
- 底层运行要求
- Python
- 检测到的文件与系统行为
-
- 只读
- 允许写入 / 修改
- 检测到的网络行为
- 允许外网请求
- 安装命令数
- 无(仅作为资料)
档案由构建时根据 SKILL.md 与安装命令自动衍生,可能与作者实际意图存在差异。
需要注意: 未限定 allowed-tools,默认拥有全部工具权限。
作者没有在当前 SKILL.md 中定义固定输出样例。 Use the GitHub REST API (no SDK needed) with curl + python3 to pull PR and issue data for a given repo and date range. The unauthenticated rate limit is 60 requests/hour; set GITHUBTOKEN in the environment for 5000/hour.
Issues endpoint returns both issues AND pull requests. Filter with "pullrequest" in item to separate them.
Authenticated header (use when token available)
GitHub paginates at 100 items max per page. Always loop until an empty page:
GitHub REST API supports since parameter (ISO 8601) for issues/PRs but NOT until. Filter the until boundary in Python after fetching:
Field · Description number · PR/issue number state · "open" or "closed"
# GitHub Repository Stats via REST API
## Overview
Use the GitHub REST API (no SDK needed) with `curl` + `python3` to pull PR and
issue data for a given repo and date range. The unauthenticated rate limit is 60
requests/hour; set `GITHUB_TOKEN` in the environment for 5000/hour.
## Base URL pattern
```
https://api.github.com/repos/{owner}/{repo}/pulls # PRs
https://api.github.com/repos/{owner}/{repo}/issues # Issues (includes PRs!)
https://api.github.com/search/issues # Search endpoint
```
> Issues endpoint returns both issues AND pull requests. Filter with
> `"pull_request" in item` to separate them.
## Authenticated header (use when token available)
```bash
AUTH_HEADER="-H \"Authorization: token $GITHUB_TOKEN\""
```
## Pagination pattern
GitHub paginates at 100 items max per page. Always loop until an empty page:
```python
import requests, time
def fetch_all(url, params, token=None):
headers = {"Authorization": f"token {token}"} if token else {}
headers["Accept"] = "application/vnd.github+json"
results = []
page = 1
while True:
params["page"] = page
params["per_page"] = 100
r = requests.get(url, headers=headers, params=params)
if r.status_code == 403:
time.sleep(60) # rate-limited, back off
continue
data = r.json()
if not data:
break
results.extend(data)
if len(data) < 100:
break
page += 1
return results
```
## Date filtering
GitHub REST API supports `since` parameter (ISO 8601) for issues/PRs but NOT
`until`. Filter the `until` boundary in Python after fetching:
```python
from datetime import datetime, timezone
def parse_dt(s):
return datetime.fromisoformat(s.replace("Z", "+00:00"))
… 作者原文负责流程事实;流狐只索引当前章节、要点、文件与命令。
章节 -> Overview → Base URL pattern → Authenticated header (use when token available) → Pagination pattern → Date filtering → Key fields
要点 -> Use the GitHub REST API (no SDK needed) with curl + python3 to pull PR and issue data for a given repo and date range. · > Issues endpoint returns both issues AND pull requests. · GitHub paginates at 100 items max per page. · GitHub REST API supports since parameter (ISO 8601) for issues/PRs but NOT until. · Via /pulls endpoint, mergedat is present and non-null. · --- > Source: [cxcscmu/SkillLearnBench](https://github.com/cxcscmu/SkillLearnBench) — distributed by [TomeVault](https://tomevault.io).
文件/命令 -> curl · python3 · GITHUBTOKEN · "pullrequest" in item · since · until · number · state
内容 SHA-256 -> 315549f2ca2c
原文结构
适用与边界
原文中的明确线索
curl、python3、GITHUBTOKEN、"pullrequest" in item、since、until、number、state