From 81dec07de83b67f3addcc28a38e14895817494fc Mon Sep 17 00:00:00 2001 From: LittleFish-233 Date: Sun, 2 Oct 2022 11:59:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=B1=87=E6=80=BB=E8=A1=A8?= =?UTF-8?q?=E6=A0=BC=E8=B7=B3=E8=BD=AC=E9=93=BE=E6=8E=A5=E6=96=B0=E5=BB=BA?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E9=A1=B5=EF=BC=8C=E4=BF=AE=E5=A4=8D=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E8=BD=AC=E8=BD=BD=E6=96=87=E7=AB=A0=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CnGalWebSite.Helper.csproj | 2 +- .../PostTools/ArticleService.cs | 28 +++++--- .../Component/Tables/GamesTableViewTip.razor | 61 ++++++++-------- .../Component/Tables/GroupsTableViewTip.razor | 51 ++++++------- .../Component/Tables/MakersTableViewTip.razor | 45 ++++++------ .../Component/Tables/RolesTableViewTip.razor | 71 ++++++++++--------- 6 files changed, 136 insertions(+), 122 deletions(-) diff --git a/CnGalWebSite/CnGalWebSite.Helper/CnGalWebSite.Helper.csproj b/CnGalWebSite/CnGalWebSite.Helper/CnGalWebSite.Helper.csproj index a5deed7dc..ac6c7a6d3 100644 --- a/CnGalWebSite/CnGalWebSite.Helper/CnGalWebSite.Helper.csproj +++ b/CnGalWebSite/CnGalWebSite.Helper/CnGalWebSite.Helper.csproj @@ -9,7 +9,7 @@ - + diff --git a/CnGalWebSite/CnGalWebSite.PublicToolbox/PostTools/ArticleService.cs b/CnGalWebSite/CnGalWebSite.PublicToolbox/PostTools/ArticleService.cs index 7024ff757..f3e35833f 100644 --- a/CnGalWebSite/CnGalWebSite.PublicToolbox/PostTools/ArticleService.cs +++ b/CnGalWebSite/CnGalWebSite.PublicToolbox/PostTools/ArticleService.cs @@ -60,7 +60,7 @@ public async Task ProcArticle(RepostArticleModel model, IEnumerable arti catch (Exception ex) { _logger.LogError(ex, "获取链接内容失败 {Link}", model.Url); - OnProgressUpdate(model, OutputLevel.Dager, "链接格式不正确"); + OnProgressUpdate(model, OutputLevel.Dager, "获取文章失败,请检查链接格式或联系管理员"); return; } @@ -134,22 +134,30 @@ private async Task ProcZhiHuArticleFromHtmlAsync(RepostArticleModel model, strin var name = ""; string image = null; string author = null; + var mainNode = node.FirstChild.ChildNodes.FirstOrDefault(s => s.HasClass("App-main")).FirstChild; //正文 try { - htmlStr = node.FirstChild.ChildNodes[2].FirstChild.ChildNodes.MaxBy(s => s.InnerText.Length).ChildNodes.MaxBy(s => s.InnerText.Length).LastChild.LastChild.InnerHtml; + htmlStr = mainNode.ChildNodes.MaxBy(s => s.InnerText.Length).ChildNodes.MaxBy(s => s.InnerText.Length).LastChild.LastChild.InnerHtml; } - catch + catch(Exception ex) { + throw new Exception("无法获取知乎文章内容,请联系管理员",ex); + } + //检查是否获取到正文 + if (string.IsNullOrWhiteSpace(htmlStr)) + { + throw new Exception("无法获取知乎文章内容,请联系管理员"); } + //主图 try { - var tempNode = node.FirstChild.ChildNodes[2].FirstChild.ChildNodes.FirstOrDefault(s => s.Name == "img"); + var tempNode = mainNode.ChildNodes.FirstOrDefault(s => s.Name == "img"); if (tempNode == null) { - tempNode = node.FirstChild.ChildNodes[2].FirstChild.ChildNodes.FirstOrDefault(s => s.OuterHtml.Contains("background-image")); + tempNode = mainNode.ChildNodes.FirstOrDefault(s => s.OuterHtml.Contains("background-image")); if (tempNode != null) { image = ToolHelper.MidStrEx(tempNode.OuterHtml, "url(", "?source"); @@ -167,7 +175,7 @@ private async Task ProcZhiHuArticleFromHtmlAsync(RepostArticleModel model, strin //标题 try { - name = node.FirstChild.ChildNodes[2].FirstChild.ChildNodes.MaxBy(s => s.InnerText.Length).ChildNodes[0].FirstChild.InnerText; + name = mainNode.ChildNodes.MaxBy(s => s.InnerText.Length).ChildNodes[0].FirstChild.InnerText; } catch { @@ -176,7 +184,7 @@ private async Task ProcZhiHuArticleFromHtmlAsync(RepostArticleModel model, strin //作者 try { - author = node.FirstChild.ChildNodes[2].FirstChild.ChildNodes.MaxBy(s => s.InnerText.Length).ChildNodes[0].ChildNodes[1].FirstChild.FirstChild.LastChild.FirstChild.InnerText; + author = mainNode.ChildNodes.MaxBy(s => s.InnerText.Length).ChildNodes[0].ChildNodes[1].FirstChild.FirstChild.LastChild.FirstChild.InnerText; } catch { @@ -185,7 +193,7 @@ private async Task ProcZhiHuArticleFromHtmlAsync(RepostArticleModel model, strin //时间 try { - var times = node.FirstChild.ChildNodes[2].FirstChild.ChildNodes.MaxBy(s => s.InnerText.Length).ChildNodes.Where(s => s.InnerText.Contains("发布于") || s.InnerText.Contains("编辑于")).Select(s => s.InnerText.Replace("发布于 ", "").Replace("编辑于 ", "")); + var times = mainNode.ChildNodes.MaxBy(s => s.InnerText.Length).ChildNodes.Where(s => s.InnerText.Contains("发布于") || s.InnerText.Contains("编辑于")).Select(s => s.InnerText.Replace("发布于 ", "").Replace("编辑于 ", "")); foreach (var item in times) { try @@ -208,6 +216,10 @@ private async Task ProcZhiHuArticleFromHtmlAsync(RepostArticleModel model, strin var converter = new ReverseMarkdown.Converter(); + if(string.IsNullOrWhiteSpace(htmlStr)) + { + throw new Exception("无法获取知乎文章内容,请联系管理员"); + } model.MainPage = converter.Convert(htmlStr); model.MainPage = await ProgressImage(model, model.MainPage, RepostArticleType.ZhiHu); diff --git a/CnGalWebSite/CnGalWebSite.Shared/Component/Tables/GamesTableViewTip.razor b/CnGalWebSite/CnGalWebSite.Shared/Component/Tables/GamesTableViewTip.razor index 1e8fcd344..69ef234ed 100644 --- a/CnGalWebSite/CnGalWebSite.Shared/Component/Tables/GamesTableViewTip.razor +++ b/CnGalWebSite/CnGalWebSite.Shared/Component/Tables/GamesTableViewTip.razor @@ -1,6 +1,7 @@ @inject HttpClient Http @inject ToastService? ToastService @inject NavigationManager NavigationManager +@inject IDataCacheService _dataCacheService @if (!isReady) { @@ -17,35 +18,35 @@ } else { - - - - - - - - - +
+ + + + + + + + - - - - - - - - - - - - - - + + + + + + + + + + + + + + -
+ } @code { @@ -79,11 +80,9 @@ else [Parameter] public EventCallback OnClickUrl { get; set; } - public Task OnLook(long id) + public async Task OnLook(long id) { - NavigationManager.NavigateTo("/entries/index/" + id); - return Task.CompletedTask; - + await _dataCacheService.OpenNewPage.InvokeAsync(ToolHelper.WebApiPath + "entries/index/" + id); } private Task> OnQueryBasicAsync(QueryPageOptions options) { diff --git a/CnGalWebSite/CnGalWebSite.Shared/Component/Tables/GroupsTableViewTip.razor b/CnGalWebSite/CnGalWebSite.Shared/Component/Tables/GroupsTableViewTip.razor index de3248296..9c80e5878 100644 --- a/CnGalWebSite/CnGalWebSite.Shared/Component/Tables/GroupsTableViewTip.razor +++ b/CnGalWebSite/CnGalWebSite.Shared/Component/Tables/GroupsTableViewTip.razor @@ -1,6 +1,7 @@ @inject HttpClient Http @inject ToastService? ToastService @inject NavigationManager NavigationManager +@inject IDataCacheService _dataCacheService @if (!isReady) { @@ -17,28 +18,28 @@ } else { - - - - - - - - - - - - - - - - - - -
+ + + + + + + + + + + + + + + + + + +
} @@ -61,10 +62,10 @@ else [Parameter] public EventCallback OnClickUrl { get; set; } - public Task OnLook(long id) + public async Task OnLook(long id) { - NavigationManager.NavigateTo("/entries/index/" + id); - return Task.CompletedTask; + await _dataCacheService.OpenNewPage.InvokeAsync(ToolHelper.WebApiPath + "entries/index/" + id); + } diff --git a/CnGalWebSite/CnGalWebSite.Shared/Component/Tables/MakersTableViewTip.razor b/CnGalWebSite/CnGalWebSite.Shared/Component/Tables/MakersTableViewTip.razor index 2881cb792..5e5fb7bb9 100644 --- a/CnGalWebSite/CnGalWebSite.Shared/Component/Tables/MakersTableViewTip.razor +++ b/CnGalWebSite/CnGalWebSite.Shared/Component/Tables/MakersTableViewTip.razor @@ -1,6 +1,7 @@ @inject HttpClient Http @inject ToastService? ToastService @inject NavigationManager NavigationManager +@inject IDataCacheService _dataCacheService @if (!isReady) { @@ -17,25 +18,25 @@ } else { - - - - - - - - - - - - - - - -
+ + + + + + + + + + + + + + + +
} @@ -58,10 +59,10 @@ else [Parameter] public EventCallback OnClickUrl { get; set; } - public Task OnLook(long id) + public async Task OnLook(long id) { - NavigationManager.NavigateTo("/entries/index/" + id); - return Task.CompletedTask; + await _dataCacheService.OpenNewPage.InvokeAsync(ToolHelper.WebApiPath + "entries/index/" + id); + } protected override async Task OnInitializedAsync() diff --git a/CnGalWebSite/CnGalWebSite.Shared/Component/Tables/RolesTableViewTip.razor b/CnGalWebSite/CnGalWebSite.Shared/Component/Tables/RolesTableViewTip.razor index 0d7e4d9bb..cb221b214 100644 --- a/CnGalWebSite/CnGalWebSite.Shared/Component/Tables/RolesTableViewTip.razor +++ b/CnGalWebSite/CnGalWebSite.Shared/Component/Tables/RolesTableViewTip.razor @@ -1,6 +1,7 @@ @inject HttpClient Http @inject ToastService? ToastService @inject NavigationManager NavigationManager +@inject IDataCacheService _dataCacheService @if (!isReady) { @@ -17,38 +18,38 @@ } else { - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
} @@ -73,10 +74,10 @@ else [Parameter] public EventCallback OnClickUrl { get; set; } - public Task OnLook(long id) + public async Task OnLook(long id) { - NavigationManager.NavigateTo("/entries/index/" + id); - return Task.CompletedTask; + await _dataCacheService.OpenNewPage.InvokeAsync(ToolHelper.WebApiPath + "entries/index/" + id); + } protected override async Task OnInitializedAsync()