Beispiel #1
0
        /// <summary>
        /// Provides article license. This is a mock implementation that assumes all articles are licensed under CC BY-SA 4.0, which is the case for Wikipedia.org.
        /// </summary>
        /// <param name="articleIdentifier">Id of the article to get license for.</param>
        /// <returns>Licensing information.</returns>
        public async Task <ILicense> GetArticleLicenseAsync(IArticleIdentifier articleIdentifier)
        {
            var copyright   = _copyrightFactory.CreateCopyright(CopyrightLicenseEnum.CcBySa);
            var attribution = _copyrightFactory.CreateAttributionWithoutAuthor(articleIdentifier.Title, "www.wikipedia.org");

            return(_licenseFactory.CreateLicense(copyright, attribution, LicenseRestrictionsEnum.None));
        }
        public async Task <IWikiArticle> GetArticleAsync(IArticleIdentifier articleIdentifier, ContentModel contentModel)
        {
            try
            {
                // Resolve license on a background task, retrieve after content has been parsed.
                var licenseTask = _articleLicenseProvider.GetArticleLicenseAsync(articleIdentifier);

                var parseQuery    = MediaWikiUtils.GetParseQuery(articleIdentifier.Title, articleIdentifier.Language, contentModel);
                var parseQueryUri = new Uri(parseQuery);

                var mwResponse = await _networkingProvider.DownloadContentAsync(parseQueryUri);

                var mwResponseObject = JsonConvert.DeserializeObject <ParserResponse.ParserRootObject>(mwResponse);

                string?content = contentModel switch
                {
                    ContentModel.Html => mwResponseObject?.parse?.text?["*"],
                    ContentModel.WikiText => mwResponseObject?.parse?.wikitext?["*"],
                    _ => throw new NotImplementedException()
                };

                if (content == null)
                {
                    var logSb = new StringBuilder().Append("Failed to deserialize MediaWiki parser output.").Append(Environment.NewLine)
                                .Append("Media Wiki response content: ").Append(mwResponse);

                    throw new ApplicationException(logSb.ToString());
                }

                // retrieve license from background task
                var license = await licenseTask;

                return(_wikiMediaFactory.CreateWikiArticle(articleIdentifier, license, content, contentModel));
            }

            catch (Exception e)
            {
                _logger.LogError(e, "Failed to retrieve article.");
                throw;
            }
        }
 public IWikiArticle CreateWikiArticle(IArticleIdentifier identifier, ILicense license, string content, ContentModel contentModel)
 {
     return(new WikiArticle(identifier, license, content, contentModel));
 }
 public async Task <IWikiArticle> GetArticleAsync(IArticleIdentifier articleIdentifier)
 {
     return(await _articleArchive.GetArticleAsync(articleIdentifier, ContentModel.Html));
 }
Beispiel #5
0
 internal WikiArticle(IArticleIdentifier identifier, ILicense license, string articleData, ContentModel contentModel) : base(license)
 {
     Identifier   = identifier;
     ArticleData  = articleData;
     ContentModel = contentModel;
 }