やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Raspbian stretch MonoDevelop Eto.Forms Code で GitHub クライアント Octokit とその拡張 Octokit.Reactive を使いリポジトリ一覧を取得してみた

 いいね。 

成果物

対象環境

前回

手順

  1. プロジェクト作成
  2. NuGetでOctokitを追加
  3. ソースコード作成
  4. 実行

1. プロジェクト作成

  1. MonoDevelopを起動する
  2. メニュー→ファイル新しいソリューション
    f:id:ytyaru:20181201194454p:plain
  3. マルチプラットフォームアプリEto Application f:id:ytyaru:20181202083840p:plain
  4. 名前などを適当に入力し、Codeを選択する
    f:id:ytyaru:20181202083922p:plain
  5. 場所を入力する
    f:id:ytyaru:20181201194509p:plain
  6. プロジェクトが作成される
    f:id:ytyaru:20181202084143p:plain

2. NuGetでOctokitを追加

  1. メニュー→プロジェクトNuGet パッケージの追加
    f:id:ytyaru:20181201194958p:plain
  2. パッケージを追加ダイアログから欲しいパッケージを探す
    f:id:ytyaru:20181201195154p:plain
  3. 検索窓にoctokitと入力して絞り込む
    f:id:ytyaru:20181205111024p:plain
  4. OctokitOctokit.Reactiveを選択する
    f:id:ytyaru:20181205132846p:plain
  5. パッケージを追加ボタンをクリックする f:id:ytyaru:20181206111605p:plain
  6. 同意する f:id:ytyaru:20181206111622p:plain

4. ソースコード作成

MainForm.cs

using System;
using System.IO;
using System.Collections;
using Eto.Forms;
using Eto.Drawing;
using Octokit;
using Octokit.Internal; // InMemoryCredentialStore
using Octokit.Reactive; // ObservableRepositoriesClient

namespace HelloOctokit
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            GetRepos();
        }
        public void GetRepos() {
            //var github = new GitHubClient(new ProductHeaderValue("GitHubClient"));
            var credential = new Credentials("username", "password"); // GitHubユーザ名とパスワード
            var github = new GitHubClient(
                new ProductHeaderValue("GitHubClient_ytyaru"), 
                new InMemoryCredentialStore(credential));
            var reposObserver = new ObservableRepositoriesClient(github);
            
            using (FileStream fs = new FileStream("/tmp/work/repos.tsv", System.IO.FileMode.OpenOrCreate)) {
                using (StreamWriter writer = new StreamWriter(fs)) {
                    writer.WriteLine(String.Join("\t", new string[] { "Id","Name","Size","Description","Homepage","CreatedAt","UpdatedAt" }));
                    reposObserver.GetAllForUser("ytyaru").Subscribe(
                        i => {
                            writer.WriteLine(String.Join("\t", new string[] { i.Id.ToString(),i.Name.ToString(),i.Size.ToString(),i.Description,i.Homepage,i.CreatedAt.ToString("yyyy-MM-dd HH:mm:ss"),i.UpdatedAt.ToString("yyyy-MM-dd HH:mm:ss") }));
                            //writer.WriteLine(i.Id + "\t" + i.Name + "\t" + i.Size + "\t" + i.Description + "\t" + i.Homepage + "\t" + i.CreatedAt + "\t" + i.PushedAt + "\t" + i.UpdatedAt);
                        }
                    );
                    writer.Flush();
                }
            }
            ;
        }
    }
}

3. 実行

  1. Ctrl+F5で実行
  2. 怒られた
    f:id:ytyaru:20181202084218p:plain
  3. ファイルパスを辿ってexeファイルを直接叩くと実行できた
    f:id:ytyaru:20181202084343p:plain

 /tmp/work/repos.tsvファイルが作成される。

 なお、ソースコード内のユーザ名とパスワードを入力し、再コンパイルしないと動作しない。

所感

 これで楽にGitHubへアクセスできる。C#は楽ちんすぎて最高。