public override Task <bool> EvaluateArticle(ArticleModel articleModel) { return(ExecuteSafe(async() => { var article = await DownloadAsync(articleModel); article = article.Replace("[[]]", "[]"); NzzArticle a = null; try { a = JsonConvert.DeserializeObject <NzzArticle>(article); } catch (Exception) { article = article.Replace(",\"publicationDateTime\":\"Invalid date\"", ""); try { a = JsonConvert.DeserializeObject <NzzArticle>(article); } catch { // no more fail safes } } if (a != null) { return await ArticleToArticleModel(a, articleModel); } return false; })); }
private Task <bool> ArticleToArticleModel(NzzArticle na, ArticleModel am) { return(ExecuteSafe(async() => { am.Content.Clear(); for (int i = 0; i < na.body.Length; i++) { if (na.body[i].style == "h4") { na.body[i].style = "h2"; } if (na.body[i].style == "h3") { na.body[i].style = "h1"; } string starttag = "<" + na.body[i].style + ">"; string endtag = "</" + na.body[i].style + ">"; if (string.IsNullOrWhiteSpace(na.body[i].text)) { foreach (var nzzBox in na.body[i].boxes) { if (nzzBox.type == "image") { var uri = ParseImageUri(nzzBox.path); if (uri != null) { am.Content.Add(new ImageContentModel() { Url = uri, Text = TextHelper.TextToTextModel(nzzBox.caption) }); } } else if (nzzBox.type == "video" || nzzBox.type == "html") { //dont do shit } else if (nzzBox.type == "infobox") { var newContent = HtmlConverter.CreateOnce(am.Feed.Source.PublicBaseUrl).HtmlToParagraph("<p>" + nzzBox.body + "</p>"); foreach (var paragraphModel in newContent) { var ntm = new TextModel() { Children = paragraphModel.Children, TextType = TextType.Cursive }; paragraphModel.Children = new List <TextModel> { ntm }; } if (!string.IsNullOrWhiteSpace(nzzBox.title)) { newContent.Insert(0, new ParagraphModel() { ParagraphType = ParagraphType.Title, Children = new List <TextModel>() { new TextModel() { Text = nzzBox.title, TextType = TextType.Cursive } } }); } if (newContent.Any()) { am.Content.Add(new TextContentModel() { Content = newContent }); } } else { LogHelper.Instance.LogInfo("nzz content type not found: " + nzzBox.mimeType, this); } } } else { if (!na.body[i].text.StartsWith("Mehr zum Thema")) { var content = HtmlConverter.CreateOnce(am.Feed.Source.PublicBaseUrl).HtmlToParagraph(starttag + na.body[i].text + endtag); if (content != null && content.Count > 0) { am.Content.Add(new TextContentModel() { Content = content }); } } } } if (!am.Content.Any()) { am.Content.Add(TextHelper.TextToTextModel("Der Inhalt dieses Artikels wird nicht unterstützt. Öffne den Artikel im Browser um mehr zu sehen.")); } if (na.authors != null) { foreach (var nzzAuthor in na.authors) { if (!string.IsNullOrEmpty(nzzAuthor.name)) { am.Author = nzzAuthor.name; if (!string.IsNullOrEmpty(nzzAuthor.abbreviation)) { am.Author += ", " + nzzAuthor.abbreviation; } } else { am.Author = nzzAuthor.abbreviation; } } } if (!string.IsNullOrEmpty(na.agency)) { am.Author += " " + na.agency; } if (string.IsNullOrWhiteSpace(am.Author)) { am.Author = "NZZ"; } if (!string.IsNullOrEmpty(na.leadText)) { am.Teaser = na.leadText; } am.Themes.Clear(); await AddThemesAsync(am, na.departments); return true; })); }