85 lines
3.1 KiB
JavaScript
85 lines
3.1 KiB
JavaScript
/*
|
|
* @File : tencentDanmu.js
|
|
* @Author : jade
|
|
* @Date : 2024/3/13 13:17
|
|
* @Email : jadehh@1ive.com
|
|
* @Software : Samples
|
|
* @Desc :
|
|
*/
|
|
|
|
import {DammuSpider} from "./danmuSpider.js";
|
|
import {VodDetail} from "./vod.js";
|
|
import * as Utils from "./utils.js";
|
|
|
|
class TencentDammuSpider extends DammuSpider {
|
|
constructor() {
|
|
super()
|
|
this.siteUrl = "https://v.qq.com"
|
|
this.reconnectTimes = 0
|
|
this.maxReconnectTimes = 5
|
|
}
|
|
|
|
getAppName() {
|
|
return "腾讯视频"
|
|
}
|
|
|
|
async parseVodShortListFromDoc($) {
|
|
let vodElements = $("[class=\"_infos\"]")
|
|
let vod_list = []
|
|
for (const vodElement of vodElements) {
|
|
let vodDetail = new VodDetail()
|
|
let titleElement = $(vodElement).find("[class=\"result_title\"]")
|
|
let infoItemEvenElenet = $(vodElement).find("[class=\"info_item info_item_even\"]")
|
|
let infoItemOddElement = $(vodElement).find("[class=\"info_item info_item_odd\"]")
|
|
let descElement = $(vodElement).find("[class=\"info_item info_item_desc\"]")
|
|
vodDetail.vod_name = $($(titleElement).find("[class=\"hl\"]")).text()
|
|
vodDetail.vod_year = $($(titleElement).find("[class=\"sub\"]")).text().replaceAll("\n","").replaceAll("(","").replaceAll(")","").replaceAll("\t","").split("/").slice(-1)[0]
|
|
vodDetail.type_name = $($(titleElement).find("[class=\"type\"]")).text()
|
|
vodDetail.vod_director = $($($(infoItemEvenElenet).find("[class=\"content\"]")).find("span")).text()
|
|
let actorList = $( $(infoItemOddElement.slice(-1)[0]).find("[class=\"content\"]")).find("a")
|
|
let vodActorList = []
|
|
for (const actorElement of actorList){
|
|
vodActorList.push($(actorElement).text())
|
|
}
|
|
vodDetail.vod_actor = vodActorList.join(" * ")
|
|
vodDetail.vod_content = $($(descElement).find("[class=\"desc_text\"]")[0]).text()
|
|
let url = $(vodElement).find("a")[0].attribs.href
|
|
if (url.indexOf("cover") > -1){
|
|
let detail$ = await this.getHtml(url)
|
|
let video_ids = JSON.parse(Utils.getStrByRegex(/"video_ids":(.*?),/,detail$.html()))
|
|
vodDetail.vod_id = video_ids[0]
|
|
vod_list.push(vodDetail)
|
|
}
|
|
}
|
|
return vod_list
|
|
}
|
|
|
|
async search(wd) {
|
|
await this.jadeLog.debug(`正在搜索:${wd}`, true)
|
|
let searchUrl = this.siteUrl + `/x/search/?q=${wd}`
|
|
let $ = await this.getHtml(searchUrl)
|
|
return this.parseVodShortListFromDoc($)
|
|
}
|
|
|
|
parseDammu(id){
|
|
|
|
}
|
|
|
|
|
|
async getDammu(voddetail, episodeId) {
|
|
let vod_list = await this.search(voddetail.vod_name)
|
|
for (const searchVodDetail of vod_list){
|
|
if (voddetail.vod_director === searchVodDetail.vod_director){
|
|
await this.jadeLog.debug("搜索匹配成功",true)
|
|
return
|
|
}
|
|
}
|
|
await this.jadeLog.warning(`搜索匹配失败,原:${JSON.stringify(voddetail)},搜索:${JSON.stringify(vod_list)}`)
|
|
return ""
|
|
}
|
|
}
|
|
|
|
export {TencentDammuSpider}
|
|
|
|
|