obsidian-douban/src/douban/data/search/SearchParser.ts
2022-10-31 00:43:55 +08:00

37 lines
1.3 KiB
TypeScript

import {CheerioAPI} from "cheerio";
import DoubanSearchResultSubject from "../model/DoubanSearchResultSubject";
export default class SearchParserHandler {
static parseSearch(dataHtml: CheerioAPI): DoubanSearchResultSubject[] {
return dataHtml('.result')
.get()
.map((i: any) => {
const item = dataHtml(i);
let idPattern = /(\d){5,10}/g;
let urlPattern = /(https%3A%2F%2F)\S+(\d){5,10}/g;
let linkValue = item.find("div.content > div > h3 > a").attr("href");
let ececResult = idPattern.exec(linkValue);
let urlResult = urlPattern.exec(linkValue);
let cast = item.find(".subject-cast").text();
let score = item.find(".rating_nums").text();
let title = item.find("div.content > div > h3 > a").text();
let type = item.find("div.content > div > h3 > span").text();
let desc = item.find("div.content > p").text();
const result: DoubanSearchResultSubject = {
id: ececResult ? ececResult[0] : '',
title: title ? title : '-',
score: score ? Number(score) : null,
cast: cast,
type: type ? type : '-',
desc: desc ? desc : '-',
url: urlResult ? decodeURIComponent(urlResult[0]) : 'https://www.douban.com',
image: "",
publisher: "",
datePublished: undefined,
genre: []
};
return result;
})
};
}