mirror of
https://github.com/Wanxp/obsidian-douban.git
synced 2026-04-05 01:28:46 +08:00
feature: theater
feature: imageData.url
This commit is contained in:
parent
240f71f635
commit
6c52606417
@ -79,6 +79,7 @@
|
|||||||
| type | 类型 | 类型 | 类型 | 类型 | 类型 | 类型 | - |
|
| type | 类型 | 类型 | 类型 | 类型 | 类型 | 类型 | - |
|
||||||
| score | 评分 | 评分 | 评分 | 评分 | 评分 | 评分 | - |
|
| score | 评分 | 评分 | 评分 | 评分 | 评分 | 评分 | - |
|
||||||
| image | 封面 | 封面 | 封面 | 封面 | 图片 | 封面 | - |
|
| image | 封面 | 封面 | 封面 | 封面 | 图片 | 封面 | - |
|
||||||
|
| imageData.url | 封面url | 封面url | 封面url | 封面url | 封面url | 封面url | - |
|
||||||
| url | 豆瓣网址 | 豆瓣网址 | 豆瓣网址 | 豆瓣网址 | 豆瓣网址 | 豆瓣网址 | - |
|
| url | 豆瓣网址 | 豆瓣网址 | 豆瓣网址 | 豆瓣网址 | 豆瓣网址 | 豆瓣网址 | - |
|
||||||
| desc | 简介 | 简介 | 内容简介 | 简介 | 简介 | 简介 | - |
|
| desc | 简介 | 简介 | 内容简介 | 简介 | 简介 | 简介 | - |
|
||||||
| publisher | - | - | 出版社 | 出版者 | 发布者 | 发行商 | - |
|
| publisher | - | - | 出版社 | 出版者 | 发布者 | 发行商 | - |
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"id": "obsidian-douban-plugin",
|
"id": "obsidian-douban-plugin",
|
||||||
"name": "Douban",
|
"name": "Douban",
|
||||||
"version": "1.8.8",
|
"version": "1.8.9",
|
||||||
"minAppVersion": "0.12.0",
|
"minAppVersion": "0.12.0",
|
||||||
"description": "This is a plugin that can import movies/books/musics/notes/games info data from Douban for Obsidian .",
|
"description": "This is a plugin that can import movies/books/musics/notes/games info data from Douban for Obsidian .",
|
||||||
"author": "Wanxp",
|
"author": "Wanxp",
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "obsidian-douban-plugin",
|
"name": "obsidian-douban-plugin",
|
||||||
"version": "1.8.8",
|
"version": "1.8.9",
|
||||||
"description": "This is a plugin for Obsidian (https://obsidian.md) that can import data from Douban (https://www.douban.com/).",
|
"description": "This is a plugin for Obsidian (https://obsidian.md) that can import data from Douban (https://www.douban.com/).",
|
||||||
"main": "main.js",
|
"main": "main.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@ -104,6 +104,7 @@ export enum SupportType {
|
|||||||
NOTE = 'NOTE',
|
NOTE = 'NOTE',
|
||||||
GAME = 'GAME',
|
GAME = 'GAME',
|
||||||
TELEPLAY = 'TELEPLAY',
|
TELEPLAY = 'TELEPLAY',
|
||||||
|
THEATER = 'THEATER',
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -177,6 +178,7 @@ export const DoubanSearchResultSubjectPreviousPage:DoubanSearchResultSubject = {
|
|||||||
genre: [],
|
genre: [],
|
||||||
id: "",
|
id: "",
|
||||||
image: "",
|
image: "",
|
||||||
|
imageUrl: "",
|
||||||
publisher: "",
|
publisher: "",
|
||||||
score: 0,
|
score: 0,
|
||||||
title: i18nHelper.getMessage("150102"),
|
title: i18nHelper.getMessage("150102"),
|
||||||
@ -191,6 +193,7 @@ export const DoubanSearchResultSubjectNextPage:DoubanSearchResultSubject = {
|
|||||||
genre: [],
|
genre: [],
|
||||||
id: "",
|
id: "",
|
||||||
image: "",
|
image: "",
|
||||||
|
imageUrl: "",
|
||||||
publisher: "",
|
publisher: "",
|
||||||
score: 0,
|
score: 0,
|
||||||
title: i18nHelper.getMessage("150103"),
|
title: i18nHelper.getMessage("150103"),
|
||||||
@ -205,6 +208,7 @@ export const DoubanSearchResultSubjectNextPageNeedLogin:DoubanSearchResultSubjec
|
|||||||
genre: [],
|
genre: [],
|
||||||
id: "",
|
id: "",
|
||||||
image: "",
|
image: "",
|
||||||
|
imageUrl: "",
|
||||||
publisher: "",
|
publisher: "",
|
||||||
score: 0,
|
score: 0,
|
||||||
title: i18nHelper.getMessage("150104"),
|
title: i18nHelper.getMessage("150104"),
|
||||||
|
|||||||
@ -58,6 +58,13 @@ export const DoubanSubjectStateRecords_TELEPLAY: { [key in DoubanSubjectState]:
|
|||||||
[DoubanSubjectState.collect]: i18nHelper.getMessage('500704'),
|
[DoubanSubjectState.collect]: i18nHelper.getMessage('500704'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const DoubanSubjectStateRecords_THEATER: { [key in DoubanSubjectState]: string } = {
|
||||||
|
[DoubanSubjectState.not]: i18nHelper.getMessage('500701'),
|
||||||
|
[DoubanSubjectState.wish]: i18nHelper.getMessage('500702'),
|
||||||
|
[DoubanSubjectState.do]: i18nHelper.getMessage('500703'),
|
||||||
|
[DoubanSubjectState.collect]: i18nHelper.getMessage('500704'),
|
||||||
|
}
|
||||||
|
|
||||||
export const DoubanSubjectStateRecords: { [key in SupportType]: Record<DoubanSubjectState, string> } = {
|
export const DoubanSubjectStateRecords: { [key in SupportType]: Record<DoubanSubjectState, string> } = {
|
||||||
[SupportType.ALL]:DoubanSubjectStateRecords_ALL,
|
[SupportType.ALL]:DoubanSubjectStateRecords_ALL,
|
||||||
[SupportType.MOVIE]:DoubanSubjectStateRecords_MOVIE,
|
[SupportType.MOVIE]:DoubanSubjectStateRecords_MOVIE,
|
||||||
@ -66,6 +73,7 @@ export const DoubanSubjectStateRecords: { [key in SupportType]: Record<DoubanSub
|
|||||||
[SupportType.NOTE]:DoubanSubjectStateRecords_NOTE,
|
[SupportType.NOTE]:DoubanSubjectStateRecords_NOTE,
|
||||||
[SupportType.GAME]:DoubanSubjectStateRecords_GAME,
|
[SupportType.GAME]:DoubanSubjectStateRecords_GAME,
|
||||||
[SupportType.TELEPLAY]:DoubanSubjectStateRecords_TELEPLAY,
|
[SupportType.TELEPLAY]:DoubanSubjectStateRecords_TELEPLAY,
|
||||||
|
[SupportType.THEATER]:DoubanSubjectStateRecords_THEATER,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -284,6 +284,7 @@ export default abstract class DoubanAbstractLoadHandler<T extends DoubanSubject>
|
|||||||
.replaceAll(DoubanParameter.TYPE, extract.type)
|
.replaceAll(DoubanParameter.TYPE, extract.type)
|
||||||
.replaceAll(DoubanParameter.SCORE, this.handleSpecialContent(extract.score))
|
.replaceAll(DoubanParameter.SCORE, this.handleSpecialContent(extract.score))
|
||||||
.replaceAll(DoubanParameter.IMAGE, extract.image)
|
.replaceAll(DoubanParameter.IMAGE, extract.image)
|
||||||
|
.replaceAll(DoubanParameter.IMAGE_URL, extract.imageUrl)
|
||||||
.replaceAll(DoubanParameter.URL, extract.url)
|
.replaceAll(DoubanParameter.URL, extract.url)
|
||||||
.replaceAll(DoubanParameter.DESC, this.handleSpecialContent(extract.desc, textMode))
|
.replaceAll(DoubanParameter.DESC, this.handleSpecialContent(extract.desc, textMode))
|
||||||
.replaceAll(DoubanParameter.PUBLISHER, extract.publisher)
|
.replaceAll(DoubanParameter.PUBLISHER, extract.publisher)
|
||||||
|
|||||||
@ -112,6 +112,7 @@ export default class DoubanBookLoadHandler extends DoubanAbstractLoadHandler<Dou
|
|||||||
author: author,
|
author: author,
|
||||||
translator: valueMap.has('translator') ? valueMap.get('translator') : [],
|
translator: valueMap.has('translator') ? valueMap.get('translator') : [],
|
||||||
image: image,
|
image: image,
|
||||||
|
imageUrl: image,
|
||||||
datePublished: valueMap.has('datePublished') ? new Date(valueMap.get('datePublished')) : undefined,
|
datePublished: valueMap.has('datePublished') ? new Date(valueMap.get('datePublished')) : undefined,
|
||||||
isbn: isbn,
|
isbn: isbn,
|
||||||
publisher: valueMap.has('publisher') ? valueMap.get('publisher') : "",
|
publisher: valueMap.has('publisher') ? valueMap.get('publisher') : "",
|
||||||
|
|||||||
@ -95,6 +95,7 @@ export default class DoubanGameLoadHandler extends DoubanAbstractLoadHandler<Dou
|
|||||||
url: url,
|
url: url,
|
||||||
genre: valueMap.has('genre') ? valueMap.get('genre') : [],
|
genre: valueMap.has('genre') ? valueMap.get('genre') : [],
|
||||||
image: image,
|
image: image,
|
||||||
|
imageUrl: image,
|
||||||
datePublished: valueMap.has('datePublished') ? new Date(valueMap.get('datePublished')) : undefined,
|
datePublished: valueMap.has('datePublished') ? new Date(valueMap.get('datePublished')) : undefined,
|
||||||
publisher: valueMap.has('publisher') ? valueMap.get('publisher') : "",
|
publisher: valueMap.has('publisher') ? valueMap.get('publisher') : "",
|
||||||
score: Number(score),
|
score: Number(score),
|
||||||
|
|||||||
@ -94,6 +94,7 @@ export default class DoubanMovieLoadHandler extends DoubanAbstractLoadHandler<Do
|
|||||||
aggregateRating: obj.aggregateRating,
|
aggregateRating: obj.aggregateRating,
|
||||||
datePublished: obj.datePublished ? new Date(obj.datePublished) : undefined,
|
datePublished: obj.datePublished ? new Date(obj.datePublished) : undefined,
|
||||||
image: obj.image,
|
image: obj.image,
|
||||||
|
imageUrl: obj.image,
|
||||||
genre: obj.genre,
|
genre: obj.genre,
|
||||||
publisher: '',
|
publisher: '',
|
||||||
aliases: [""],
|
aliases: [""],
|
||||||
|
|||||||
@ -86,6 +86,7 @@ export default class DoubanMusicLoadHandler extends DoubanAbstractLoadHandler<Do
|
|||||||
|
|
||||||
const result: DoubanMusicSubject = {
|
const result: DoubanMusicSubject = {
|
||||||
image: image,
|
image: image,
|
||||||
|
imageUrl: image,
|
||||||
datePublished: valueMap.has('datePublished') ? new Date(valueMap.get('datePublished')) : undefined,
|
datePublished: valueMap.has('datePublished') ? new Date(valueMap.get('datePublished')) : undefined,
|
||||||
publisher: valueMap.has('publisher') ? valueMap.get('publisher') : "",
|
publisher: valueMap.has('publisher') ? valueMap.get('publisher') : "",
|
||||||
score: Number(score),
|
score: Number(score),
|
||||||
|
|||||||
@ -53,6 +53,7 @@ export default class DoubanNoteLoadHandler extends DoubanAbstractLoadHandler<Dou
|
|||||||
|
|
||||||
const result: DoubanNoteSubject = {
|
const result: DoubanNoteSubject = {
|
||||||
image: image,
|
image: image,
|
||||||
|
imageUrl: image,
|
||||||
datePublished: timePublished ? new Date(timePublished) : undefined,
|
datePublished: timePublished ? new Date(timePublished) : undefined,
|
||||||
content: content ? html2markdown(content.toString()) : "",
|
content: content ? html2markdown(content.toString()) : "",
|
||||||
id: id ? id[0] : "",
|
id: id ? id[0] : "",
|
||||||
|
|||||||
@ -29,10 +29,12 @@ export default class DoubanOtherLoadHandler extends DoubanAbstractLoadHandler<Do
|
|||||||
}
|
}
|
||||||
|
|
||||||
parseSubjectFromHtml(data: CheerioAPI, context: HandleContext): DoubanSubject {
|
parseSubjectFromHtml(data: CheerioAPI, context: HandleContext): DoubanSubject {
|
||||||
|
log.notice(i18nHelper.getMessage('140101'));
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
analysisUser(html: CheerioAPI, context: HandleContext): { data: CheerioAPI; userState: UserStateSubject } {
|
analysisUser(html: CheerioAPI, context: HandleContext): { data: CheerioAPI; userState: UserStateSubject } {
|
||||||
|
log.notice(i18nHelper.getMessage('140101'));
|
||||||
return {data: undefined, userState: undefined};
|
return {data: undefined, userState: undefined};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,7 @@ import {DoubanTeleplayLoadHandler} from "./DoubanTeleplayLoadHandler";
|
|||||||
import DoubanGameLoadHandler from "./DoubanGameLoadHandler";
|
import DoubanGameLoadHandler from "./DoubanGameLoadHandler";
|
||||||
import HandleContext from "../model/HandleContext";
|
import HandleContext from "../model/HandleContext";
|
||||||
import HandleResult from "../model/HandleResult";
|
import HandleResult from "../model/HandleResult";
|
||||||
|
import DoubanTheaterLoadHandler from "./DoubanTheaterLoadHandler";
|
||||||
|
|
||||||
export class DoubanSearchChooseItemHandler {
|
export class DoubanSearchChooseItemHandler {
|
||||||
|
|
||||||
@ -30,7 +31,7 @@ export class DoubanSearchChooseItemHandler {
|
|||||||
new DoubanMusicLoadHandler(doubanPlugin),
|
new DoubanMusicLoadHandler(doubanPlugin),
|
||||||
new DoubanNoteLoadHandler(doubanPlugin),
|
new DoubanNoteLoadHandler(doubanPlugin),
|
||||||
new DoubanGameLoadHandler(doubanPlugin),
|
new DoubanGameLoadHandler(doubanPlugin),
|
||||||
|
new DoubanTheaterLoadHandler(doubanPlugin),
|
||||||
this._doubanSubjectHandlerDefault];
|
this._doubanSubjectHandlerDefault];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -94,6 +94,7 @@ export class DoubanTeleplayLoadHandler extends DoubanAbstractLoadHandler<DoubanT
|
|||||||
aggregateRating: obj.aggregateRating,
|
aggregateRating: obj.aggregateRating,
|
||||||
datePublished: obj.datePublished ? new Date(obj.datePublished) : undefined,
|
datePublished: obj.datePublished ? new Date(obj.datePublished) : undefined,
|
||||||
image: obj.image,
|
image: obj.image,
|
||||||
|
imageUrl: obj.image,
|
||||||
genre: obj.genre,
|
genre: obj.genre,
|
||||||
score: obj.aggregateRating ? obj.aggregateRating.ratingValue : undefined,
|
score: obj.aggregateRating ? obj.aggregateRating.ratingValue : undefined,
|
||||||
publisher: "",
|
publisher: "",
|
||||||
|
|||||||
149
src/org/wanxp/douban/data/handler/DoubanTheaterLoadHandler.ts
Normal file
149
src/org/wanxp/douban/data/handler/DoubanTheaterLoadHandler.ts
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
import {CheerioAPI} from 'cheerio';
|
||||||
|
import DoubanAbstractLoadHandler from "./DoubanAbstractLoadHandler";
|
||||||
|
import DoubanPlugin from "../../../main";
|
||||||
|
import SchemaOrg from "src/org/wanxp/utils/SchemaOrg";
|
||||||
|
import DoubanSubject from '../model/DoubanSubject';
|
||||||
|
import DoubanMovieSubject from '../model/DoubanMovieSubject';
|
||||||
|
import StringUtil from "../../../utils/StringUtil";
|
||||||
|
import HandleContext from "../model/HandleContext";
|
||||||
|
import {PersonNameMode, SupportType, TemplateKey} from "../../../constant/Constsant";
|
||||||
|
import {UserStateSubject} from "../model/UserStateSubject";
|
||||||
|
import {moment} from "obsidian";
|
||||||
|
import YamlUtil, {SPECIAL_CHAR_REG, TITLE_ALIASES_SPECIAL_CHAR_REG_G} from "../../../utils/YamlUtil";
|
||||||
|
import { Person } from 'schema-dts';
|
||||||
|
|
||||||
|
export default class DoubanTheaterLoadHandler extends DoubanAbstractLoadHandler<DoubanMovieSubject> {
|
||||||
|
|
||||||
|
constructor(doubanPlugin: DoubanPlugin) {
|
||||||
|
super(doubanPlugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
getSupportType(): SupportType {
|
||||||
|
return SupportType.THEATER;
|
||||||
|
}
|
||||||
|
|
||||||
|
getHighQuantityImageUrl(fileName:string):string{
|
||||||
|
return `https://img9.doubanio.com/view/photo/l/public/${fileName}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
parseText(beforeContent: string, extract: DoubanMovieSubject, context: HandleContext): string {
|
||||||
|
const {settings} = context;
|
||||||
|
return beforeContent
|
||||||
|
.replaceAll("{{originalTitle}}", extract.originalTitle ? extract.originalTitle : "")
|
||||||
|
.replaceAll("{{director}}", extract.director ? extract.director.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, context)).filter(c => c).join(settings.arraySpilt) : "")
|
||||||
|
.replaceAll("{{actor}}", extract.actor ? extract.actor.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, context)).filter(c => c).join(settings.arraySpilt) : "")
|
||||||
|
.replaceAll("{{author}}", extract.author ? extract.author.map(SchemaOrg.getPersonName).map(name => super.getPersonName(name, context)).filter(c => c).join(settings.arraySpilt) : "")
|
||||||
|
.replaceAll("{{aliases}}", extract.aliases ? extract.aliases.map(a=>a.replace(TITLE_ALIASES_SPECIAL_CHAR_REG_G, '_')).join(settings.arraySpilt) : "")
|
||||||
|
.replaceAll("{{country}}", extract.country ? extract.country.join(settings.arraySpilt) : "")
|
||||||
|
.replaceAll("{{language}}", extract.language ? extract.language.join(settings.arraySpilt) : "")
|
||||||
|
.replaceAll("{{IMDb}}", extract.IMDb ? extract.IMDb : "")
|
||||||
|
.replaceAll("{{time}}", extract.time ? extract.time : "")
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
support(extract: DoubanSubject): boolean {
|
||||||
|
return extract && extract.type && (extract.type.contains("舞台剧") || extract.type.contains("舞剧") || extract.type.contains("Theater") || extract.type.contains("theater"));
|
||||||
|
}
|
||||||
|
|
||||||
|
analysisUser(html: CheerioAPI, context: HandleContext): {data:CheerioAPI , userState: UserStateSubject} {
|
||||||
|
let rate = html('input#n_rating').val();
|
||||||
|
let tagsStr = html('div#interest_sect_level > div.a_stars > span.color_gray').text().trim();
|
||||||
|
let tags = tagsStr ? tagsStr.replace('标签:', '').trim().split(' ') : null;
|
||||||
|
let stateWord = html('div#interest_sect_level > div.a_stars > span.mr10').text().trim();
|
||||||
|
let collectionDateStr = html('div#interest_sect_level > div.a_stars > span.mr10 > span.collection_date').text().trim();
|
||||||
|
let userState1 = DoubanAbstractLoadHandler.getUserState(stateWord);
|
||||||
|
let component = html('div#interest_sect_level > div.a_stars > span.color_gray').next().next().text().trim();
|
||||||
|
|
||||||
|
|
||||||
|
const userState: UserStateSubject = {
|
||||||
|
tags: tags,
|
||||||
|
rate: rate?Number(rate):null,
|
||||||
|
state: userState1,
|
||||||
|
collectionDate: collectionDateStr?moment(collectionDateStr, 'YYYY-MM-DD').toDate():null,
|
||||||
|
comment: component
|
||||||
|
}
|
||||||
|
return {data: html, userState: userState};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
parseSubjectFromHtml(html: CheerioAPI, context: HandleContext): DoubanMovieSubject {
|
||||||
|
const movie:DoubanMovieSubject = html('script')
|
||||||
|
.get()
|
||||||
|
.filter(scd => "application/ld+json" == html(scd).attr("type"))
|
||||||
|
.map(i => {
|
||||||
|
let item = html(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 title = super.getTitleNameByMode(name, PersonNameMode.CH_NAME, context)??name;
|
||||||
|
let originalTitle = super.getTitleNameByMode(name, PersonNameMode.EN_NAME, context) ?? name;
|
||||||
|
|
||||||
|
const result: DoubanMovieSubject = {
|
||||||
|
id: id ? id[0] : '',
|
||||||
|
title: title,
|
||||||
|
type: 'Movie',
|
||||||
|
score: obj.aggregateRating ? obj.aggregateRating.ratingValue : undefined,
|
||||||
|
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,
|
||||||
|
imageUrl: obj.image,
|
||||||
|
genre: obj.genre,
|
||||||
|
publisher: '',
|
||||||
|
aliases: [""],
|
||||||
|
language: [""],
|
||||||
|
country: [],
|
||||||
|
time: null,
|
||||||
|
IMDb: null,
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
})[0];
|
||||||
|
this.handlePersonNameByMeta(html, movie, context, 'video:actor', 'actor');
|
||||||
|
this.handlePersonNameByMeta(html, movie, context, 'video:director', 'director');
|
||||||
|
|
||||||
|
let detailDom = html(html("#info").get(0));
|
||||||
|
let publish = detailDom.find("span.pl");
|
||||||
|
|
||||||
|
let valueMap = new Map<string, any>();
|
||||||
|
|
||||||
|
publish.map((index, info) => {
|
||||||
|
let key = html(info).text().trim();
|
||||||
|
let value;
|
||||||
|
if (key.indexOf('又名') >= 0 || key.indexOf('语言') >= 0 || key.indexOf('制片国家') >= 0) {
|
||||||
|
// value = html(info.next.next).text().trim();
|
||||||
|
let vas = html(info.next).text().trim();
|
||||||
|
value = vas.split("/").map((v) => v.trim());
|
||||||
|
} else if(key.indexOf('片长') >= 0) {
|
||||||
|
value = html(info.next.next).text().trim()
|
||||||
|
} else {
|
||||||
|
value = html(info.next).text().trim();
|
||||||
|
}
|
||||||
|
valueMap.set(MovieKeyValueMap.get(key), value);
|
||||||
|
})
|
||||||
|
|
||||||
|
movie.country = valueMap.has('country') ? valueMap.get('country') : [];
|
||||||
|
movie.language = valueMap.has('language') ? valueMap.get('language') : [];
|
||||||
|
movie.time = valueMap.has('time') ? valueMap.get('time') : "";
|
||||||
|
movie.aliases = valueMap.has('aliases') ? valueMap.get('aliases') : [];
|
||||||
|
movie.IMDb = valueMap.has('IMDb') ? valueMap.get('IMDb') : "";
|
||||||
|
return movie;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const MovieKeyValueMap: Map<string, string> = new Map(
|
||||||
|
[['制片国家/地区:', 'country'],
|
||||||
|
['语言:', 'language'],
|
||||||
|
['片长:', 'time'],
|
||||||
|
['又名:', 'aliases'],
|
||||||
|
['IMDb:', 'IMDb']
|
||||||
|
]
|
||||||
|
);
|
||||||
@ -6,6 +6,7 @@ export default class DoubanSubject {
|
|||||||
type: string;
|
type: string;
|
||||||
score: number;
|
score: number;
|
||||||
image: string;
|
image: string;
|
||||||
|
imageUrl: string;
|
||||||
url: string;
|
url: string;
|
||||||
desc: string;
|
desc: string;
|
||||||
publisher: string;
|
publisher: string;
|
||||||
@ -24,6 +25,7 @@ export const DoubanParameter = {
|
|||||||
TYPE: '{{type}}',
|
TYPE: '{{type}}',
|
||||||
SCORE: '{{score}}',
|
SCORE: '{{score}}',
|
||||||
IMAGE: '{{image}}',
|
IMAGE: '{{image}}',
|
||||||
|
IMAGE_URL: '{{imageData.url}}',
|
||||||
URL: '{{url}}',
|
URL: '{{url}}',
|
||||||
DESC: '{{desc}}',
|
DESC: '{{desc}}',
|
||||||
PUBLISHER: '{{publisher}}',
|
PUBLISHER: '{{publisher}}',
|
||||||
|
|||||||
13
src/org/wanxp/douban/data/model/DoubanTheaterSubject.ts
Normal file
13
src/org/wanxp/douban/data/model/DoubanTheaterSubject.ts
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
import {AggregateRating, Person} from 'schema-dts';
|
||||||
|
|
||||||
|
import DoubanSubject from "./DoubanSubject";
|
||||||
|
|
||||||
|
export default class DoubanTheaterSubject extends DoubanSubject {
|
||||||
|
director: string[];
|
||||||
|
author: string[];
|
||||||
|
actor: string[];
|
||||||
|
aggregateRating: AggregateRating;
|
||||||
|
originalTitle: string;
|
||||||
|
aliases: string[];
|
||||||
|
language: string[];
|
||||||
|
}
|
||||||
@ -29,6 +29,7 @@ export default class SearchParserHandler {
|
|||||||
desc: desc ? desc : '-',
|
desc: desc ? desc : '-',
|
||||||
url: urlResult ? decodeURIComponent(urlResult[0]) : 'https://www.douban.com',
|
url: urlResult ? decodeURIComponent(urlResult[0]) : 'https://www.douban.com',
|
||||||
image: "",
|
image: "",
|
||||||
|
imageUrl: "",
|
||||||
publisher: "",
|
publisher: "",
|
||||||
datePublished: undefined,
|
datePublished: undefined,
|
||||||
genre: []
|
genre: []
|
||||||
|
|||||||
@ -72,6 +72,16 @@ ${i18nHelper.getMessage('122004')}
|
|||||||
<td>${i18nHelper.getMessage('310605')}</td>
|
<td>${i18nHelper.getMessage('310605')}</td>
|
||||||
<td>${i18nHelper.getMessage('310705')}</td>
|
<td>${i18nHelper.getMessage('310705')}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>imageData.url</td>
|
||||||
|
<td>${i18nHelper.getMessage('310121')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310221')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310321')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310421')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310521')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310621')}</td>
|
||||||
|
<td>${i18nHelper.getMessage('310721')}</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>url</td>
|
<td>url</td>
|
||||||
<td>${i18nHelper.getMessage('310106')}</td>
|
<td>${i18nHelper.getMessage('310106')}</td>
|
||||||
|
|||||||
@ -5,6 +5,8 @@ import {log} from "../../utils/Logutil";
|
|||||||
import {i18nHelper} from "../../lang/helper";
|
import {i18nHelper} from "../../lang/helper";
|
||||||
import User from "./User";
|
import User from "./User";
|
||||||
import StringUtil from "../../utils/StringUtil";
|
import StringUtil from "../../utils/StringUtil";
|
||||||
|
import {DEFAULT_SETTINGS} from "../../constant/DefaultSettings";
|
||||||
|
import {doubanHeaders} from "../../constant/Douban";
|
||||||
|
|
||||||
export default class UserComponent {
|
export default class UserComponent {
|
||||||
private settingsManager: SettingsManager;
|
private settingsManager: SettingsManager;
|
||||||
@ -75,19 +77,30 @@ export default class UserComponent {
|
|||||||
return this.user;
|
return this.user;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async loadUserInfo(cookie: any): Promise<User> {
|
async loadUserInfo(cookie: any): Promise<User> {
|
||||||
|
const headers1 = {
|
||||||
|
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
|
||||||
|
'Accept-Language': 'zh-CN,zh;q=0.9',
|
||||||
|
'Cookie': 'll="118254"; bid=e3SJhuRaDoQ; _pk_id.100001.8cb4=0b044d4d91fdda7d.1689002992.; ap_v=0,6.0; __yadk_uid=7Eg5yv2X4YarGEeH16Tm4fYL49PdGNcN; push_noty_num=0; push_doumail_num=0; __utmv=30149280.16378; _pk_ref.100001.8cb4=%5B%22%22%2C%22%22%2C1689007676%2C%22https%3A%2F%2Fwww.google.com%2F%22%5D; _pk_ses.100001.8cb4=1; __utma=30149280.2026487677.1689002992.1689002992.1689007676.2; __utmc=30149280; __utmz=30149280.1689007676.2.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided); __utmt=1; dbcl2="163783265:gitjSogzBf4"; ck=-hBQ; __gads=ID=df3cc2947f6dddaa-2255abc9a2e200c3:T=1689004292:RT=1689007691:S=ALNI_MZZ0HVSzWxK28Qd8yN2KGJNkdthHA; __gpi=UID=00000c1f8aeb6832:T=1689004292:RT=1689007691:S=ALNI_MYsS7sKea87clnkc-vWGArdV8O6gQ; __utmb=30149280.7.10.1689007676',
|
||||||
|
'Referer': 'https://accounts.douban.com/',
|
||||||
|
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36'
|
||||||
|
}
|
||||||
|
// Object.assign(headers, doubanHeaders, {'Cookie': cookie}, {'Referer': 'https://accounts.douban.com/'})
|
||||||
let requestUrlParam: RequestUrlParam = {
|
let requestUrlParam: RequestUrlParam = {
|
||||||
url: 'https://www.douban.com/mine/',
|
url: 'https://www.douban.com/mine/',
|
||||||
method: "GET",
|
method: "GET",
|
||||||
headers: {'Cookie': cookie},
|
headers: headers1,
|
||||||
throw: true
|
throw: true
|
||||||
};
|
};
|
||||||
this.settingsManager.debug('loadUserInfo:尝试获取用户信息:https://www.douban.com/mine/');
|
this.settingsManager.debug('loadUserInfo:尝试获取用户信息:https://www.douban.com/mine/');
|
||||||
return request(requestUrlParam)
|
return request(requestUrlParam)
|
||||||
.then(requestUrlResponse => {
|
.then(requestUrlResponse => {
|
||||||
if (requestUrlResponse.indexOf('https://sec.douban.com/a') > 0) {
|
if (requestUrlResponse.indexOf('https://sec.douban.com/a') > 0) {
|
||||||
|
this.settingsManager.debug(`loadUserInfo:登录Douban获取异常网页如下:\n${requestUrlResponse}`);
|
||||||
throw new Error(i18nHelper.getMessage('130105'));
|
throw new Error(i18nHelper.getMessage('130105'));
|
||||||
}
|
}
|
||||||
|
this.settingsManager.debug(`loadUserInfo:登录Douban获取网页如下:\n${requestUrlResponse}`);
|
||||||
return requestUrlResponse;
|
return requestUrlResponse;
|
||||||
})
|
})
|
||||||
.then(load)
|
.then(load)
|
||||||
|
|||||||
@ -296,7 +296,7 @@ PS: This file could be delete if you want to.
|
|||||||
'310102': `书名`,
|
'310102': `书名`,
|
||||||
'310103': `类型`,
|
'310103': `类型`,
|
||||||
'310104': `评分`,
|
'310104': `评分`,
|
||||||
'310105': `封面URL`,
|
'310105': `封面路径`,
|
||||||
'310106': `豆瓣网址`,
|
'310106': `豆瓣网址`,
|
||||||
'310107': `内容简介`,
|
'310107': `内容简介`,
|
||||||
'310108': `出版社`,
|
'310108': `出版社`,
|
||||||
@ -313,6 +313,8 @@ PS: This file could be delete if you want to.
|
|||||||
'310119': `-`,
|
'310119': `-`,
|
||||||
'310120': `-`,
|
'310120': `-`,
|
||||||
'310130': `出版年份`,
|
'310130': `出版年份`,
|
||||||
|
'310121': `封面URL`,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//电影
|
//电影
|
||||||
@ -320,7 +322,7 @@ PS: This file could be delete if you want to.
|
|||||||
'310202': `电影名称`,
|
'310202': `电影名称`,
|
||||||
'310203': `类型`,
|
'310203': `类型`,
|
||||||
'310204': `评分`,
|
'310204': `评分`,
|
||||||
'310205': `封面`,
|
'310205': `封面路径`,
|
||||||
'310206': `豆瓣网址`,
|
'310206': `豆瓣网址`,
|
||||||
'310207': `简介`,
|
'310207': `简介`,
|
||||||
'310208': ``,
|
'310208': ``,
|
||||||
@ -337,13 +339,14 @@ PS: This file could be delete if you want to.
|
|||||||
'310219': `IMDb`,
|
'310219': `IMDb`,
|
||||||
'310220': `-`,
|
'310220': `-`,
|
||||||
'310230': `上映年份`,
|
'310230': `上映年份`,
|
||||||
|
'310221': `封面URL`,
|
||||||
|
|
||||||
//电视剧
|
//电视剧
|
||||||
'310301': `豆瓣ID`,
|
'310301': `豆瓣ID`,
|
||||||
'310302': `电视剧名称`,
|
'310302': `电视剧名称`,
|
||||||
'310303': `类型`,
|
'310303': `类型`,
|
||||||
'310304': `评分`,
|
'310304': `评分`,
|
||||||
'310305': `封面`,
|
'310305': `封面路径`,
|
||||||
'310306': `豆瓣网址`,
|
'310306': `豆瓣网址`,
|
||||||
'310307': `简介`,
|
'310307': `简介`,
|
||||||
'310308': ``,
|
'310308': ``,
|
||||||
@ -360,6 +363,7 @@ PS: This file could be delete if you want to.
|
|||||||
'310319': `IMDb`,
|
'310319': `IMDb`,
|
||||||
'310320': `episode:集数`,
|
'310320': `episode:集数`,
|
||||||
'310330': `上映年份`,
|
'310330': `上映年份`,
|
||||||
|
'310321': `封面URL`,
|
||||||
|
|
||||||
|
|
||||||
//音乐
|
//音乐
|
||||||
@ -367,7 +371,7 @@ PS: This file could be delete if you want to.
|
|||||||
'310402': `音乐名`,
|
'310402': `音乐名`,
|
||||||
'310403': `类型`,
|
'310403': `类型`,
|
||||||
'310404': `评分`,
|
'310404': `评分`,
|
||||||
'310405': `封面`,
|
'310405': `封面路径`,
|
||||||
'310406': `豆瓣网址`,
|
'310406': `豆瓣网址`,
|
||||||
'310407': `简介`,
|
'310407': `简介`,
|
||||||
'310408': `出版者`,
|
'310408': `出版者`,
|
||||||
@ -384,13 +388,14 @@ PS: This file could be delete if you want to.
|
|||||||
'310419': `-`,
|
'310419': `-`,
|
||||||
'310420': `-`,
|
'310420': `-`,
|
||||||
'310430': `发行年份`,
|
'310430': `发行年份`,
|
||||||
|
'310421': `封面URL`,
|
||||||
|
|
||||||
//日记
|
//日记
|
||||||
'310501': `豆瓣ID`,
|
'310501': `豆瓣ID`,
|
||||||
'310502': `日记标题`,
|
'310502': `日记标题`,
|
||||||
'310503': `类型`,
|
'310503': `类型`,
|
||||||
'310504': `评分`,
|
'310504': `评分`,
|
||||||
'310505': `图片`,
|
'310505': `封面路径`,
|
||||||
'310506': `豆瓣网址`,
|
'310506': `豆瓣网址`,
|
||||||
'310507': `简介`,
|
'310507': `简介`,
|
||||||
'310508': `发布者`,
|
'310508': `发布者`,
|
||||||
@ -407,13 +412,14 @@ PS: This file could be delete if you want to.
|
|||||||
'310519': `-`,
|
'310519': `-`,
|
||||||
'310520': `-`,
|
'310520': `-`,
|
||||||
'310530': `发布年份`,
|
'310530': `发布年份`,
|
||||||
|
'310521': `封面URL`,
|
||||||
|
|
||||||
//游戏
|
//游戏
|
||||||
'310601': `豆瓣ID`,
|
'310601': `豆瓣ID`,
|
||||||
'310602': `游戏名称`,
|
'310602': `游戏名称`,
|
||||||
'310603': `类型`,
|
'310603': `类型`,
|
||||||
'310604': `评分`,
|
'310604': `评分`,
|
||||||
'310605': `封面`,
|
'310605': `封面路径`,
|
||||||
'310606': `豆瓣网址`,
|
'310606': `豆瓣网址`,
|
||||||
'310607': `简介`,
|
'310607': `简介`,
|
||||||
'310608': `发行商`,
|
'310608': `发行商`,
|
||||||
@ -430,6 +436,7 @@ PS: This file could be delete if you want to.
|
|||||||
'310619': `-`,
|
'310619': `-`,
|
||||||
'310620': `-`,
|
'310620': `-`,
|
||||||
'310630': `发行年份`,
|
'310630': `发行年份`,
|
||||||
|
'310621': `封面URL`,
|
||||||
|
|
||||||
//广播
|
//广播
|
||||||
'310701': `待开发`,
|
'310701': `待开发`,
|
||||||
@ -453,6 +460,7 @@ PS: This file could be delete if you want to.
|
|||||||
'310719': `-`,
|
'310719': `-`,
|
||||||
'310720': `-`,
|
'310720': `-`,
|
||||||
'310730': `-`,
|
'310730': `-`,
|
||||||
|
'310721': `封面URL`,
|
||||||
|
|
||||||
|
|
||||||
'320101': `扩展1`,
|
'320101': `扩展1`,
|
||||||
|
|||||||
@ -314,7 +314,7 @@ export default {
|
|||||||
'310102': `书名`,
|
'310102': `书名`,
|
||||||
'310103': `类型`,
|
'310103': `类型`,
|
||||||
'310104': `评分`,
|
'310104': `评分`,
|
||||||
'310105': `封面URL`,
|
'310105': `封面路径`,
|
||||||
'310106': `豆瓣网址`,
|
'310106': `豆瓣网址`,
|
||||||
'310107': `内容简介`,
|
'310107': `内容简介`,
|
||||||
'310108': `出版社`,
|
'310108': `出版社`,
|
||||||
@ -329,13 +329,15 @@ export default {
|
|||||||
'310117': `binding:装帧`,
|
'310117': `binding:装帧`,
|
||||||
'310118': `producer:出品方`,
|
'310118': `producer:出品方`,
|
||||||
'310130': `出版年份`,
|
'310130': `出版年份`,
|
||||||
|
'310121': `封面URL`,
|
||||||
|
|
||||||
|
|
||||||
//电影
|
//电影
|
||||||
'310201': `豆瓣ID`,
|
'310201': `豆瓣ID`,
|
||||||
'310202': `电影名称`,
|
'310202': `电影名称`,
|
||||||
'310203': `类型`,
|
'310203': `类型`,
|
||||||
'310204': `评分`,
|
'310204': `评分`,
|
||||||
'310205': `封面`,
|
'310205': `封面路径`,
|
||||||
'310206': `豆瓣网址`,
|
'310206': `豆瓣网址`,
|
||||||
'310207': `简介`,
|
'310207': `简介`,
|
||||||
'310208': ``,
|
'310208': ``,
|
||||||
@ -352,13 +354,14 @@ export default {
|
|||||||
'310219': `IMDb`,
|
'310219': `IMDb`,
|
||||||
'310220': `-`,
|
'310220': `-`,
|
||||||
'310230': `上映年份`,
|
'310230': `上映年份`,
|
||||||
|
'310221': `封面URL`,
|
||||||
|
|
||||||
//电视剧
|
//电视剧
|
||||||
'310301': `豆瓣ID`,
|
'310301': `豆瓣ID`,
|
||||||
'310302': `电视剧名称`,
|
'310302': `电视剧名称`,
|
||||||
'310303': `类型`,
|
'310303': `类型`,
|
||||||
'310304': `评分`,
|
'310304': `评分`,
|
||||||
'310305': `封面`,
|
'310305': `封面路径`,
|
||||||
'310306': `豆瓣网址`,
|
'310306': `豆瓣网址`,
|
||||||
'310307': `简介`,
|
'310307': `简介`,
|
||||||
'310308': `(固定值:未知)`,
|
'310308': `(固定值:未知)`,
|
||||||
@ -375,6 +378,7 @@ export default {
|
|||||||
'310319': `IMDb`,
|
'310319': `IMDb`,
|
||||||
'310320': `episode:集数`,
|
'310320': `episode:集数`,
|
||||||
'310330': `上映年份`,
|
'310330': `上映年份`,
|
||||||
|
'310321': `封面URL`,
|
||||||
|
|
||||||
|
|
||||||
//音乐
|
//音乐
|
||||||
@ -382,7 +386,7 @@ export default {
|
|||||||
'310402': `音乐名`,
|
'310402': `音乐名`,
|
||||||
'310403': `类型`,
|
'310403': `类型`,
|
||||||
'310404': `评分`,
|
'310404': `评分`,
|
||||||
'310405': `封面`,
|
'310405': `封面路径`,
|
||||||
'310406': `豆瓣网址`,
|
'310406': `豆瓣网址`,
|
||||||
'310407': `简介`,
|
'310407': `简介`,
|
||||||
'310408': `出版者`,
|
'310408': `出版者`,
|
||||||
@ -397,13 +401,15 @@ export default {
|
|||||||
'310417': `-`,
|
'310417': `-`,
|
||||||
'310418': `-`,
|
'310418': `-`,
|
||||||
'310430': `发行年份`,
|
'310430': `发行年份`,
|
||||||
|
'310421': `封面URL`,
|
||||||
|
|
||||||
|
|
||||||
//日记
|
//日记
|
||||||
'310501': `豆瓣ID`,
|
'310501': `豆瓣ID`,
|
||||||
'310502': `日记标题`,
|
'310502': `日记标题`,
|
||||||
'310503': `类型`,
|
'310503': `类型`,
|
||||||
'310504': `评分`,
|
'310504': `评分`,
|
||||||
'310505': `图片`,
|
'310505': `封面路径`,
|
||||||
'310506': `豆瓣网址`,
|
'310506': `豆瓣网址`,
|
||||||
'310507': `简介`,
|
'310507': `简介`,
|
||||||
'310508': `发布者`,
|
'310508': `发布者`,
|
||||||
@ -418,13 +424,14 @@ export default {
|
|||||||
'310517': `-`,
|
'310517': `-`,
|
||||||
'310518': `-`,
|
'310518': `-`,
|
||||||
'310530': `发布年份`,
|
'310530': `发布年份`,
|
||||||
|
'310521': `封面URL`,
|
||||||
|
|
||||||
//游戏
|
//游戏
|
||||||
'310601': `豆瓣ID`,
|
'310601': `豆瓣ID`,
|
||||||
'310602': `游戏名称`,
|
'310602': `游戏名称`,
|
||||||
'310603': `类型`,
|
'310603': `类型`,
|
||||||
'310604': `评分`,
|
'310604': `评分`,
|
||||||
'310605': `封面`,
|
'310605': `封面路径`,
|
||||||
'310606': `豆瓣网址`,
|
'310606': `豆瓣网址`,
|
||||||
'310607': `简介`,
|
'310607': `简介`,
|
||||||
'310608': `发行商`,
|
'310608': `发行商`,
|
||||||
@ -439,6 +446,8 @@ export default {
|
|||||||
'310617': `-`,
|
'310617': `-`,
|
||||||
'310618': `-`,
|
'310618': `-`,
|
||||||
'310630': `发行年份`,
|
'310630': `发行年份`,
|
||||||
|
'310621': `封面URL`,
|
||||||
|
|
||||||
|
|
||||||
//广播
|
//广播
|
||||||
'310701': `待开发`,
|
'310701': `待开发`,
|
||||||
@ -460,6 +469,7 @@ export default {
|
|||||||
'310717': `-`,
|
'310717': `-`,
|
||||||
'310718': `-`,
|
'310718': `-`,
|
||||||
'310730': `-`,
|
'310730': `-`,
|
||||||
|
'310721': `封面URL`,
|
||||||
|
|
||||||
'320101': `扩展1`,
|
'320101': `扩展1`,
|
||||||
'320102': `扩展2`,
|
'320102': `扩展2`,
|
||||||
|
|||||||
@ -32,6 +32,8 @@
|
|||||||
"1.8.4": "0.12.0",
|
"1.8.4": "0.12.0",
|
||||||
"1.8.5": "0.12.0",
|
"1.8.5": "0.12.0",
|
||||||
"1.8.6": "0.12.0",
|
"1.8.6": "0.12.0",
|
||||||
"1.8.7": "0.12.0"
|
"1.8.7": "0.12.0",
|
||||||
|
"1.8.8": "0.12.0",
|
||||||
|
"1.8.9": "0.12.0"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user