public async Task <NuGetPackageSearchResponse> SearchPackages(string searchTerm, string source) { if (string.IsNullOrEmpty(searchTerm)) { throw new ArgumentNullException("searchTerm"); } if (string.IsNullOrEmpty(source)) { throw new ArgumentNullException("source"); } NuGetFactory factory = new NuGetFactory(source); var model = new NuGetPackageSearchResponse { Request = new NuGetPackageSearchRequest { SearchKeyword = searchTerm, Source = source, SourceUrl = factory.SourceUrl } }; var searchResource = await factory.GetSearch(); var packageMeta = await searchResource.Search(searchTerm, new SearchFilter { IncludePrerelease = true }, 0, 100, CancellationToken.None); var packagesFound = packageMeta.ToList(); foreach (var searchInfo in packagesFound) { var result = new NuGetPackageSearchResult(); result.Title = searchInfo.Title; result.Summary = searchInfo.Summary; result.DownloadCount = searchInfo.LatestPackageMetadata.DownloadCount; result.IconUri = searchInfo.LatestPackageMetadata.IconUrl; result.PackageID = searchInfo.Identity.Id; result.LatestVersion = searchInfo.LatestPackageMetadata.Identity.Version.ToNormalizedString(); result.Authors = searchInfo.LatestPackageMetadata.Authors; result.Tags = searchInfo.LatestPackageMetadata.Tags; model.Results.Add(result); } return(model); }
public async Task<NuGetPackageSearchResponse> SearchPackages(string searchTerm, string source) { if (string.IsNullOrEmpty(searchTerm)) throw new ArgumentNullException("searchTerm"); if (string.IsNullOrEmpty(source)) throw new ArgumentNullException("source"); NuGetFactory factory = new NuGetFactory(source); var model = new NuGetPackageSearchResponse { Request = new NuGetPackageSearchRequest { SearchKeyword = searchTerm, Source = source, SourceUrl = factory.SourceUrl } }; var searchResource = await factory.GetSearch(); var packageMeta = await searchResource.Search(searchTerm, new SearchFilter { IncludePrerelease = true }, 0, 100, CancellationToken.None); var packagesFound = packageMeta.ToList(); foreach (var searchInfo in packagesFound) { var result = new NuGetPackageSearchResult(); result.Title = searchInfo.Title; result.Summary = searchInfo.Summary; result.DownloadCount = searchInfo.LatestPackageMetadata.DownloadCount; result.IconUri = searchInfo.LatestPackageMetadata.IconUrl; result.PackageID = searchInfo.Identity.Id; result.LatestVersion = searchInfo.LatestPackageMetadata.Identity.Version.ToNormalizedString(); result.Authors = searchInfo.LatestPackageMetadata.Authors; result.Tags = searchInfo.LatestPackageMetadata.Tags; model.Results.Add(result); } return model; }
public async Task CanReadPackageInfo() { string nuGetOrgFeed = "https://api.nuget.org/v3/index.json"; var repository = Repository.Factory.GetCoreV3(nuGetOrgFeed); ServiceIndexResourceV3 indexResource = repository.GetResource <ServiceIndexResourceV3>(); IReadOnlyList <ServiceIndexEntry> searchResources = indexResource.GetServiceEntries("SearchQueryService"); string queryString = $"{searchResources[0].Uri}?q=Microsoft.DotNet.Common.ProjectTemplates.5.0&skip=0&take=10&prerelease=true&semVerLevel=2.0.0"; Uri queryUri = new Uri(queryString); using (HttpClient client = new HttpClient()) using (HttpResponseMessage response = await client.GetAsync(queryUri, CancellationToken.None).ConfigureAwait(false)) { if (response.IsSuccessStatusCode) { string responseText = await response.Content.ReadAsStringAsync(CancellationToken.None).ConfigureAwait(false); NuGetPackageSearchResult resultsForPage = NuGetPackageSearchResult.FromJObject(JObject.Parse(responseText)); Assert.Equal(1, resultsForPage.TotalHits); Assert.Equal(1, resultsForPage.Data.Count); var packageInfo = resultsForPage.Data[0]; Assert.Equal("Microsoft.DotNet.Common.ProjectTemplates.5.0", packageInfo.Name); Assert.NotEmpty(packageInfo.Version); Assert.True(packageInfo.TotalDownloads > 0); Assert.True(packageInfo.Verified); Assert.Contains("Microsoft", packageInfo.Owners); Assert.NotEmpty(packageInfo.Description); Assert.NotEmpty(packageInfo.IconUrl); } else { Assert.True(false, "HTTP request failed."); } } }