示例#1
0
        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);
        }
示例#2
0
        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);
        }