2017-09-19 8 views
0

GitHubリンクからファイルのリストを取得するにはどうすればよいですか?例えばCで特定のGitHubリポジトリ(リンク)からファイルのリストを取得するには

、このGitHubのリポジトリのリンクから - https://github.com/crs2007/ActiveReport/tree/master/ActiveReport/SQLFiles

私たちは、SQLテキストファイルがあることがわかります - GitHub page with the relevant files(Pic)

私は、このファイルのリストを取得したい -

  • CorruptionIssues.sql
  • DBAlert.sql
  • DataBaseInfo.sql
  • DatabaseDefaultLogin.sql
  • DatabaseFiles.sql
  • Deadlock.sql
  • DefaultTrace.sql
  • DiskInfo.sql
  • InstalledPrograms.sql
  • .etc ... SQL

ありがとうございました...

+0

https://stackoverflow.com/questions/1178389:場合は、あなたが外部ライブラリを使用することはできません、以下の例では、関連する多くの配管とはいえ、同じことを達成するために、プレーンのHttpClientを使用する方法を示しています/ browse-and-display-files-in-a-git-repo-without-cloning – whopper

答えて

1

次のような要求を行うことで

GitHub Contents APIを使用することができるはずです。

curl https://api.github.com/repos/crs2007/ActiveReport/contents/ActiveReport 

GithubのはJSON含むディレクトリの内容を返します。

これはC#で複数の方法で行うことができます。遭遇する可能性のあるほとんどの問題を解決するには、おそらくOctokitなどが推奨されます。

class Program 
{ 
    static void Main() 
    { 
     Task.Factory.StartNew(async() => 
     { 
      var repoOwner = "crs2007"; 
      var repoName = "ActiveReport"; 
      var path = "ActiveReport"; 

      var httpClientResults = await ListContents(repoOwner, repoName, path); 
      PrintResults("From HttpClient", httpClientResults); 

      var octokitResults = await ListContentsOctokit(repoOwner, repoName, path); 
      PrintResults("From Octokit", octokitResults); 

     }).Wait(); 
     Console.ReadKey(); 
    } 

    static async Task<IEnumerable<string>> ListContents(string repoOwner, string repoName, string path) 
    { 
     using (var client = GetGithubHttpClient()) 
     { 
      var resp = await client.GetAsync($"repos/{repoOwner}/{repoName}/contents/{path}"); 
      var bodyString = await resp.Content.ReadAsStringAsync(); 
      var bodyJson = JToken.Parse(bodyString); 
      return bodyJson.SelectTokens("$.[*].name").Select(token => token.Value<string>()); 
     } 
    } 

    static async Task<IEnumerable<string>> ListContentsOctokit(string repoOwner, string repoName, string path) 
    { 
     var client = new GitHubClient(new ProductHeaderValue("Github-API-Test")); 
     // client.Credentials = ... // Set credentials here, otherwise harsh rate limits apply. 

     var contents = await client.Repository.Content.GetAllContents(repoOwner, repoName, path); 
     return contents.Select(content => content.Name); 
    } 

    private static HttpClient GetGithubHttpClient() 
    { 
     return new HttpClient 
     { 
      BaseAddress = new Uri("https://api.github.com"), 
      DefaultRequestHeaders = 
      { 
       // NOTE: You'll have to set up Authentication tokens in real use scenario 
       // NOTE: as without it you're subject to harsh rate limits. 
       {"User-Agent", "Github-API-Test"} 
      } 
     }; 
    } 

    static void PrintResults(string source, IEnumerable<string> files) 
    { 
     Console.WriteLine(source); 
     foreach (var file in files) 
     { 
      Console.WriteLine($" -{file}"); 
     } 
    } 
} 
+0

質問はC#の解決策を求めています。質問の下のタグを参照してください。 – Amy

+0

@Amyそこにはっきり見逃されました。ありがとうございます。 – Alex

+0

ありがとうございました@Alex –

関連する問題