public async Task <MusicAlbumModel> GetAlbumAsync(ReleaseGroup x) { ClientUrlsOptions clientUrls = _configuration.GetSection(ClientUrlsOptions.ClientUrls).Get <ClientUrlsOptions>(); List <string> albumImages = null; try { string artUrl = string.Format(clientUrls.CoverArtUrl, x.CoverArtId); var coverArtRet = await _httpClientHandler.createHttpResponse(artUrl); albumImages = _helper.GetCoverArtImages(coverArtRet) ?? new List <string>(); } catch (Exception ex) { if (!ex.Message.Contains("404")) //some images doesnt exist { throw; } } return(new MusicAlbumModel() { CoverArtId = x.CoverArtId, Title = x.Title, ImageUrls = albumImages }); }
/// <summary> /// Get Artist information by using various APIs /// </summary> /// <param name="mbId"></param> /// <returns></returns> public async Task <ArtistModel> GetArtistInfo(string mbId) { //ClientUrlsOptions clientUrls = // (ClientUrlsOptions.ClientUrls).Get<ClientUrlsOptions>(); //var myConfig = new Dictionary<string, string> //{ // {"ClientUrls:MusicBrainzUrl", "http://musicbrainz.org/ws/2/artist/{0}?&fmt=json&inc=url-rels+release-groups" }, // {"ClientUrls:WikiDataUrl", "https://www.wikidata.org/w/api.php?action=wbgetentities&ids={0}&format=json&props=sitelinks" }, // {"ClientUrls:WikiPediaUrl", "https://en.wikipedia.org/w/api.php?action=query&format=json&prop=extracts&exintro=true&redirects=true&titles={0}" }, // {"ClientUrls:CoverArtUrl", "http://coverartarchive.org/release-group/{0}" }, //}; ClientUrlsOptions clientUrls = _configuration.GetSection(ClientUrlsOptions.ClientUrls).Get <ClientUrlsOptions>(); string url = string.Format(clientUrls.MusicBrainzUrl, mbId); // GetArtistByIdAsync var stringResponse = await _httpClientHandler.createHttpResponse(url); var artist = JsonConvert.DeserializeObject <Artist>(stringResponse); var urlToWikiData = artist.Relations.FirstOrDefault(x => x.Type == "wikidata"); var urlToWikipedia = artist.Relations.FirstOrDefault(x => x.Type == "wikipedia"); string artistName = ""; if (urlToWikipedia != null) { artistName = urlToWikipedia.Url.Resource.ToString().Split('/').LastOrDefault <string>(); } else { string wikidataID = urlToWikiData.Url.Resource.ToString().Split('/').LastOrDefault <string>(); var wikidataUrl = string.Format(clientUrls.WikiDataUrl, wikidataID); var wikiDataRet = await _httpClientHandler.createHttpResponse(wikidataUrl); IDictionary <string, JToken> Jsondata = JObject.Parse(wikiDataRet); artistName = Jsondata["entities"][wikidataID]["sitelinks"]["enwiki"]["title"].ToString(); } string wikipediaUrl = string.Format(clientUrls.WikiPediaUrl, artistName); var wikipediaRet = await _httpClientHandler.createHttpResponse(wikipediaUrl); string description = _helper.GetWikipediaDescription(wikipediaRet); ConcurrentBag <MusicAlbumModel> musicAlbum = new ConcurrentBag <MusicAlbumModel>(); //var Albums = artist.ReleaseGroup.Where(x => x.Type == "Album"); //var taskret = Albums.Select( x => GetAlbumAsync(x)); //await Task.WhenAll(taskret); //var resp = taskret.Select(x => x.Result ); //foreach (var item in resp) //{ // musicAlbum.Add(item); //} return(new ArtistModel() { MbId = mbId, Albums = musicAlbum.ToList(), ArtistName = artistName, Description = description }); }