1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

C#でGitHubを操作するOctokit.netを使って色んな情報を取得する

Last updated at Posted at 2021-12-23

はじめに

C#でGitHubのリポジトリブラウザーみたいなのを作りたいと思い、C#でGitHubを操作できるライブラリであるoctokit.netでどんな情報が引っ張れそうか調べました。
octokit.netのリポジトリはこちら
公式ドキュメントはこちら

事前準備

個人アクセストークンの発行が必要です。取得方法はこちらを参照してください。
トークンに付与する権限はrepoのみでいいと思います。
また、プロジェクトにOctokit.netのNugetPackageをインストールする必要があります。
詳しくはこちら

色々情報を取得する

リポジトリ内のすべてのファイルを取得する

リポジトリブラウザーを作りたいので、まずは、指定したリポジトリファイルやフォルダ構造を閲覧できるよう、ファイルやフォルダを取得する必要があります。
以下のサンプルプログラムで説明します。



// GitHubクライアントを作成
var tokenAuth = new Credentials("ここに個人アクセストークンを指定する");
var client = new GitHubClient(new ProductHeaderValue("my-cool-app"),
new InMemoryCredentialStore(tokenAuth));

// ブランチをすべて取得
var branches = await client.Repository.Branch.GetAll("リポジトリのオーナー名", "リポジトリ名");

// リポジトリにあるファイルやフォルダの情報を取得

// リポジトリの直下のファイルまたはフォルダをすべて取得できる
// 第3引数にブランチ名を指定することもできる。
var contents = await client.Repository.Content.GetAllContents("リポジトリのオーナー名", "リポジトリ名");

// 上記で取得したフォルダのトップレベルのファイル・フォルダを取得する。
// フォルダまでのパスを指定すれば、そのフォルダ直下のファイルやフォルダが取得できる
var folderContents = await client.Repository.Content.GetAllContents("リポジトリのオーナー名", "リポジトリ名", 
    contents.FirstOrDefault(c => c.Type == ContentType.Dir).Path);

指定したファイルのコミット履歴を取得する

リポジトリブラウザでは、特定のコミット時点でのファイルを取得したい場合もあると思います。そのため、コミット履歴を取得してこようと思います。
以下のサンプルプログラムで説明します。


// 今回はリポジトリ直下の一番最初にあるファイルを指定
var contentPath = contents.FirstOrDefault(c => c.Type == ContentType.File).Path;
var commitRequest = new CommitRequest()
{
    Path = contentPath;
};

// 新しい順に10件だけ取得する
// 次の10件を取得したい場合はStartPageの指定を+1する
var apiOptions = new ApiOptions()
{
    PageCount = 1,
    PageSize = 10,
    StartPage = 1
};
var commits = await client.Repository.Commit.GetAll("リポジトリのオーナー名", "リポジトリ名", commitRequest, apiOptions);

指定したファイルを取得する

リポジトリのファイル一覧からファイルや、そのコミットを選択し、そのファイルを取得しようと思います。
以下のサンプルコードで説明します。


// ファイルのデータを取得する
// refernce引数にはファイルのブランチ名や、コミットハッシュを指定できる
// 今回は上の章で取得してきた、リポジトリの直下の一番最初にあるファイルの一番最初のコミットを指定
var reference = commits.FirstOrDefault().
var rawContent = await client.Repository.Content.GetRawContentByRef("リポジトリのオーナー名", "リポジトリ名", contentPath, reference);

バイト文字列が取得できます。
ContentPathからファイルの拡張子を取得してローカルフォルダに保存するなどすれば、ファイルを開くことができます。

さいごに

公式ドキュメントにはなぜか今回書いたようなリポジトリの中身を取得するみたいなのが書いてなかったのもあり、今回まとめてみました。
ライブラリのリポジトリを見ると、ライブラリでGitHubから柔軟に情報を取得できるみたいでした。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?