add douban book model

This commit is contained in:
wanxp 2022-06-18 23:11:52 +08:00
parent ee2dead393
commit 7ebf875b40
5 changed files with 21 additions and 15 deletions

@ -1,13 +1,11 @@
import { CheerioAPI, load } from 'cheerio';
import { DoubanPluginSettings, PersonNameMode } from "douban/Douban"; import { DoubanPluginSettings, PersonNameMode } from "douban/Douban";
import cheerio, { CheerioAPI } from "cheerio";
import { get, readStream } from "tiny-network"; import { get, readStream } from "tiny-network";
import DoubanPlugin from "main"; import DoubanPlugin from "main";
import DoubanSubject from "douban/model/DoubanSubject"; import DoubanSubject from "douban/model/DoubanSubject";
import DoubanSubjectLoadHandler from "./DoubanSubjectLoadHandler"; import DoubanSubjectLoadHandler from "./DoubanSubjectLoadHandler";
import { Editor } from "obsidian"; import { Editor } from "obsidian";
import HttpUtil from "utils/HttpUtil";
import { json } from "stream/consumers";
import { log } from "utils/Logutil"; import { log } from "utils/Logutil";
export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject> implements DoubanSubjectLoadHandler<T> { export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject> implements DoubanSubjectLoadHandler<T> {
@ -26,8 +24,8 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
handle(url:string, editor:Editor):void { handle(url:string, editor:Editor):void {
Promise.resolve().then(() => get(log.traceN("GET URL", url + "/"), log.traceN("GET HEAD", {headers: JSON.parse(this.doubanPlugin.settings.searchHeaders)}))) Promise.resolve().then(() => get(log.traceN("GET URL", url + "/"), log.traceN("GET HEAD", {headers: JSON.parse(this.doubanPlugin.settings.searchHeaders)})))
.then(readStream) .then(readStream)
.then(cheerio.load) .then(a => {log.trace(a.toString()); return a;})
.then(log.trace) .then(load)
.then(this.parseSubjectFromHtml) .then(this.parseSubjectFromHtml)
.then(content => this.toEditor(editor, content)) .then(content => this.toEditor(editor, content))
// .then(content => content ? editor.replaceSelection(content) : content) // .then(content => content ? editor.replaceSelection(content) : content)
@ -35,7 +33,6 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
} }
abstract parseSubjectFromHtml(data:CheerioAPI):T | undefined; abstract parseSubjectFromHtml(data:CheerioAPI):T | undefined;
toEditor(editor:Editor, extract: T):T { toEditor(editor:Editor, extract: T):T {

@ -1,7 +1,6 @@
import { Editor, moment, renderResults } from "obsidian"; import { Editor, moment, renderResults } from "obsidian";
import cheerio, { CheerioAPI } from 'cheerio';
import { get, readStream } from "tiny-network";
import { CheerioAPI } from 'cheerio';
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler"; import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
import DoubanBookSubject from "douban/model/DoubanBookSubject"; import DoubanBookSubject from "douban/model/DoubanBookSubject";
import DoubanPlugin from "main"; import DoubanPlugin from "main";

@ -1,5 +1,6 @@
import { App, Editor } from "obsidian"; import { App, Editor } from "obsidian";
import DoubanBookLoadHandler from "./DoubanBookLoadHandler";
import DoubanMovieLoadHandler from "./DoubanMovieLoadHandler"; import DoubanMovieLoadHandler from "./DoubanMovieLoadHandler";
import DoubanOtherLoadHandler from "./DoubanOtherLoadHandler"; import DoubanOtherLoadHandler from "./DoubanOtherLoadHandler";
import DoubanPlugin from "main"; import DoubanPlugin from "main";
@ -20,7 +21,7 @@ export class DoubanSearchChooseItemHandler {
this._app = app; this._app = app;
this._doubanPlugin = doubanPlugin; this._doubanPlugin = doubanPlugin;
this._doubanSubjectHandlerDefault = new DoubanOtherLoadHandler(doubanPlugin); this._doubanSubjectHandlerDefault = new DoubanOtherLoadHandler(doubanPlugin);
this._doubanSubjectHandlers = [new DoubanMovieLoadHandler(doubanPlugin), this._doubanSubjectHandlers = [new DoubanMovieLoadHandler(doubanPlugin), new DoubanBookLoadHandler(doubanPlugin),
this._doubanSubjectHandlerDefault]; this._doubanSubjectHandlerDefault];
} }

@ -3,8 +3,17 @@ import {AggregateRating, Person, WithContext} from 'schema-dts';
import DoubanSubject from "./DoubanSubject"; import DoubanSubject from "./DoubanSubject";
export default class DoubanMovieSubject extends DoubanSubject { export default class DoubanMovieSubject extends DoubanSubject {
author:Person[]; author:string;
aggregateRating:AggregateRating; translator:string;
datePublished:Date; bookType:string;
image:string image:string;
publishDate:string;
totalWord:number;
isbn:string;
press:string;
score:number;
originalName:string;
totalPage:number
belong:string;
menu:string;
} }

@ -1,9 +1,9 @@
import { DoubanPluginSettings, doubanHeadrs } from 'douban/Douban'; import { DoubanPluginSettings, doubanHeadrs } from 'douban/Douban';
import cheerio, { load } from 'cheerio';
import { get, readStream } from 'tiny-network'; import { get, readStream } from 'tiny-network';
import DoubanSearchResultSubject from 'douban/model/DoubanSearchResultSubject'; import DoubanSearchResultSubject from 'douban/model/DoubanSearchResultSubject';
import SearchParserHandler from './SearchParser'; import SearchParserHandler from './SearchParser';
import cheerio from 'cheerio';
import { ensureStatusCode } from 'douban/ResponseHandle'; import { ensureStatusCode } from 'douban/ResponseHandle';
import { log } from 'utils/Logutil'; import { log } from 'utils/Logutil';
@ -17,7 +17,7 @@ export default class Searcher {
.then(() => get(log.traceN("GET", doubanSettings.searchUrl + searchItem), JSON.parse(doubanSettings.searchHeaders))) .then(() => get(log.traceN("GET", doubanSettings.searchUrl + searchItem), JSON.parse(doubanSettings.searchHeaders)))
.then(ensureStatusCode(200)) .then(ensureStatusCode(200))
.then(readStream) .then(readStream)
.then(cheerio.load) .then(load)
.then(SearchParserHandler.parseSearch) .then(SearchParserHandler.parseSearch)
.then(log.trace); .then(log.trace);
}; };