tencentDanmu.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * @File : tencentDanmu.js
  3. * @Author : jade
  4. * @Date : 2024/3/13 13:17
  5. * @Email : jadehh@1ive.com
  6. * @Software : Samples
  7. * @Desc :
  8. */
  9. import {DammuSpider} from "./danmuSpider.js";
  10. import {VodDetail} from "./vod.js";
  11. import * as Utils from "./utils.js";
  12. class TencentDammuSpider extends DammuSpider {
  13. constructor() {
  14. super()
  15. this.siteUrl = "https://v.qq.com"
  16. this.reconnectTimes = 0
  17. this.maxReconnectTimes = 5
  18. }
  19. getAppName() {
  20. return "腾讯视频"
  21. }
  22. async parseVodShortListFromDoc($) {
  23. let vodElements = $("[class=\"_infos\"]")
  24. let vod_list = []
  25. for (const vodElement of vodElements) {
  26. let vodDetail = new VodDetail()
  27. let titleElement = $(vodElement).find("[class=\"result_title\"]")
  28. let infoItemEvenElenet = $(vodElement).find("[class=\"info_item info_item_even\"]")
  29. let infoItemOddElement = $(vodElement).find("[class=\"info_item info_item_odd\"]")
  30. let descElement = $(vodElement).find("[class=\"info_item info_item_desc\"]")
  31. vodDetail.vod_name = $($(titleElement).find("[class=\"hl\"]")).text()
  32. vodDetail.vod_year = $($(titleElement).find("[class=\"sub\"]")).text().replaceAll("\n","").replaceAll("(","").replaceAll(")","").replaceAll("\t","").split("/").slice(-1)[0]
  33. vodDetail.type_name = $($(titleElement).find("[class=\"type\"]")).text()
  34. vodDetail.vod_director = $($($(infoItemEvenElenet).find("[class=\"content\"]")).find("span")).text()
  35. let actorList = $( $(infoItemOddElement.slice(-1)[0]).find("[class=\"content\"]")).find("a")
  36. let vodActorList = []
  37. for (const actorElement of actorList){
  38. vodActorList.push($(actorElement).text())
  39. }
  40. vodDetail.vod_actor = vodActorList.join(" * ")
  41. vodDetail.vod_content = $($(descElement).find("[class=\"desc_text\"]")[0]).text()
  42. let url = $(vodElement).find("a")[0].attribs.href
  43. if (url.indexOf("cover") > -1){
  44. let detail$ = await this.getHtml(url)
  45. let video_ids = JSON.parse(Utils.getStrByRegex(/"video_ids":(.*?),/,detail$.html()))
  46. vodDetail.vod_id = video_ids[0]
  47. vod_list.push(vodDetail)
  48. }
  49. }
  50. return vod_list
  51. }
  52. async search(wd) {
  53. await this.jadeLog.debug(`正在搜索:${wd}`, true)
  54. let searchUrl = this.siteUrl + `/x/search/?q=${wd}`
  55. let $ = await this.getHtml(searchUrl)
  56. return this.parseVodShortListFromDoc($)
  57. }
  58. parseDammu(id){
  59. }
  60. async getDammu(voddetail, episodeId) {
  61. let vod_list = await this.search(voddetail.vod_name)
  62. for (const searchVodDetail of vod_list){
  63. if (voddetail.vod_director === searchVodDetail.vod_director){
  64. await this.jadeLog.debug("搜索匹配成功",true)
  65. return
  66. }
  67. }
  68. await this.jadeLog.warning(`搜索匹配失败,原:${JSON.stringify(voddetail)},搜索:${JSON.stringify(vod_list)}`)
  69. return ""
  70. }
  71. }
  72. export {TencentDammuSpider}