mirror of
https://github.com/Wanxp/obsidian-douban.git
synced 2026-04-04 16:48:44 +08:00
support import game's data
This commit is contained in:
parent
8701547f79
commit
ecffed6441
@ -17,7 +17,7 @@ export class DoubanSettingTab extends PluginSettingTab {
|
|||||||
|
|
||||||
containerEl.empty();
|
containerEl.empty();
|
||||||
|
|
||||||
containerEl.createEl("h2", { text: '1201' });
|
containerEl.createEl("h2", { text: i18nHelper.getMessage('1201') });
|
||||||
|
|
||||||
new Setting(containerEl).setName(i18nHelper.getMessage('120001'))
|
new Setting(containerEl).setName(i18nHelper.getMessage('120001'))
|
||||||
.then((setting) => {
|
.then((setting) => {
|
||||||
@ -116,7 +116,7 @@ export class DoubanSettingTab extends PluginSettingTab {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
new Setting(containerEl).setName(i18nHelper.getMessage('120201')).then((setting) => {
|
new Setting(containerEl).setName(i18nHelper.getMessage('120301')).then((setting) => {
|
||||||
setting.addTextArea((textarea) => {
|
setting.addTextArea((textarea) => {
|
||||||
setting.descEl.appendChild(
|
setting.descEl.appendChild(
|
||||||
createFragment((frag) => {
|
createFragment((frag) => {
|
||||||
|
|||||||
@ -1,14 +1,15 @@
|
|||||||
import { CheerioAPI } from "cheerio";
|
import { CheerioAPI } from "cheerio";
|
||||||
import { DoubanBroadcastAbstractHandler } from "./DoubanBroadcastAbstractHandler";
|
import { DoubanBroadcastAbstractHandler } from "./DoubanBroadcastAbstractHandler";
|
||||||
import DoubanBroadcastMovieSubject from "../model/DoubanBroadcastMoveSubject";
|
import DoubanBroadcastMovieSubject from "../model/DoubanBroadcastMoveSubject";
|
||||||
|
|
||||||
export class DoubanBroadcastMovieHandler extends DoubanBroadcastAbstractHandler<DoubanBroadcastMovieSubject>{
|
//TODO will support in future version
|
||||||
support(t: string): boolean {
|
export class DoubanBroadcastMovieHandler extends DoubanBroadcastAbstractHandler<DoubanBroadcastMovieSubject>{
|
||||||
throw new Error("Method not implemented.");
|
support(t: string): boolean {
|
||||||
}
|
throw new Error("Method not implemented.");
|
||||||
transform(data: Element, source:CheerioAPI): DoubanBroadcastMovieSubject {
|
}
|
||||||
throw new Error("Method not implemented.");
|
transform(data: Element, source:CheerioAPI): DoubanBroadcastMovieSubject {
|
||||||
}
|
throw new Error("Method not implemented.");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
}
|
||||||
|
|||||||
@ -4,6 +4,7 @@ import { DoubanBroadcastMovieHandler } from "./DoubanBroadcastMovieHandler";
|
|||||||
import DoubanBroadcastSubject from "../model/DoubanBroadcastSubject";
|
import DoubanBroadcastSubject from "../model/DoubanBroadcastSubject";
|
||||||
import DoubanPageBroadcastSubject from "../model/DoubanPageBroadcastSubject";
|
import DoubanPageBroadcastSubject from "../model/DoubanPageBroadcastSubject";
|
||||||
|
|
||||||
|
//TODO will support in future version
|
||||||
export class DoubanPageBroadcastTransformer {
|
export class DoubanPageBroadcastTransformer {
|
||||||
|
|
||||||
private handlers:DoubanBroadcastAbstractHandler<DoubanBroadcastSubject>[];
|
private handlers:DoubanBroadcastAbstractHandler<DoubanBroadcastSubject>[];
|
||||||
|
|||||||
@ -5,9 +5,8 @@ import DoubanPageBroadcastSubject from '../model/DoubanPageBroadcastSubject';
|
|||||||
import DoubanPlugin from "main";
|
import DoubanPlugin from "main";
|
||||||
import { DoubanPluginSettings } from "src/douban/Douban";
|
import { DoubanPluginSettings } from "src/douban/Douban";
|
||||||
import DoubanSubject from 'src/douban/data/model/DoubanSubject';
|
import DoubanSubject from 'src/douban/data/model/DoubanSubject';
|
||||||
import html2markdown from '@notable/html2markdown';
|
|
||||||
import { moment } from "obsidian";
|
|
||||||
|
|
||||||
|
//TODO will support in future version
|
||||||
export default class DoubanPageBroadcatLoadHandler extends DoubanAbstractLoadHandler<DoubanPageBroadcastSubject> {
|
export default class DoubanPageBroadcatLoadHandler extends DoubanAbstractLoadHandler<DoubanPageBroadcastSubject> {
|
||||||
|
|
||||||
parseText(extract: DoubanNoteSubject, settings:DoubanPluginSettings): string {
|
parseText(extract: DoubanNoteSubject, settings:DoubanPluginSettings): string {
|
||||||
|
|||||||
78
src/douban/data/handler/DoubanGameLoadHandler.ts
Normal file
78
src/douban/data/handler/DoubanGameLoadHandler.ts
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
import { CheerioAPI } from 'cheerio';
|
||||||
|
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
|
||||||
|
import DoubanPlugin from "main";
|
||||||
|
import { DoubanPluginSettings } from "src/douban/Douban";
|
||||||
|
import SchemaOrg from "src/utils/SchemaOrg";
|
||||||
|
import { moment } from "obsidian";
|
||||||
|
import DoubanSubject from '../model/DoubanSubject';
|
||||||
|
import DoubanGameSubject from '../model/DoubanGameSubject';
|
||||||
|
|
||||||
|
export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler<DoubanGameSubject> {
|
||||||
|
|
||||||
|
parseText(extract: DoubanGameSubject, settings:DoubanPluginSettings): string {
|
||||||
|
return settings.movieTemplate ? settings.movieTemplate.replaceAll("{{id}}", extract.id)
|
||||||
|
.replaceAll("{{type}}", extract.type ? extract.type : "")
|
||||||
|
.replaceAll("{{title}}", extract.title ? extract.title : "")
|
||||||
|
.replaceAll("{{originalTitle}}", extract.originalTitle ? extract.originalTitle : "")
|
||||||
|
.replaceAll("{{desc}}", extract.desc ? extract.desc : "")
|
||||||
|
.replaceAll("{{image}}", extract.image ? extract.image : "")
|
||||||
|
.replaceAll("{{director}}", extract.director ? extract.director.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, settings)).filter(c => c).join(settings.arraySpilt) : "")
|
||||||
|
.replaceAll("{{actor}}", extract.actor ? extract.actor.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, settings)).filter(c => c).join(settings.arraySpilt) : "")
|
||||||
|
.replaceAll("{{author}}", extract.author ? extract.author.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, settings)).filter(c => c).join(settings.arraySpilt) : "")
|
||||||
|
.replaceAll("{{datePublished}}", extract.datePublished ? moment(extract.datePublished).format(settings.dateFormat) : "")
|
||||||
|
.replaceAll("{{url}}", extract.url ? extract.url : "")
|
||||||
|
.replaceAll("{{score}}", extract.aggregateRating && extract.aggregateRating.ratingValue ? extract.aggregateRating.ratingValue + "" : "")
|
||||||
|
.replaceAll("{{genre}}", extract.genre ? extract.genre.join(settings.arraySpilt) : "")
|
||||||
|
|
||||||
|
: undefined; }
|
||||||
|
support(extract: DoubanSubject): boolean {
|
||||||
|
return extract && extract.type && (extract.type.contains("游戏") || extract.type.contains("Game") || extract.type.contains("game"));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
constructor(doubanPlugin:DoubanPlugin) {
|
||||||
|
super(doubanPlugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
parseSubjectFromHtml(data: CheerioAPI): DoubanGameSubject {
|
||||||
|
return data('script')
|
||||||
|
.get()
|
||||||
|
.filter(scd => "application/ld+json" == data(scd).attr("type"))
|
||||||
|
.map(i => {
|
||||||
|
let item = data(i).text();
|
||||||
|
item = super.html_decode(item);
|
||||||
|
let obj = JSON.parse(item.replace(/[\r\n\s+]/g, ''));
|
||||||
|
let idPattern = /(\d){5,10}/g;
|
||||||
|
let id = idPattern.exec(obj.url);
|
||||||
|
let name = obj.name;
|
||||||
|
let titleExec = /[\u4e00-\u9fa5]{2,20}/g.exec(name);
|
||||||
|
let title = titleExec?titleExec[0]:name;
|
||||||
|
|
||||||
|
let originalTitleExec = /[a-zA-Z.\s\-]{2,50}/g.exec(name);
|
||||||
|
let originalTitle = originalTitleExec?originalTitleExec[0]:name;
|
||||||
|
|
||||||
|
const result:DoubanGameSubject = {
|
||||||
|
id: id?id[0]:'',
|
||||||
|
type: 'Movie',
|
||||||
|
title: title,
|
||||||
|
originalTitle: originalTitle,
|
||||||
|
desc: obj.description,
|
||||||
|
url: "https://movie.douban.com" + obj.url,
|
||||||
|
director: obj.director,
|
||||||
|
author: obj.author,
|
||||||
|
actor: obj.actor,
|
||||||
|
aggregateRating: obj.aggregateRating,
|
||||||
|
datePublished: obj.datePublished ? new Date(obj.datePublished) : undefined,
|
||||||
|
image:obj.image,
|
||||||
|
genre:obj.genre
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
})[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
15
src/douban/data/model/DoubanGameSubject.ts
Normal file
15
src/douban/data/model/DoubanGameSubject.ts
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import {AggregateRating, Person} from 'schema-dts';
|
||||||
|
|
||||||
|
import DoubanSubject from "./DoubanSubject";
|
||||||
|
|
||||||
|
export default class DoubanGameSubject extends DoubanSubject {
|
||||||
|
director:Person[];
|
||||||
|
author:Person[];
|
||||||
|
actor:Person[];
|
||||||
|
aggregateRating:AggregateRating;
|
||||||
|
datePublished:Date;
|
||||||
|
image:string;
|
||||||
|
genre:string[];
|
||||||
|
originalTitle:string;
|
||||||
|
|
||||||
|
}
|
||||||
@ -57,7 +57,9 @@ export default {
|
|||||||
'120507': `Your current syntax looks like this`,
|
'120507': `Your current syntax looks like this`,
|
||||||
'120508': `format reference`,
|
'120508': `format reference`,
|
||||||
'120601': `Array Spilt String`,
|
'120601': `Array Spilt String`,
|
||||||
'120602': `string to join between array type, such as author, actor`,
|
'120602': `string to join between array type, such as authors, actors.
|
||||||
|
example: '/'
|
||||||
|
the list of actor's name will be shown as: 'actor1/actor2/actor3'`,
|
||||||
'120701': `Douban Request Headers`,
|
'120701': `Douban Request Headers`,
|
||||||
'120801': `This type of import is not supported temporarily, please go to github to submit issues for help`,
|
'120801': `This type of import is not supported temporarily, please go to github to submit issues for help`,
|
||||||
'120901': `Douban`,
|
'120901': `Douban`,
|
||||||
|
|||||||
@ -57,13 +57,15 @@ export default {
|
|||||||
'120507': `时间参数时间格式预览`,
|
'120507': `时间参数时间格式预览`,
|
||||||
'120508': `格式参考`,
|
'120508': `格式参考`,
|
||||||
'120601': `数组分割字符串`,
|
'120601': `数组分割字符串`,
|
||||||
'120602': `当模板中的变量存在数组, 则需要设定数组元素中的分割符号,比如 演员列表等`,
|
'120602': `当模板中的变量存在数组, 则需要设定数组元素中的分割符号,比如演员列表等.
|
||||||
|
举例: '/'
|
||||||
|
则演员表将会显示为: '演员1/演员2/演员3'`,
|
||||||
'120701': `豆瓣HTTP请求头`,
|
'120701': `豆瓣HTTP请求头`,
|
||||||
'120702': `如果豆瓣搜索或者获取数据失败,请尝试修改这个参数,\n
|
'120702': `如果豆瓣搜索或者获取数据失败,请尝试修改这个参数,\n
|
||||||
参数获取方式为:\n
|
参数获取方式为:\n
|
||||||
1. 访问http://www.douban.com
|
1. 访问http://www.douban.com
|
||||||
2. 复制请求头,仅复制以下请求头 `,
|
2. 复制请求头,仅复制以下请求头 `,
|
||||||
'120801': `暂时不支持该类型导入,请至github提交issuess获取帮助`,
|
'120801': `暂时不支持该类型导入,请至Github提交issuess获取帮助`,
|
||||||
'120901': `豆瓣网`,
|
'120901': `豆瓣网`,
|
||||||
|
|
||||||
'121201': `人名显示模式`,
|
'121201': `人名显示模式`,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user