java – 将GitHub问题下载到.csv文件

使用
eclipse
GitHub问题下载egit不会返回任何内容.

最近,我一直在尝试创建一个Java桌面应用程序(用于Windows),它将从特定的GitHub问题库下载GitHub问题,并将它们保存在.csv文件中.

我使用Swing创建了一个简单的GUI来启用存储库名称的输入.我也使用eclipse的egit库来建立与GitHub的连接以便下载问题.我使用身份验证,使用.properties文件输入,以验证egit与GitHub的连接.

以下是我的应用程序用于下载问题并将其写入.csv文件的主要代码:

package io.github.psgs.issuesdownload;

import io.github.psgs.issuesdownload.gui.GUI;
import org.eclipse.egit.github.core.Issue;
import org.eclipse.egit.github.core.client.GitHubClient;
import org.eclipse.egit.github.core.service.IssueService;

import java.io.FileWriter;
import java.io.IOException;

public class IssuesDownload {

    public static void main(String[] args) {
        try {
        Config.loadConfiguration();
        } catch(IOException ex) {

        }
        GUI.main(args);
    }

    public static String saveIssues(String repoDetails) {
        String[] repoInfo = repoDetails.split("/");
        String repoOwner = repoInfo[0];
        String repoName = repoInfo[1];

        GitHubClient client = new GitHubClient();
        client.setCredentials(Config.githubuser, Config.githubpass);

        IssueService issueService = new IssueService(client);

        try {
            FileWriter writer = new FileWriter("issues.csv");
            //String[] header = {"Id", "Title", "Creator", "Assignee", "Milestone", "State", "Body Text"};
            writer.append("Id, Title, Creator, Assignee, Milestone, State, Body Text");
            writer.append("\n");

            for (Issue issue : issueService.getIssues(repoOwner, repoName, null)) {
                //String[] data = {String.valueOf(issue.getId()), issue.getTitle(), issue.getUser().getName(), issue.getAssignee().getName(), issue.getMilestone().getTitle(), issue.getState(), issue.getBodyText()};
                writer.append(String.valueOf(issue.getId()) + ",");
                writer.append(issue.getTitle() + ",");
                writer.append(issue.getUser().getName() + ",");
                writer.append(issue.getAssignee().getName() + ",");
                writer.append(issue.getMilestone().getTitle() + ",");
                writer.append(issue.getState() + ",");
                writer.append(issue.getBodyText());
                writer.append("\n");
            }
            writer.flush();
            writer.close();
            return "Download Complete!";
        } catch (IOException ex) {
            System.out.println("An IOException has occured!");
            ex.printStackTrace();
            if (ex.getMessage().equalsIgnoreCase("api.github.com")) {
                return "An error has occured, reaching " + ex.getMessage() + "! Please check your network connection.";
            }
        }
        return "An error has occured!";
    }
}

此代码也可在以下位置获得:https://gist.github.com/psgs/9048602

整个存储库可以在:https://github.com/psgs/IssuesDownload找到

当我运行此代码时,.properties文件与编译.jar文件位于同一目录中,GitHub问题不会出现在.csv文件中.我已经测试了.csv文件输出,并且在删除下载代码时头文件正确写入.

有人会知道为什么会这样吗?也许这是我错过的身份验证问题?

最佳答案 在尝试了一些新的API包装器之后,我发现了一个可以工作的API库.我现在使用
Kohsuke Kawaguchi’s GitHub API for Java连接到GitHub.

<dependency>
        <groupId>org.kohsuke</groupId>
        <artifactId>github-api</artifactId>
        <version>1.49</version>
</dependency>

我的代码现在如下所示:

package io.github.psgs.issuesdownload;

import io.github.psgs.issuesdownload.gui.GUI;
import org.kohsuke.github.GHIssue;
import org.kohsuke.github.GHIssueState;
import org.kohsuke.github.GHRepository;
import org.kohsuke.github.GitHub;

import java.io.FileWriter;
import java.io.IOException;

public class IssuesDownload {

    public static void main(String[] args) {
        try {
            Config.loadConfiguration();
        } catch (IOException ex) {
            System.out.println("An IOException had occured while loading the configuration!");
            ex.printStackTrace();
        }
        GUI.main(args);
    }

    public static String saveIssues(String repoDetails, GHIssueState issueState) {

        String[] repoInfo = repoDetails.split("/");

        try {
            GitHub github = GitHub.connectUsingOAuth(Config.githubtoken);
            GHRepository repository = github.getUser(repoInfo[0]).getRepository(repoInfo[1]);

            FileWriter writer = new FileWriter("issues.csv");
            writer.append("Id, Title, Creator, Assignee, Milestone, State, Body Text");
            writer.append("\n");

            for (GHIssue issue : repository.getIssues(issueState)) {
                writer.append(String.valueOf(issue.getNumber()) + ",");
                writer.append(issue.getTitle() + ",");
                writer.append(issue.getUser().getLogin() + ",");
                if (issue.getAssignee() != null) {
                    writer.append(issue.getAssignee().getName() + ",");
                } else {
                    writer.append(" ,");
                }
                if (issue.getMilestone() != null) {
                    writer.append(issue.getMilestone().getTitle() + ",");
                } else {
                    writer.append(" ,");
                }
                writer.append(issue.getState() + ",");
                writer.append(issue.getBody() + ",");
                writer.append("\n");
            }
            writer.flush();
            writer.close();
            return "Download Complete!";
        } catch (IOException ex) {
            System.out.println("An IOException has occured!");
            ex.printStackTrace();
            if (ex.getMessage().equalsIgnoreCase("api.github.com")) {
            return "An error has occurred reaching " + ex.getMessage() + "! Please check your network connection.";
            }
        }
        return "An error has occured!";
    }
}
点赞