如何使用GitHub v3 API在Java项目中查询仓库PR列表及各PR创建时长
GitHub v3 API Java实现获取仓库现存PR及创建时长方案
1. 核心API规则说明
你需要调用的GitHub v3 REST接口为 GET /repos/{owner}/{repo}/pulls,相关参数配置如下:
- 路径参数:
owner为仓库所属的用户名/组织名,repo为目标仓库名 - 查询参数:
- 固定传
state=open,仅返回未关闭、未合并的现存PR - 传
per_page=100调整单页返回最大数量,减少请求次数 - 传
page指定页码,从1开始遍历,直到返回结果为空数组
- 固定传
- 可选请求头:如果是私有仓库或者需要提升请求频率上限,在请求头添加
Authorization: token 你的GitHub个人访问令牌,令牌需要开通repo权限,未认证请求每小时最多调用60次,认证后最高可达5000次。
接口返回的每个PR对象中包含 created_at 字段,为ISO 8601格式的UTC标准时间,可用于计算创建至今的天数。
2. 创建时长计算逻辑
拿到 created_at 时间后,统一转换为UTC时区的时间对象,和当前UTC时间计算差值即可,避免时区差异导致天数计算错误。
3. Java代码实现示例
推荐直接使用官方生态成熟的GitHub Java SDK org.kohsuke:github-api 实现,无需手动处理分页、鉴权、JSON解析等逻辑:
3.1 引入Maven依赖
<dependency> <groupId>org.kohsuke</groupId> <artifactId>github-api</artifactId> <version>1.318</version> </dependency>
3.2 业务代码
import org.kohsuke.github.*; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.time.temporal.ChronoUnit; import java.util.List; public class GithubPrFetcher { public static void main(String[] args) throws Exception { // 初始化GitHub客户端,公开仓库可省略withOAuthToken参数,仅请求上限会降低 GitHub github = new GitHubBuilder() .withOAuthToken("你的GitHub个人访问令牌") .build(); // 替换为实际的仓库所属方和仓库名 GHRepository repo = github.getRepository("实际owner/实际仓库名"); // 获取所有现存的Open状态PR,SDK已自动封装分页逻辑 List<GHPullRequest> openPrList = repo.getPullRequests(GHIssueState.OPEN); // 遍历处理每个PR for (GHPullRequest pr : openPrList) { // 转换创建时间为UTC时区的LocalDateTime LocalDateTime createUtcTime = pr.getCreatedAt() .toInstant() .atZone(ZoneOffset.UTC) .toLocalDateTime(); // 计算创建至今的天数,不满1天按0计算,可根据需求调整计算规则 long daysSinceCreate = ChronoUnit.DAYS.between( createUtcTime, LocalDateTime.now(ZoneOffset.UTC) ); // 按需处理结果,示例为打印输出 System.out.printf("PR编号#%d:%s,创建至今%d天%n", pr.getNumber(), pr.getTitle(), daysSinceCreate); } } }
如果你不想引入第三方依赖,也可以用Java原生HttpClient直接调用REST接口,自行解析响应JSON和响应头中的Link字段处理分页即可。
注意事项
- 计算天数时强制统一使用UTC时区,避免服务器时区和GitHub返回时间时区不一致导致的计算误差
- 若PR数量超过1000条,建议增加请求间隔避免触发限流规则
内容的提问来源于stack exchange,提问作者pradeep3009
相关产品推荐
相关产品推荐

