feat(Mys): 添加结构化内容接口,明天起来完善各种类型的渲染

This commit is contained in:
BTMuli
2023-03-29 00:57:14 +08:00
parent 57bf249839
commit 168ed75331
4 changed files with 87 additions and 11 deletions

View File

@@ -64,7 +64,7 @@ import { fs, http } from "@tauri-apps/api";
import useAppStore from "../store/modules/app";
// utils
import { createTGWindow } from "../utils/TGWindow";
import { parseMys } from "../utils/MysParse";
import { StructuredPostParser } from "../plugins/Mys/utils/parser";
// interface
import {
GachaResponse,
@@ -180,7 +180,7 @@ async function toPost(post_id: string) {
return res.data.post.post;
});
// 结构化渲染
const parseDoc = parseMys(post.structured_content);
const parseDoc = StructuredPostParser(post.structured_content);
// 将解析后的 doc 保存到 文件
await fs.writeTextFile(
`${appStore.dataPath.temp}\\${post_id}_home.html`,

View File

@@ -134,14 +134,13 @@ import useAppStore from "../store/modules/app";
import "../tools/svg-inject.js";
// utils
import { createTGWindow } from "../utils/TGWindow";
import { parseMys } from "../utils/MysParse";
import { StructuredPostParser } from "../plugins/Mys/utils/parser";
// interface
import {
Post,
PostResponse,
POST_FULL_API,
POST_FULL_REFERER,
PostData,
} from "../plugins/Mys/interface/post";
import {
NewsResponse,
@@ -216,7 +215,7 @@ async function toPost(post_id: string) {
// 获取渲染模式
if (renderMode.value) {
// 结构化渲染
parseDoc = parseMys(post.structured_content);
parseDoc = StructuredPostParser(post.structured_content);
} else {
// 原始渲染
parseDoc = new DOMParser().parseFromString(post.content, "text/html");
@@ -231,12 +230,12 @@ async function toPost(post_id: string) {
}
async function toJson(post_id: string) {
const post = await getPost(post_id).then(res => {
return res.data;
return res.data.post.post.structured_content;
});
// 将 json 保存到 文件
await fs.writeTextFile(
`${appStore.dataPath.temp}\\${post_id}.json`,
JSON.stringify(post, null, 4)
JSON.stringify(JSON.parse(post), null, 4)
);
const logUrl = `file:\\\\\\${appStore.dataPath.temp}\\${post_id}.json`;
// 打开窗口

View File

@@ -247,3 +247,79 @@ export interface PostStat {
bookmark_num: number;
forward_num: number;
}
/**
* @description 帖子结构化内容
* @since Alpha
* @interface PostStructuredContent
* @property {string|object} insert 插入内容
* @property {string} insert.image 图片 URL
* @property {object} insert.vod 视频信息
* @property {number} insert.vod.id 视频 ID
* @property {number} insert.vod.duration 时长
* @property {string} insert.vod.cover 封面图 URL
* @property {object[]} insert.vod.resolutions 分辨率
* @property {string} insert.vod.resolutions.url URL
* @property {string} insert.vod.resolutions.definition 清晰度
* @property {number} insert.vod.resolutions.height 高度
* @property {number} insert.vod.resolutions.width 宽度
* @property {number} insert.vod.resolutions.bitrate 比特率
* @property {number} insert.vod.resolutions.size 大小
* @property {string} insert.vod.resolutions.format 格式
* @property {string} insert.vod.resolutions.label 标签
* @property {number} insert.vod.view_num 浏览数
* @property {number} insert.vod.transcode_status 转码状态
* @property {number} insert.vod.review_status 审核状态
* @property {string} insert.backup_text 折叠文本
* @property {object} insert.fold 折叠内容
* @property {string} insert.fold.title 折叠标题,反序列化后为 PostStructuredContent[]
* @property {string} insert.fold.content 折叠文本,反序列化后为 PostStructuredContent[]
* @property {object} attributes 属性
* @property {number} attributes.height 高度
* @property {number} attributes.width 宽度
* @property {number} attributes.size 大小
* @property {string} attributes.ext 扩展名
* @property {boolean} attributes.bold 是否加粗
* @property {string} attributes.color 颜色
* @property {string} attributes.link 链接
* @return {PostStructuredContent}
*/
export interface PostStructuredContent {
insert:
| {
image?: string;
vod?: {
id: number;
duration: number;
cover: string;
resolutions: {
url: string;
definition: string;
height: number;
width: number;
bitrate: number;
size: number;
format: string;
label: string;
}[];
view_num: number;
transcoding_status: number;
review_status: number;
};
backup_text?: string;
fold?: {
title: string;
content: string;
};
}
| string;
attributes?: {
height?: number;
width?: number;
size?: number;
ext?: string;
bold?: boolean;
color?: string;
link?: string;
};
}

View File

@@ -1,20 +1,21 @@
/**
* @file utils MysParse.ts
* @file plugins Mys utils PostParser.ts
* @description Mys数据的工具
* @author BTMuli<bt-muli@outlook.com>
* @since Alpha
*/
import { PostStructuredContent } from "../interface/post";
/**
* @description Mys数据
* @param {string} data Mys数据
* @description
* @returns {Document} HTML
*/
export function parseMys(data: string): Document {
export function StructuredPostParser(data: string): Document {
// Json 化
let jsonData = JSON.parse(data);
while (typeof jsonData === "string") jsonData = JSON.parse(jsonData);
let jsonData: PostStructuredContent[] = JSON.parse(data);
// 创建 HTML 文档
const doc = document.implementation.createHTMLDocument();
// 遍历 Json 数据