public async Task <List <SiteLink> > GetWikiData(MusicBrainsJsonModel model, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); if (model == null) { throw new ArgumentNullException(nameof(model), "Model cannot be null."); } var id = MashupServiceHelper.ParseWikiDataId(model.Relations); if (string.IsNullOrEmpty(id)) { return(null); } var cachedWikiData = _cacheHelper.GetFromCache <List <SiteLink> >($"WikiData_{id}"); if (cachedWikiData != null) { return(cachedWikiData); } var baseUrl = _configuration.GetValue <string>("ApiUrls:WikiData").Replace("{id}", id); try { var client = new RestClient(baseUrl) { Timeout = -1 }; var response = await client.ExecuteGetAsync(new RestRequest(Method.GET), cancellationToken); var parsedResponse = JObject.Parse(response.Content); var siteLinkResults = parsedResponse["entities"][id]["sitelinks"].Children().ToList(); var siteLinksModel = siteLinkResults.Select(siteLink => siteLink.Children().First().ToObject <SiteLink>()).ToList(); if (siteLinksModel.Any()) { _cacheHelper.AddToCache($"WikiData_{id}", siteLinksModel, TimeSpan.FromDays(1)); return(siteLinksModel); } } catch (Exception e) { _logger.LogError(e, e.Message); throw; } return(null); }
public async Task <WikipediaJsonModel> GetWikipediaData(IReadOnlyCollection <SiteLink> siteLinks, string mbId, string lanCode, CancellationToken cancellationToken) { cancellationToken.ThrowIfCancellationRequested(); var cachedWikipediaData = _cacheHelper.GetFromCache <WikipediaJsonModel>($"Wikipedia_{mbId}_{lanCode}"); if (cachedWikipediaData != null) { return(cachedWikipediaData); } if (siteLinks == null || !siteLinks.Any()) { throw new ArgumentNullException(nameof(siteLinks)); } var currentSiteLink = MashupServiceHelper.GetSiteLinkForCurrentLang(siteLinks, lanCode); if (currentSiteLink == null || string.IsNullOrEmpty(currentSiteLink.Title)) { return(null); } var baseUrl = _configuration.GetValue <string>("ApiUrls:Wikipedia").Replace("{title}", HttpUtility.UrlEncode(currentSiteLink.Title)); try { var client = new RestClient(baseUrl) { Timeout = -1 }; var response = await client.ExecuteGetAsync(new RestRequest(Method.GET), cancellationToken); var parsedResponse = JObject.Parse(response.Content); var parsedResult = parsedResponse["query"]["pages"].Children().ToList(); var model = parsedResult.Children().First().ToObject <WikipediaJsonModel>(); if (model != null) { _cacheHelper.AddToCache($"Wikipedia_{mbId}_{lanCode}", model, TimeSpan.FromDays(1)); return(model); } } catch (Exception e) { _logger.LogError(e, e.Message); throw; } return(null); }