From 7ebf875b4058f5354d532d4543186645d50febb5 Mon Sep 17 00:00:00 2001 From: wanxp <977741432@qq.com> Date: Sat, 18 Jun 2022 23:11:52 +0800 Subject: [PATCH] add douban book model --- douban/handler/DoubanAbstractLoadHandler.ts | 9 +++------ douban/handler/DoubanBookLoadHandler.ts | 3 +-- douban/handler/DoubanSearchChooseItemHandler.ts | 3 ++- douban/model/DoubanBookSubject.ts | 17 +++++++++++++---- douban/search/Search.ts | 4 ++-- 5 files changed, 21 insertions(+), 15 deletions(-) diff --git a/douban/handler/DoubanAbstractLoadHandler.ts b/douban/handler/DoubanAbstractLoadHandler.ts index b4d4db8..3b8ca49 100644 --- a/douban/handler/DoubanAbstractLoadHandler.ts +++ b/douban/handler/DoubanAbstractLoadHandler.ts @@ -1,13 +1,11 @@ +import { CheerioAPI, load } from 'cheerio'; import { DoubanPluginSettings, PersonNameMode } from "douban/Douban"; -import cheerio, { CheerioAPI } from "cheerio"; import { get, readStream } from "tiny-network"; import DoubanPlugin from "main"; import DoubanSubject from "douban/model/DoubanSubject"; import DoubanSubjectLoadHandler from "./DoubanSubjectLoadHandler"; import { Editor } from "obsidian"; -import HttpUtil from "utils/HttpUtil"; -import { json } from "stream/consumers"; import { log } from "utils/Logutil"; export default abstract class DoubanAbstractLoadHandler implements DoubanSubjectLoadHandler { @@ -26,8 +24,8 @@ export default abstract class DoubanAbstractLoadHandler 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)}))) .then(readStream) - .then(cheerio.load) - .then(log.trace) + .then(a => {log.trace(a.toString()); return a;}) + .then(load) .then(this.parseSubjectFromHtml) .then(content => this.toEditor(editor, content)) // .then(content => content ? editor.replaceSelection(content) : content) @@ -35,7 +33,6 @@ export default abstract class DoubanAbstractLoadHandler } - abstract parseSubjectFromHtml(data:CheerioAPI):T | undefined; toEditor(editor:Editor, extract: T):T { diff --git a/douban/handler/DoubanBookLoadHandler.ts b/douban/handler/DoubanBookLoadHandler.ts index f30beea..709186a 100644 --- a/douban/handler/DoubanBookLoadHandler.ts +++ b/douban/handler/DoubanBookLoadHandler.ts @@ -1,7 +1,6 @@ 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 DoubanBookSubject from "douban/model/DoubanBookSubject"; import DoubanPlugin from "main"; diff --git a/douban/handler/DoubanSearchChooseItemHandler.ts b/douban/handler/DoubanSearchChooseItemHandler.ts index 112dfb9..e3aed5a 100644 --- a/douban/handler/DoubanSearchChooseItemHandler.ts +++ b/douban/handler/DoubanSearchChooseItemHandler.ts @@ -1,5 +1,6 @@ import { App, Editor } from "obsidian"; +import DoubanBookLoadHandler from "./DoubanBookLoadHandler"; import DoubanMovieLoadHandler from "./DoubanMovieLoadHandler"; import DoubanOtherLoadHandler from "./DoubanOtherLoadHandler"; import DoubanPlugin from "main"; @@ -20,7 +21,7 @@ export class DoubanSearchChooseItemHandler { this._app = app; this._doubanPlugin = doubanPlugin; this._doubanSubjectHandlerDefault = new DoubanOtherLoadHandler(doubanPlugin); - this._doubanSubjectHandlers = [new DoubanMovieLoadHandler(doubanPlugin), + this._doubanSubjectHandlers = [new DoubanMovieLoadHandler(doubanPlugin), new DoubanBookLoadHandler(doubanPlugin), this._doubanSubjectHandlerDefault]; } diff --git a/douban/model/DoubanBookSubject.ts b/douban/model/DoubanBookSubject.ts index 4d2afd5..4d8a856 100644 --- a/douban/model/DoubanBookSubject.ts +++ b/douban/model/DoubanBookSubject.ts @@ -3,8 +3,17 @@ import {AggregateRating, Person, WithContext} from 'schema-dts'; import DoubanSubject from "./DoubanSubject"; export default class DoubanMovieSubject extends DoubanSubject { - author:Person[]; - aggregateRating:AggregateRating; - datePublished:Date; - image:string + author:string; + translator:string; + bookType:string; + image:string; + publishDate:string; + totalWord:number; + isbn:string; + press:string; + score:number; + originalName:string; + totalPage:number + belong:string; + menu:string; } diff --git a/douban/search/Search.ts b/douban/search/Search.ts index 027cbc9..f0ad96d 100644 --- a/douban/search/Search.ts +++ b/douban/search/Search.ts @@ -1,9 +1,9 @@ import { DoubanPluginSettings, doubanHeadrs } from 'douban/Douban'; +import cheerio, { load } from 'cheerio'; import { get, readStream } from 'tiny-network'; import DoubanSearchResultSubject from 'douban/model/DoubanSearchResultSubject'; import SearchParserHandler from './SearchParser'; -import cheerio from 'cheerio'; import { ensureStatusCode } from 'douban/ResponseHandle'; 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(ensureStatusCode(200)) .then(readStream) - .then(cheerio.load) + .then(load) .then(SearchParserHandler.parseSearch) .then(log.trace); };