mirror of
https://github.com/Wanxp/obsidian-douban.git
synced 2026-04-04 16:48:44 +08:00
add douban book template settings
This commit is contained in:
parent
7ebf875b40
commit
ea1845d9cf
24
README.md
24
README.md
@ -1,12 +1,24 @@
|
|||||||
# Obsidian Douban Plugin
|
# Obsidian Douban Plugin
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Import Movies, Books, Music Data from Douban in [Obsidian](https://obsidian.md/)
|
Import Movies, Books, Music Data from Douban in [Obsidian](https://obsidian.md/)
|
||||||
|
|
||||||
在[Obsidian](https://obsidian.md/)使用并导入豆瓣中的电影/音乐/以及书籍等, 评分/发布日期/演员表等信息
|
在[Obsidian](https://obsidian.md/)使用并导入豆瓣中的电影/音乐/以及书籍等, 评分/发布日期/演员表等信息
|
||||||
|
|
||||||
|
If you want some features or have any questions about this plugin, create issues or join the development is welcome.
|
||||||
|
关于当前的插件如果有任何疑问或者想要什么功能, 欢迎提issues或加入到开发当中.
|
||||||
|
|
||||||
- [Bugs, Issues, & Feature Requests](https://github.com/Wanxp/obsidian-douban/issues)
|
- [Bugs, Issues, & Feature Requests](https://github.com/Wanxp/obsidian-douban/issues)
|
||||||
- [Development Roadmap](https://github.com/users/Wanxp/projects/1)
|
- [Development Roadmap](https://github.com/users/Wanxp/projects/1)
|
||||||
|
|
||||||
|
|
||||||
|
## Target
|
||||||
|
- [x] Movie/电影
|
||||||
|
- [ ] Book/书籍
|
||||||
|
- [ ] Music/音乐
|
||||||
|
- [ ] Broadcast/广播
|
||||||
|
|
||||||
## How to use
|
## How to use
|
||||||
### Movie
|
### Movie
|
||||||
- Search Movie By Input Text/通过输入文本搜索
|
- Search Movie By Input Text/通过输入文本搜索
|
||||||
@ -22,3 +34,15 @@ Import Movies, Books, Music Data from Douban in [Obsidian](https://obsidian.md/)
|
|||||||
|
|
||||||
- Setting Example1/设置案例1
|
- Setting Example1/设置案例1
|
||||||

|

|
||||||
|
|
||||||
|
## How to install
|
||||||
|
### From Obsidian
|
||||||
|
1. go to obsidian plugin center
|
||||||
|
2. search obsidian-douban
|
||||||
|
3. click install
|
||||||
|
4. enable plugin
|
||||||
|
### Manmel
|
||||||
|
#### Windows
|
||||||
|
####
|
||||||
|
|
||||||
|
### Linx
|
||||||
@ -3,6 +3,7 @@ import { type } from "os";
|
|||||||
|
|
||||||
export interface DoubanPluginSettings {
|
export interface DoubanPluginSettings {
|
||||||
movieTemplate:string,
|
movieTemplate:string,
|
||||||
|
bookTemplate:string,
|
||||||
dateFormat:string,
|
dateFormat:string,
|
||||||
searchUrl:string,
|
searchUrl:string,
|
||||||
arraySpilt:string,
|
arraySpilt:string,
|
||||||
@ -24,19 +25,43 @@ export const doubanHeadrs = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const DEFAULT_SETTINGS:DoubanPluginSettings = {
|
export const DEFAULT_SETTINGS:DoubanPluginSettings = {
|
||||||
movieTemplate:
|
movieTemplate: `
|
||||||
"---\n" +
|
---
|
||||||
"doubanId: {{id}}\n" +
|
doubanId: {{id}}
|
||||||
"title: {{title}}\n" +
|
title: {{title}}
|
||||||
"type: {{type}}\n" +
|
type: {{type}}
|
||||||
"score: {{score}}\n" +
|
score: {{score}}
|
||||||
"datePublished: {{datePublished}}\n" +
|
datePublished: {{datePublished}}
|
||||||
"director: {{director}}\n" +
|
director: {{director}}
|
||||||
"actor: {{actor}}\n" +
|
actor: {{actor}}
|
||||||
"author: {{author}}\n" +
|
author: {{author}}
|
||||||
"url: {{url}}\n" +
|
url: {{url}}
|
||||||
"image: {{image}}\n" +
|
image: {{image}}
|
||||||
"---\n",
|
---`,
|
||||||
|
bookTemplate: `
|
||||||
|
---
|
||||||
|
doubanId: {{id}}
|
||||||
|
title: {{title}}
|
||||||
|
subTitle: {{subTitle}}
|
||||||
|
originalTitle: {{originalTitle}}
|
||||||
|
type: {{type}}
|
||||||
|
author: {{author}}
|
||||||
|
score: {{score}}
|
||||||
|
datePublished: {{datePublished}}
|
||||||
|
director: {{director}}
|
||||||
|
translator: {{translator}}
|
||||||
|
publish: {{publish}}
|
||||||
|
isbn: {{isbn}}
|
||||||
|
url: {{url}}
|
||||||
|
image: {{image}}
|
||||||
|
totalWord: {{totalWord}}
|
||||||
|
totalPage: {{totalPage}}
|
||||||
|
price: {{price}}
|
||||||
|
tags: Book, {{labels}}
|
||||||
|
---
|
||||||
|
|
||||||
|
- Menu
|
||||||
|
{{menu}}`,
|
||||||
searchUrl: 'https://www.douban.com/search?q=',
|
searchUrl: 'https://www.douban.com/search?q=',
|
||||||
searchHeaders: JSON.stringify(doubanHeadrs),
|
searchHeaders: JSON.stringify(doubanHeadrs),
|
||||||
dateFormat: "yyyy_MM_DD",
|
dateFormat: "yyyy_MM_DD",
|
||||||
|
|||||||
@ -6,24 +6,32 @@ import DoubanBookSubject from "douban/model/DoubanBookSubject";
|
|||||||
import DoubanPlugin from "main";
|
import DoubanPlugin from "main";
|
||||||
import { DoubanPluginSettings } from "douban/Douban";
|
import { DoubanPluginSettings } from "douban/Douban";
|
||||||
import DoubanSubject from "douban/model/DoubanSubject";
|
import DoubanSubject from "douban/model/DoubanSubject";
|
||||||
import SchemaOrg from "utils/SchemaOrg";
|
|
||||||
import { log } from "utils/Logutil";
|
|
||||||
|
|
||||||
export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<DoubanBookSubject> {
|
export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<DoubanBookSubject> {
|
||||||
|
|
||||||
parseText(extract: DoubanBookSubject, settings:DoubanPluginSettings): string {
|
parseText(extract: DoubanBookSubject, settings:DoubanPluginSettings): string {
|
||||||
return settings.movieTemplate ? settings.movieTemplate.replaceAll("{{id}}", extract.id)
|
return settings.bookTemplate ? settings.bookTemplate.replaceAll("{{id}}", extract.id)
|
||||||
.replaceAll("{{type}}", extract.type ? extract.type : "")
|
.replaceAll("{{type}}", extract.type ? extract.type : "")
|
||||||
.replaceAll("{{title}}", extract.title ? extract.title : "")
|
.replaceAll("{{title}}", extract.title ? extract.title : "")
|
||||||
.replaceAll("{{desc}}", extract.desc ? extract.desc : "")
|
.replaceAll("{{desc}}", extract.desc ? extract.desc : "")
|
||||||
.replaceAll("{{image}}", extract.image ? extract.image : "")
|
.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("{{author}}", extract.author ? extract.author.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("{{datePublished}}", extract.datePublished ? moment(extract.datePublished).format(settings.dateFormat) : "")
|
||||||
.replaceAll("{{url}}", extract.url ? extract.url : "")
|
.replaceAll("{{url}}", extract.url ? extract.url : "")
|
||||||
.replaceAll("{{score}}", extract.aggregateRating && extract.aggregateRating.ratingValue ? extract.aggregateRating.ratingValue + "" : "")
|
.replaceAll("{{score}}", extract.score && extract.score ? extract.score + "" : "")
|
||||||
: undefined; }
|
.replaceAll("{{translator}}", extract.translator ? extract.translator.join(settings.arraySpilt) : "")
|
||||||
|
.replaceAll("{{totalWord}}", extract.totalWord ? extract.totalWord+"" : "")
|
||||||
|
.replaceAll("{{isbn}}", extract.isbn ? extract.isbn : "")
|
||||||
|
.replaceAll("{{publish}}", extract.publish ? extract.publish : "")
|
||||||
|
.replaceAll("{{originalTitle}}", extract.originalTitle ? extract.originalTitle : "")
|
||||||
|
.replaceAll("{{subTitle}}", extract.subTitle ? extract.subTitle : "")
|
||||||
|
.replaceAll("{{totalPage}}", extract.totalPage ? extract.totalPage + "" : "")
|
||||||
|
.replaceAll("{{menu}}", extract.menu ? extract.menu.join(settings.arraySpilt) : "")
|
||||||
|
.replaceAll("{{price}}", extract.price ? extract.price + "" : "")
|
||||||
|
.replaceAll("{{labels}}", extract.labels ? extract.labels.join(settings.arraySpilt) : "")
|
||||||
|
|
||||||
|
: undefined;
|
||||||
|
}
|
||||||
support(extract: DoubanSubject): boolean {
|
support(extract: DoubanSubject): boolean {
|
||||||
return extract && extract.type && (extract.type.contains("书籍") || extract.type.contains("Book") || extract.type.contains("book"));
|
return extract && extract.type && (extract.type.contains("书籍") || extract.type.contains("Book") || extract.type.contains("book"));
|
||||||
}
|
}
|
||||||
@ -36,29 +44,50 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<Dou
|
|||||||
super(doubanPlugin);
|
super(doubanPlugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
parseSubjectFromHtml(data: CheerioAPI): DoubanBookSubject {
|
parseSubjectFromHtml(html: CheerioAPI): DoubanBookSubject {
|
||||||
return data('script')
|
var title = html(html("head > meta[property= 'og:title']").get(0)).attr("content");
|
||||||
.get()
|
var desc = html(html("head > meta[property= 'og:description']").get(0)).attr("content");
|
||||||
.filter(scd => "application/ld+json" == data(scd).attr("type"))
|
var url = html(html("head > meta[property= 'og:url']").get(0)).attr("content");
|
||||||
.map(i => {
|
var image = html(html("head > meta[property= 'og:image']").get(0)).attr("content");
|
||||||
var item = data(i).text();
|
var type = html(html("head > meta[property= 'og:type']").get(0)).attr("content");
|
||||||
item = super.html_decode(item);
|
var author = html(html("head > meta[property= 'book:author']").get(0)).attr("content");
|
||||||
var obj = JSON.parse(item.replace(/[\r\n\s+]/g, ''));
|
var isbn = html(html("head > meta[property= 'book:isbn']").get(0)).attr("content");
|
||||||
|
var detailDom = html(html("#info").get(0))
|
||||||
|
var publish = detailDom.find("span:contains('出版社') > a").text();
|
||||||
|
var translator = detailDom.find("span:contains('译者') > a").text();
|
||||||
|
|
||||||
var idPattern = /(\d){5,10}/g;
|
var idPattern = /(\d){5,10}/g;
|
||||||
var id = idPattern.exec(obj.url);
|
var id = idPattern.exec(url);
|
||||||
|
|
||||||
|
var info = detailDom.html.toString();
|
||||||
|
|
||||||
|
var datePublishedPattern = /<span class="pl">出版年:<\/span> ((\d){4}-(\d){1,2})<br\/>/g;
|
||||||
|
var datePublished = datePublishedPattern.exec(info);
|
||||||
|
|
||||||
const result:DoubanBookSubject = {
|
const result:DoubanBookSubject = {
|
||||||
id: id?id[0]:'',
|
author: [author],
|
||||||
type: 'Book',
|
translator: [translator],
|
||||||
title: obj.name,
|
bookType: "",
|
||||||
desc: obj.description,
|
image: image,
|
||||||
url: "https://book.douban.com" + obj.url,
|
datePublished: datePublished?new Date(datePublished[0]):null,
|
||||||
author: obj.author,
|
totalWord: 0,
|
||||||
aggregateRating: obj.aggregateRating,
|
isbn: isbn,
|
||||||
datePublished: obj.datePublished ? new Date(obj.datePublished) : undefined,
|
publish: publish,
|
||||||
image:obj.image
|
score: 0,
|
||||||
}
|
originalTitle: "",
|
||||||
|
subTitle: "",
|
||||||
|
totalPage: 0,
|
||||||
|
belong: "",
|
||||||
|
menu: [],
|
||||||
|
price: 0,
|
||||||
|
labels: [],
|
||||||
|
id: id ? id[0]:"",
|
||||||
|
type: "Book",
|
||||||
|
title: title,
|
||||||
|
desc: desc,
|
||||||
|
url: url
|
||||||
|
};
|
||||||
return result;
|
return result;
|
||||||
})[0];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -3,17 +3,20 @@ 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:string;
|
author:string[];
|
||||||
translator:string;
|
translator:string[];
|
||||||
bookType:string;
|
bookType:string;
|
||||||
image:string;
|
image:string;
|
||||||
publishDate:string;
|
datePublished:Date;
|
||||||
totalWord:number;
|
totalWord:number;
|
||||||
isbn:string;
|
isbn:string;
|
||||||
press:string;
|
publish:string;
|
||||||
score:number;
|
score:number;
|
||||||
originalName:string;
|
originalTitle:string;
|
||||||
|
subTitle:string;
|
||||||
totalPage:number
|
totalPage:number
|
||||||
belong:string;
|
belong:string;
|
||||||
menu:string;
|
menu:string[];
|
||||||
|
price:number;
|
||||||
|
labels:string[];
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user