{
  "apiVersion": 1,
  "identityFields": [],
  "id": "tencent",
  "name": "Tencent Video",
  "locales": {
    "zh-CN": {
      "name": "腾讯视频",
      "cookieSet.title": "访问腾讯视频以设置 Cookie"
    }
  },
  "version": "0.5.0",
  "hosts": ["pbaccess.video.qq.com", "dm.video.qq.com"],
  "urlMatch": [
    {
      "host": "v.qq.com",
      "path": "^/x/cover/(?<cid>[^/]+)/(?<vid>[^/]+)\\.html"
    }
  ],
  "search": {
    "inputs": ["q"],
    "steps": [
      {
        "type": "http",
        "id": "search",
        "request": {
          "method": "POST",
          "url": "'https://pbaccess.video.qq.com/trpc.videosearch.mobile_search.MultiTerminalSearch/MbSearch?vplatform=2'",
          "headers": { "Content-Type": "'application/json'" },
          "body": "{ 'version': '25071701', 'clientType': 1, 'filterValue': '', 'uuid': '0379274D-05A0-4EB6-A89C-878C9A460426', 'query': q, 'retry': 0, 'pagenum': 0, 'isPrefetch': true, 'pagesize': 30, 'queryFrom': 0, 'searchDatakey': '', 'transInfo': '', 'isneedQc': true, 'preQid': '', 'adClientInfo': '', 'extraInfo': { 'multi_terminal_pc': '1', 'themeType': '1', 'sugRelatedIds': '{}', 'appVersion': '' } }",
          "rewriteHeaders": {
            "Origin": "'https://v.qq.com'",
            "Referer": "'https://v.qq.com/'"
          }
        }
      },
      {
        "type": "assign",
        "id": "picked",
        "values": {
          "items": "$exists(search.data.areaBoxList[boxId = 'MainNeed']) ? search.data.areaBoxList[boxId = 'MainNeed'].itemList : search.data.normalList.itemList"
        }
      }
    ],
    "output": "[picked.items[videoInfo.episodeSites and $count(videoInfo.episodeSites) > 0].{ 'providerIds': { 'cid': doc.id }, 'indexedId': doc.id, 'title': videoInfo.title, 'type': videoInfo.typeName, 'typeDescription': videoInfo.typeName, 'imageUrl': videoInfo.imgUrl, 'episodeCount': videoInfo.episodeSites[0].totalEpisode, 'year': videoInfo.year > 0 ? videoInfo.year : undefined }]"
  },
  "episodes": {
    "inputs": ["cid"],
    "steps": [
      {
        "type": "forEach",
        "id": "pages",
        "in": "$range(0, 5)",
        "as": "page",
        "request": {
          "method": "POST",
          "url": "'https://pbaccess.video.qq.com/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=3000010&vversion_name=8.2.96&vversion_platform=2'",
          "headers": { "Content-Type": "'application/json'" },
          "body": "{ 'has_cache': 1, 'pageParams': { 'cid': $string(cid), 'lid': '0', 'vid': '', 'req_from': 'web_mobile', 'page_type': 'detail_operation', 'page_id': 'vsite_episode_list', 'id_type': '1', 'page_size': '100', 'page_context': 'episode_begin=' & $string(page * 100 + 1) & '&episode_end=' & $string((page + 1) * 100) & '&episode_step=100' } }",
          "rewriteHeaders": {
            "Origin": "'https://v.qq.com'",
            "Referer": "'https://v.qq.com/'"
          }
        },
        "collect": "[data.module_list_datas[0].module_datas[0].item_data_lists.item_datas[item_params.is_trailer != '1'].item_params]",
        "breakOn": "$count($) < 100",
        "throttleMs": 100
      }
    ],
    "output": "[pages.{ 'providerIds': { 'vid': vid, 'cid': cid }, 'indexedId': vid, 'title': play_title, 'episodeNumber': $match(title, /^\\d+$/) ? $number(title) : (title and title != '' ? title : undefined), 'alternativeTitle': union_title and union_title != '' ? [union_title] : undefined, 'imageUrl': image_url }]"
  },
  "danmaku": {
    "inputs": ["vid"],
    "steps": [
      {
        "type": "http",
        "id": "base",
        "request": {
          "method": "GET",
          "url": "'https://dm.video.qq.com/barrage/base/' & vid",
          "rewriteHeaders": {
            "Origin": "'https://v.qq.com'",
            "Referer": "'https://v.qq.com/'"
          }
        }
      },
      {
        "type": "assign",
        "id": "segmentNames",
        "values": {
          "names": "[base.segment_index.*.segment_name]"
        }
      },
      {
        "type": "forEach",
        "id": "segments",
        "in": "segmentNames.names",
        "as": "segName",
        "concurrency": 4,
        "throttleMs": 100,
        "request": {
          "method": "GET",
          "url": "'https://dm.video.qq.com/barrage/segment/' & vid & '/' & segName",
          "rewriteHeaders": {
            "Origin": "'https://v.qq.com'",
            "Referer": "'https://v.qq.com/'"
          }
        },
        "collect": "barrage_list"
      }
    ],
    "output": "[segments]",
    "map": "($s := content_style and content_style != '' ? $jsonParse(content_style) : null; $g := $s.gradient_colors; $hex := $exists($g[0]) and $g[0] != '' ? $g[0] : $s.color; $color := $exists($hex) and $hex != '' ? $hexToInt($replace($hex, /^#/, '')) : 16777215; { 'p': $string($number(time_offset) / 1000) & ',1,' & $string($color) & ',' & (vuid ? $string(vuid) : ''), 'm': content })"
  },
  "cookieSet": {
    "url": "https://v.qq.com",
    "title": "Visit Tencent Video to set cookies"
  },
  "loginProbe": {
    "inputs": [],
    "steps": [
      {
        "type": "http",
        "id": "details",
        "request": {
          "method": "POST",
          "url": "'https://pbaccess.video.qq.com/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=3000010&vversion_name=8.2.96&vversion_platform=2'",
          "headers": { "Content-Type": "'application/json'" },
          "body": "{ 'has_cache': 1, 'pageParams': { 'cid': 'mzc00200xf3rir6', 'lid': '0', 'vid': 'i0046sewh4r', 'req_from': 'web_mobile', 'page_type': 'detail_operation', 'page_id': 'detail_page_introduction' } }",
          "rewriteHeaders": {
            "Origin": "'https://v.qq.com'",
            "Referer": "'https://v.qq.com/'"
          }
        }
      }
    ],
    "output": "details.ret = 0"
  },
  "parseUrl": {
    "inputs": [],
    "steps": [
      {
        "type": "http",
        "id": "details",
        "request": {
          "method": "POST",
          "url": "'https://pbaccess.video.qq.com/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=3000010&vversion_name=8.2.96&vversion_platform=2'",
          "headers": { "Content-Type": "'application/json'" },
          "body": "{ 'has_cache': 1, 'pageParams': { 'cid': cid, 'lid': '0', 'vid': vid, 'req_from': 'web_mobile', 'page_type': 'detail_operation', 'page_id': 'detail_page_introduction' } }",
          "rewriteHeaders": {
            "Origin": "'https://v.qq.com'",
            "Referer": "'https://v.qq.com/'"
          }
        }
      },
      {
        "type": "forEach",
        "id": "pages",
        "in": "$range(0, 5)",
        "as": "page",
        "request": {
          "method": "POST",
          "url": "'https://pbaccess.video.qq.com/trpc.universal_backend_service.page_server_rpc.PageServer/GetPageData?video_appid=3000010&vversion_name=8.2.96&vversion_platform=2'",
          "headers": { "Content-Type": "'application/json'" },
          "body": "{ 'has_cache': 1, 'pageParams': { 'cid': cid, 'lid': '0', 'vid': '', 'req_from': 'web_mobile', 'page_type': 'detail_operation', 'page_id': 'vsite_episode_list', 'id_type': '1', 'page_size': '100', 'page_context': 'episode_begin=' & $string(page * 100 + 1) & '&episode_end=' & $string((page + 1) * 100) & '&episode_step=100' } }",
          "rewriteHeaders": {
            "Origin": "'https://v.qq.com'",
            "Referer": "'https://v.qq.com/'"
          }
        },
        "collect": "[data.module_list_datas[0].module_datas[0].item_data_lists.item_datas[item_params.is_trailer != '1'].item_params]",
        "breakOn": "$count($) < 100",
        "throttleMs": 100
      },
      {
        "type": "assign",
        "id": "picked",
        "values": {
          "season": "details.data.module_list_datas[0].module_datas[0].item_data_lists.item_datas[0]",
          "ep": "($v := vid; pages[vid = $v])"
        }
      }
    ],
    "output": "{ 'seasonInsert': { 'providerIds': { 'cid': picked.season.item_params.`report.cid` }, 'indexedId': picked.season.item_params.`report.cid`, 'title': picked.season.item_params.title, 'type': $string(picked.season.item_type), 'imageUrl': picked.season.item_params.new_pic_vt, 'episodeCount': picked.season.item_params.episode_all }, 'episodeMeta': $exists(picked.ep) ? { 'providerIds': { 'vid': picked.ep.vid }, 'indexedId': picked.ep.vid, 'title': picked.ep.play_title, 'episodeNumber': $match(picked.ep.title, /^\\d+$/) ? $number(picked.ep.title) : (picked.ep.title and picked.ep.title != '' ? picked.ep.title : undefined), 'alternativeTitle': picked.ep.union_title and picked.ep.union_title != '' ? [picked.ep.union_title] : undefined, 'imageUrl': picked.ep.image_url } : undefined }"
  }
}
