Skip to content

Commit

Permalink
数据汇总表格跳转链接新建标签页,修复无法转载文章的bug
Browse files Browse the repository at this point in the history
  • Loading branch information
LittleFish-233 committed Oct 2, 2022
1 parent 82f8f7d commit 81dec07
Show file tree
Hide file tree
Showing 6 changed files with 136 additions and 122 deletions.
Expand Up @@ -9,7 +9,7 @@

<ItemGroup>
<PackageReference Include="BootstrapBlazor" Version="6.6.2" />
<PackageReference Include="Masa.Blazor" Version="0.6.0-rc.6" />
<PackageReference Include="Masa.Blazor" Version="0.6.0-rc.2" />
<PackageReference Include="Microsoft.AspNetCore.Identity" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Identity.Stores" Version="6.0.9" />
<PackageReference Include="NodaTime" Version="3.1.2" />
Expand Down
Expand Up @@ -60,7 +60,7 @@ public async Task ProcArticle(RepostArticleModel model, IEnumerable<string> arti
catch (Exception ex)
{
_logger.LogError(ex, "获取链接内容失败 {Link}", model.Url);
OnProgressUpdate(model, OutputLevel.Dager, "链接格式不正确");
OnProgressUpdate(model, OutputLevel.Dager, "获取文章失败,请检查链接格式或联系管理员");
return;
}

Expand Down Expand Up @@ -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");
Expand All @@ -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
{
Expand All @@ -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
{
Expand All @@ -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
Expand All @@ -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);
Expand Down
@@ -1,6 +1,7 @@
@inject HttpClient Http
@inject ToastService? ToastService
@inject NavigationManager NavigationManager
@inject IDataCacheService _dataCacheService

@if (!isReady)
{
Expand All @@ -17,35 +18,35 @@
}
else
{
<Table TItem="BasicInforTableModel" IsPagination="true" PageItemsSource="@PageItems" IsStriped=true
OnQueryAsync="@OnQueryBasicAsync" SearchModel="@SearchModelBasic" ShowSearch="true" ShowLoading="true"
ShowExtendButtons="true" ExtendButtonColumnWidth="70" FixedExtendButtonsColumn="true"
ShowToolbar="true" ShowDefaultButtons="false" @ref="table">
<TableToolbarTemplate>
<CnGalWebSite.Shared.MasaComponent.Shared.Buttons.ExportButton TItem="BasicInforTableModel" Columns="table.Columns" Items="ModelBasic.BasicInfors" Name="游戏汇总表"/>
</TableToolbarTemplate>
<TableColumns>
<TableColumn @bind-Field="@context.RealId" Filterable="true" Sortable="true" Width="80" TextWrap="true" Fixed="true" />
<TableColumn @bind-Field="@context.IssueTime" FormatString="yyyy-MM-dd" Sortable="true" DefaultSort="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.Name" Filterable="true" Sortable="true" Searchable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.ProductionGroup" Filterable="true" Sortable="true" Searchable="true" Width="200" TextWrap="true" />
<Table TItem="BasicInforTableModel" IsPagination="true" PageItemsSource="@PageItems" IsStriped=true
OnQueryAsync="@OnQueryBasicAsync" SearchModel="@SearchModelBasic" ShowSearch="true" ShowLoading="true"
ShowExtendButtons="true" ExtendButtonColumnWidth="70" FixedExtendButtonsColumn="true"
ShowToolbar="true" ShowDefaultButtons="false" @ref="table">
<TableToolbarTemplate>
<CnGalWebSite.Shared.MasaComponent.Shared.Buttons.ExportButton TItem="BasicInforTableModel" Columns="table.Columns" Items="ModelBasic.BasicInfors" Name="游戏汇总表" />
</TableToolbarTemplate>
<TableColumns>
<TableColumn @bind-Field="@context.RealId" Filterable="true" Sortable="true" Width="80" TextWrap="true" Fixed="true" />
<TableColumn @bind-Field="@context.IssueTime" FormatString="yyyy-MM-dd" Sortable="true" DefaultSort="true" Width="100" TextWrap="true" />
<TableColumn @bind-Field="@context.Name" Filterable="true" Sortable="true" Searchable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.ProductionGroup" Filterable="true" Sortable="true" Searchable="true" Width="200" TextWrap="true" />

<TableColumn @bind-Field="@context.Original" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.GamePlatforms" Filterable="true" Sortable="true" Searchable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.Engine" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.Publisher" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.GameNickname" Filterable="true" Sortable="true" Searchable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.Tags" Filterable="true" Sortable="true" Searchable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.IssueMethod" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.OfficialWebsite" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.SteamId" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.QQgroupGame" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
</TableColumns>
<RowButtonTemplate>
<TableCellButton AutoSelectedRowWhenClick="false" Size="Size.ExtraSmall" Color="Color.Success" Icon="fa fa-share-square-o" Text="查看" IsAsync="true" OnClickWithoutRender="@(() => OnLook(context.RealId))" />
</RowButtonTemplate>
<TableColumn @bind-Field="@context.Original" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.GamePlatforms" Filterable="true" Sortable="true" Searchable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.Engine" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.Publisher" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.GameNickname" Filterable="true" Sortable="true" Searchable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.Tags" Filterable="true" Sortable="true" Searchable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.IssueMethod" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.OfficialWebsite" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.SteamId" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.QQgroupGame" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
</TableColumns>
<RowButtonTemplate>
<TableCellButton AutoSelectedRowWhenClick="false" Size="Size.ExtraSmall" Color="Color.Success" Icon="fa fa-share-square-o" Text="查看" IsAsync="true" OnClickWithoutRender="@(() => OnLook(context.RealId))" />
</RowButtonTemplate>

</Table>
</Table>
}

@code {
Expand Down Expand Up @@ -79,11 +80,9 @@ else
[Parameter]
public EventCallback<NavigateModel> 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<QueryData<BasicInforTableModel>> OnQueryBasicAsync(QueryPageOptions options)
{
Expand Down
@@ -1,6 +1,7 @@
@inject HttpClient Http
@inject ToastService? ToastService
@inject NavigationManager NavigationManager
@inject IDataCacheService _dataCacheService

@if (!isReady)
{
Expand All @@ -17,28 +18,28 @@
}
else
{
<Table TItem="GroupInforTableModel" IsPagination="true" PageItemsSource="@PageItems" IsStriped=true
OnQueryAsync="@OnQueryGroupAsync" SearchModel="@SearchModelGroup" ShowSearch="true" ShowLoading="true"
ShowExtendButtons="true" ExtendButtonColumnWidth="70" FixedExtendButtonsColumn="true"
ShowToolbar="true" ShowDefaultButtons="false" @ref="table">
<TableToolbarTemplate>
<CnGalWebSite.Shared.MasaComponent.Shared.Buttons.ExportButton TItem="GroupInforTableModel" Columns="table.Columns" Items="ModelGroup.GroupInfors" Name="制作组汇总表" />
</TableToolbarTemplate>
<TableColumns>
<TableColumn @bind-Field="@context.RealId" Filterable="true" Sortable="true" Width="100" TextWrap="true" Fixed="true" />
<TableColumn @bind-Field="@context.Name" Filterable="true" Sortable="true" Searchable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.AnotherNameGroup" Filterable="true" Sortable="true" Searchable="true" Width="200" TextWrap="true" />

<TableColumn @bind-Field="@context.QQgroupGroup" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.Bilibili" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.MicroBlog" Filterable="true" Sortable="true" Width="200" TextWrap="true" />

</TableColumns>
<RowButtonTemplate>
<TableCellButton AutoSelectedRowWhenClick="false" Size="Size.ExtraSmall" Color="Color.Success" Icon="fa fa-share-square-o" Text="查看" IsAsync="true" OnClickWithoutRender="@(() =>OnLook(context.RealId))" />
</RowButtonTemplate>

</Table>
<Table TItem="GroupInforTableModel" IsPagination="true" PageItemsSource="@PageItems" IsStriped=true
OnQueryAsync="@OnQueryGroupAsync" SearchModel="@SearchModelGroup" ShowSearch="true" ShowLoading="true"
ShowExtendButtons="true" ExtendButtonColumnWidth="70" FixedExtendButtonsColumn="true"
ShowToolbar="true" ShowDefaultButtons="false" @ref="table">
<TableToolbarTemplate>
<CnGalWebSite.Shared.MasaComponent.Shared.Buttons.ExportButton TItem="GroupInforTableModel" Columns="table.Columns" Items="ModelGroup.GroupInfors" Name="制作组汇总表" />
</TableToolbarTemplate>
<TableColumns>
<TableColumn @bind-Field="@context.RealId" Filterable="true" Sortable="true" Width="100" TextWrap="true" Fixed="true" />
<TableColumn @bind-Field="@context.Name" Filterable="true" Sortable="true" Searchable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.AnotherNameGroup" Filterable="true" Sortable="true" Searchable="true" Width="200" TextWrap="true" />

<TableColumn @bind-Field="@context.QQgroupGroup" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.Bilibili" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.MicroBlog" Filterable="true" Sortable="true" Width="200" TextWrap="true" />

</TableColumns>
<RowButtonTemplate>
<TableCellButton AutoSelectedRowWhenClick="false" Size="Size.ExtraSmall" Color="Color.Success" Icon="fa fa-share-square-o" Text="查看" IsAsync="true" OnClickWithoutRender="@(() =>OnLook(context.RealId))" />
</RowButtonTemplate>

</Table>

}

Expand All @@ -61,10 +62,10 @@ else
[Parameter]
public EventCallback<NavigateModel> 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);


}

Expand Down
@@ -1,6 +1,7 @@
@inject HttpClient Http
@inject ToastService? ToastService
@inject NavigationManager NavigationManager
@inject IDataCacheService _dataCacheService

@if (!isReady)
{
Expand All @@ -17,25 +18,25 @@
}
else
{
<Table TItem="MakerInforTableModel" IsPagination="true" PageItemsSource="@PageItems" IsStriped=true
OnQueryAsync="@OnQueryMakerAsync" SearchModel="@SearchModelMaker" ShowSearch="true" ShowLoading="true"
ShowExtendButtons="true" ExtendButtonColumnWidth="70" FixedExtendButtonsColumn="true"
ShowToolbar="true" ShowDefaultButtons="false" @ref="table">
<TableToolbarTemplate>
<CnGalWebSite.Shared.MasaComponent.Shared.Buttons.ExportButton TItem="MakerInforTableModel" Columns="table.Columns" Items="ModelMaker.MakerInfors" Name="制作人汇总表" />
</TableToolbarTemplate>
<TableColumns>
<TableColumn @bind-Field="@context.RealId" Filterable="true" Sortable="true" Width="100" TextWrap="true" Fixed="true" />
<TableColumn @bind-Field="@context.Name" Filterable="true" Sortable="true" Searchable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.AnotherName" Filterable="true" Sortable="true" Searchable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.Bilibili" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.MicroBlog" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
</TableColumns>
<RowButtonTemplate>
<TableCellButton AutoSelectedRowWhenClick="false" Size="Size.ExtraSmall" Color="Color.Success" Icon="fa fa-share-square-o" Text="查看" IsAsync="true" OnClickWithoutRender="@(() =>OnLook(context.RealId))" />
</RowButtonTemplate>

</Table>
<Table TItem="MakerInforTableModel" IsPagination="true" PageItemsSource="@PageItems" IsStriped=true
OnQueryAsync="@OnQueryMakerAsync" SearchModel="@SearchModelMaker" ShowSearch="true" ShowLoading="true"
ShowExtendButtons="true" ExtendButtonColumnWidth="70" FixedExtendButtonsColumn="true"
ShowToolbar="true" ShowDefaultButtons="false" @ref="table">
<TableToolbarTemplate>
<CnGalWebSite.Shared.MasaComponent.Shared.Buttons.ExportButton TItem="MakerInforTableModel" Columns="table.Columns" Items="ModelMaker.MakerInfors" Name="制作人汇总表" />
</TableToolbarTemplate>
<TableColumns>
<TableColumn @bind-Field="@context.RealId" Filterable="true" Sortable="true" Width="100" TextWrap="true" Fixed="true" />
<TableColumn @bind-Field="@context.Name" Filterable="true" Sortable="true" Searchable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.AnotherName" Filterable="true" Sortable="true" Searchable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.Bilibili" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
<TableColumn @bind-Field="@context.MicroBlog" Filterable="true" Sortable="true" Width="200" TextWrap="true" />
</TableColumns>
<RowButtonTemplate>
<TableCellButton AutoSelectedRowWhenClick="false" Size="Size.ExtraSmall" Color="Color.Success" Icon="fa fa-share-square-o" Text="查看" IsAsync="true" OnClickWithoutRender="@(() =>OnLook(context.RealId))" />
</RowButtonTemplate>

</Table>
}


Expand All @@ -58,10 +59,10 @@ else
[Parameter]
public EventCallback<NavigateModel> 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()
Expand Down

0 comments on commit 81dec07

Please sign in to comment.