在 Java 中使用 OkHttp 按日期范围获取 GitHub Pull 请求时出现问题

问题描述 投票:0回答:1

我正在开发一个 Java 程序,使用 OkHttp 和 GitHub API 在指定日期范围内从 GitHub 存储库检索拉取请求。但是,我遇到了代码似乎无法根据日期范围正确过滤拉取请求的问题。

我使用 OkHttp 向 GitHub API 发出 GET 请求,以从特定存储库获取拉取请求。

我想根据拉取请求的创建日期过滤拉取请求,并且我使用 API URL 中的“created”参数来指定日期范围。日期格式正确,采用 ISO 8601 格式 ('yyyy-MM-dd')。

尽管设置了日期范围,API 响应似乎并未按预期过滤拉取请求。我仍然收到指定日期范围之外的拉取请求。

package ConsumeGithubAPI;

import com.google.gson.*;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import java.io.IOException;

public class ConsumeGithubAPI {
    public static void main(String[] args) {
        JsonArray pullRequests = getPullRequests("-Owner-", "-reponame-", "2022-06-01", "2022-07-10");
        String formattedOutput = formatOutput(pullRequests);
        System.out.println(formattedOutput);
    }

    public static JsonArray getPullRequests(String owner, String repositoryName, String startDate, String endDate) {

        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url("https://api.github.com/repos/" + owner + "/" + repositoryName + "/pulls" +
                        "?state=all&per_page=100&page=1" +
                        "&since=" + startDate + "T00:00:00Z" +
                        "&until=" + endDate + "T23:59:59Z")
                .addHeader("Authorization", "-token-")
                .build();
        JsonArray modifiedPRs = new JsonArray();
        try {
            Response response = client.newCall(request).execute();
            String responseBody = response.body().string();

            JsonArray pullRequests = JsonParser.parseString(responseBody).getAsJsonArray();

            for (JsonElement pR : pullRequests) {
                JsonObject prObject = pR.getAsJsonObject();
                JsonObject prData = new JsonObject();
                prData.addProperty("id", prObject.get("id").getAsBigInteger());
                prData.addProperty("user", prObject.get("user").getAsJsonObject().get("login").getAsString());
                prData.addProperty("title", prObject.get("title").getAsString());
                prData.addProperty("state", prObject.get("state").getAsString());
                prData.addProperty("created_at", prObject.get("created_at").getAsString());
                modifiedPRs.add(prData);

            }
            response.close();
            return modifiedPRs;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return modifiedPRs;
    }

    private static String formatOutput(JsonArray jsonArray) {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        return gson.toJson(jsonArray);
    }
}

我尝试过的:

我已检查日期格式以确保其正确。 我已验证存储库存在并包含日期范围内的拉取请求。 我已查看 GitHub API 文档以确认正确的参数用法。

java github okhttp github-api intellij-14
1个回答
0
投票

请求

List pull requests
未提供查询参数
since
until
。这就是为什么它会返回不属于给定范围的存储库。唯一允许的查询参数是:
state
head
base
sort
direction
per_page
page
。请参阅下面的文档:

https://docs.github.com/en/rest/pulls/pulls?apiVersion=2022-11-28#list-pull-requests

我认为您可能会将请求与

List repositories for the authenticated user
混淆,后者接受查询参数
since
after

https://docs.github.com/en/rest/repos/repos?apiVersion=2022-11-28#list-repositories-for-the-authenticated-user

© www.soinside.com 2019 - 2024. All rights reserved.