我正在开发一个 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 文档以确认正确的参数用法。
请求
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
。