/// <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)); }
internal WikiArticle(IArticleIdentifier identifier, ILicense license, string articleData, ContentModel contentModel) : base(license) { Identifier = identifier; ArticleData = articleData; ContentModel = contentModel; }