Git:Gist APIを使って、ユーザーを指定して新たなGistリポジトリを作成するC#コード

Gistはちょっとしたコードを共有するのに便利なのですが、いちいちWebコンソールで新たなリポジトリを作成しないといけないのが面倒です。

そこで、コードを使ってできないか調べたところ、Gist APIを使えることがわかりました。

 

ただ、普通にやっただけでは匿名ユーザーのリポジトリとなってしまったので、色々やってユーザーを指定してできるようになったので備忘録としてメモしておきます。

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using Codeplex.Reactive.Asynchronous;
using System.Reactive.Linq;

namespace GistSharpConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            var encoding = Encoding.UTF8;
            var client = new WebClient();
            string user = "user";
            string password = "password";
            client.Headers.Add("Authorization",
                String.Format("Basic {0}",
                    Convert.ToBase64String(
                        encoding.GetBytes(String.Format("{0}:{1}", user, password))
                        )
                    )
                );

            string gistapiurl = @"https://api.github.com/gists";
            string content = "\"String file contents";

            var response = client.UploadDataObservableAsync(gistapiurl,
                            encoding.GetBytes(@"
                    {
                        ""description"": ""the description for this gist"",
                        ""public"": true,
                        ""files"": {
                            ""file1.txt"": {
                                ""content"": """ + escape(content) + @"""
                            }
                        }
                    }
                    "))
                                .Select(x => encoding.GetString(x))
                                .First();

            Console.WriteLine(response);
        }

        private static string escape(string value)
        {
            return value.Replace("\"", "\\\"");
        }
    }
}

 

ポイントは次の通り。

  • Gist APIを使って新たなGistリポジトリ―を作成するには、”https://api.github.com/gists”にPOSTする。
  • POSTにはSystem.Net.WebClientクラスのUploadDataメソッドを使用する。
    • 今回は@neueccさん作成のReactivePropertyに含まれる、CodePlex.Reactive.Asynchronous.WebClientExtensionsクラスに定義された拡張メソッドを使用。
  • ユーザーを指定するには、HTTP Headerの”Authorization”を使用する。
    • WebClientクラスではHeadersプロパティのAddメソッドを使い、ユーザー、パスワードを”:”で連結したものをBase64エンコードして設定する。

 

今回のコードを入り口にして、Visual StudioからGistリポジトリの作成→クローンを行うようなVS拡張ができたら素敵だなーと。

「いつかやる」タスクに積んでおきます。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中