腾讯视频下载

下载腾讯视频

  1. // ==UserScript==
  2. // @name 腾讯视频下载
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1.14
  5. // @description 下载腾讯视频
  6. // @author feyaha9619
  7. // @license MIT License
  8. // @run-at document-start
  9. // @grant GM_download
  10. // @include *://v.qq.com/*
  11. // @require https://gf.qytechs.cn/scripts/440006-mono/code/mono.js?version=1021983
  12. // ==/UserScript==
  13.  
  14. (function () {
  15. var mono = window['mono-descargar'];
  16. var $ = mono.jQuery;
  17. var md5 = mono.md5;
  18. var onRequest = mono.onRequest;
  19. var idKey = 'mono-dsg-id';
  20.  
  21. var metaCache = {}
  22.  
  23. onRequest(({url, resp, _body, method}) => {
  24. if (!resp || typeof url !== 'string' || !(url.indexOf('qq.com/proxyhttp') !== -1 && resp.indexOf('vinfo') !== -1)) return;
  25. var data = typeof resp == "string" ? JSON.parse(resp) : resp;
  26. var vinfo = JSON.parse(data.vinfo);
  27. console.log('vinfo', vinfo)
  28. vinfo.vl.vi.forEach((item) => {
  29. var url = item.ul.ui[item.ul.ui.length-1].url;
  30. var baseUrl = url.split('?')[0]
  31. if (item?.ul?.m3u8) {
  32. metaCache.url = baseUrl;
  33. metaCache.m3u8Data = item.ul.m3u8;
  34. }
  35. });
  36. });
  37.  
  38. var getContainer = (selector, selClass) => {
  39. var $el = null;
  40. if (selector) $el = $(selector)
  41. if ($el.length > 0 && selClass) {
  42. var ps = $el.parentsUntil(selClass);
  43. if (ps.length > 0) $el = $(ps[ps.length - 1])
  44. }
  45. if ($el.length <= 0) return null;
  46. return $el[0];
  47. }
  48.  
  49. var getItemByMeta = (meta, selector='', selClass='') => {
  50. var id = `tx-${md5(meta.m3u8Data)}`
  51. if ($(`[${idKey}=${id}]`).length > 0) return {item:null, exist: true};
  52. var container = getContainer(selector, selClass)
  53. if (!meta.m3u8Data) return {item:null, exist: false}
  54. return {item:{ id, url: meta.url, container, meta: meta }, exist: false}
  55. }
  56.  
  57. var cc = () => {
  58. var items = [];
  59. var selector = `.player__container`;
  60. var sel = '.container-main__left';
  61.  
  62. var {item, exist} = getItemByMeta(metaCache, selector, sel)
  63. if (item && !exist) {
  64. items.push(item);
  65. } else if (!item && !exist) {
  66. var container = getContainer(selector, sel)
  67. if (!container) return []
  68. var url = $("video").attr("src");
  69. var id = `tx-${md5(url)}`;
  70. if (url && url.startsWith('http') && ($(`[${idKey}=${id}]`).length <= 0)) items.push({id, container, url})
  71. }
  72. return items
  73. }
  74.  
  75. var parser = async function () {
  76. var url = window.location.href;
  77. if ((url.indexOf('/x/cover/') !== -1 || url.indexOf('/x/page/') !== -1)) {
  78. return cc();
  79. } else {
  80. return [];
  81. }
  82. }
  83.  
  84. if (mono?.init) mono.init({ parser });
  85. })()

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址