public void TestGetWikipediaArticleStub() { var s = @"http://wikipedia.com/article/Nirvana_(band)"; Assert.Equal("Nirvana_(band)", HelpUtils.GetWikipediaArticleStub(s)); }
public void TestGetWikipediaArticleStubEmptyString() { var s = @""; Assert.Equal("", HelpUtils.GetWikipediaArticleStub(s)); }
public ArtistQueryResponse Find(string key) { // our return class that will be serialized to json ArtistQueryResponse item = new ArtistQueryResponse(); if (_mbAdapter == null) { _mbAdapter = new MusicBrainzAdapter(this._settings.MusicBrainzEndpointURL); } if (_caaAdapter == null) { _caaAdapter = new CoverArtArchiveAdapter(this._settings.CoverArtArchiveEndpointURL); } if (_wikiAdapter == null) { _wikiAdapter = new WikipediaAdapter(this._settings.WikipediaEndpointURL); } // by using Nito library, exceptions arent swallowed as aggregateexception. We handle it straight away instead. var result = AsyncContext.Run(() => _mbAdapter.LookupAsync(key)); // populate some metadata returned from MB item.mbid = (Guid)result.SelectToken("id"); item.country = (String)result.SelectToken("country"); item.type = (String)result.SelectToken("type"); item.name = (String)result.SelectToken("name"); // Get wiki stub name, so we can fetch description var wikiRelation = result.SelectTokens("relations[*]").Where(s => String.Equals((string)s["type"], "wikipedia", StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault(); if (wikiRelation != null) { var stubName = (string)wikiRelation.SelectToken("url.resource"); item.description = AsyncContext.Run(() => _wikiAdapter.GetDescriptionAsync(HelpUtils.GetWikipediaArticleStub(stubName))); } // grab albums from MusicBrainz to lookup against CoverArtArchive var albums = result.SelectTokens("release-groups[*]").Where(s => String.Equals((string)s["primary-type"], "Album", StringComparison.CurrentCultureIgnoreCase)) .Select(a => new { id = (Guid)a["id"], title = (string)a["title"] }); // put it in a dictionay for near O(1) performance when iterating below. Dictionary <Guid, string> dictAlbums = albums.ToDictionary(k => k.id, e => e.title); // Query CoverArtArchive for covers var covers = AsyncContext.Run(() => Task.WhenAll(dictAlbums.Select(a => _caaAdapter.GetCoverArtURLAsync(a.Key)))); foreach (var f in covers) { item.albums.Add(new Album { id = f.Item1, title = dictAlbums[f.Item1], image = f.Item2, thumblarge = f.Item3, thumbsmall = f.Item4 }); } return(item); }