Пример #1
0
        public IRepository GetRepository(IRepositoryUrl repositoryUrl)
        {
            using (WebClient webClient = CreateWebClient()) {
                HtmlDocument htmlDocument = new HtmlDocument();

                htmlDocument.LoadHtml(webClient.DownloadString(repositoryUrl.CodeUrl));

                string defaultDownloadUrl = $"{GitHubUtilities.RootUrl}{repositoryUrl.Owner}/{repositoryUrl.RepositoryName}/archive/{(string.IsNullOrWhiteSpace(repositoryUrl.BranchName) ? "master" : repositoryUrl.BranchName)}.zip";
                string downloadUrl        = GitHubUtilities.RootUrl.TrimEnd('/') + htmlDocument.DocumentNode.SelectNodes(@"//a[contains(.,'Download ZIP')]").FirstOrDefault()?.GetAttributeValue("href", string.Empty);

                return(new Repository()
                {
                    Url = repositoryUrl,
                    DownloadUrl = downloadUrl.EndsWith("/") ? defaultDownloadUrl : downloadUrl,
                });
            }
        }
Пример #2
0
        public IEnumerable <IRelease> GetReleases(IRepositoryUrl repositoryUrl, int numberOfReleases)
        {
            string nextPageUrl = repositoryUrl.ReleasesUrl;

            List <IRelease> releases = new List <IRelease>();

            using (WebClient webClient = CreateWebClient()) {
                HtmlDocument htmlDocument = new HtmlDocument();

                while (releases.Count() < numberOfReleases)
                {
                    htmlDocument.LoadHtml(webClient.DownloadString(repositoryUrl.ReleasesUrl));

                    IEnumerable <HtmlNode> releaseEntryNodes = htmlDocument.DocumentNode.SelectNodes(@"//div[@class='release-entry']");

                    if (releaseEntryNodes.Count() <= 0)
                    {
                        break;
                    }

                    releases.AddRange(releaseEntryNodes.Select(node => ParseReleaseEntry(node)));

                    // Go the next page of releases.

                    if (releases.Count() < numberOfReleases)
                    {
                        nextPageUrl = htmlDocument.DocumentNode.SelectNodes(@"//a[text()='Next']").FirstOrDefault()?.GetAttributeValue("href", string.Empty);

                        if (string.IsNullOrWhiteSpace(nextPageUrl))
                        {
                            break;
                        }
                    }
                }
            }

            return(releases.Take(numberOfReleases));
        }
Пример #3
0
 public static IRelease GetLatestRelease(this IGitHubClient gitHubClient, IRepositoryUrl repositoryUrl)
 {
     return(gitHubClient.GetReleases(repositoryUrl, 1).FirstOrDefault());
 }