You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:24:05