计算B站分P视频在自己所看P数的视频剩余时长

获取分P视频剩余时间

2023-02-27 يوللانغان نەشرى. ئەڭ يېڭى نەشرىنى كۆرۈش.

  1. // ==UserScript==
  2. // @name 计算B站分P视频在自己所看P数的视频剩余时长
  3. // @namespace YuuRa1n
  4. // @version 0.5.2
  5. // @description 获取分P视频剩余时间
  6. // @author YuuRa1n
  7. // @match https://www.bilibili.com/video/*
  8. // @grant none
  9. // @require https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js
  10. // @license MIT
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. setTimeout(function(){
  15. let html = '<span><span class="item-text sumtime"></span></span>';
  16. $(".video-title").after(html);
  17. if($("div.video-data-list").length > 0){
  18. console.log("新版本");
  19. html = '<span><span class="item-text lefttime"></span></span>';
  20. $("div.video-data-list").append(html);
  21. }else if($("div.video-data").length > 0){
  22. console.log("旧版本");
  23. html = '<span><span class="dm lefttime"></span></span>';
  24. $("div.video-data").append('&nbsp&nbsp&nbsp' + html);
  25. }
  26. calc();
  27. }, 2000);
  28.  
  29. $("ul.list-box li").on("click", function(){
  30. calc();
  31. })
  32. })();
  33.  
  34.  
  35. function calc(){
  36. //获取当前播放视频位置(第几条)和总视频数
  37. const page = $(".cur-page").text();
  38. const pageNum = page.split("/");
  39. const curPageNum = parseInt(pageNum[0].substring(1),10);
  40. let hourList = [];
  41. let minList = [];
  42. let secList = [];
  43. $("div.duration").each(function(){
  44. const time = $(this).text();
  45. const list = time.split(":");
  46. if(list.length == 3){
  47. hourList.push(list[0]);
  48. minList.push(list[1]);
  49. secList.push(list[2]);
  50. }else{
  51. hourList.push(0);
  52. minList.push(list[0]);
  53. secList.push(list[1]);
  54. }
  55. })
  56.  
  57. //计算视频总时长
  58. const sumTime = calcLeftTime(hourList, minList, secList)
  59.  
  60. $("span.sumtime").html("视频总时长:" + sumTime);
  61.  
  62. //计算视频剩余时间
  63. const subHourList = hourList.slice(curPageNum - 1);
  64. const subminList = minList.slice(curPageNum - 1);
  65. const subsecList = secList.slice(curPageNum - 1);
  66. const leftTime = calcLeftTime(subHourList, subminList, subsecList);
  67. $("span.lefttime").html("剩余时长:" + leftTime);
  68. }
  69.  
  70. //给定时间数组和秒数组,数组长度必须相等,计算剩余时间
  71. function calcLeftTime(hourList, minList, secList){
  72. if(minList.length != secList.length){
  73. return "计算失败";
  74. }else{
  75. let hour = listsum(hourList);
  76. let min = listsum(minList);
  77. let sec = listsum(secList);
  78. let m = sec / 60;
  79.  
  80. let s = sec % 60;
  81.  
  82. min += parseInt(m,10);
  83.  
  84. let h = parseInt(min/60,10) + hour;
  85. m = min%60;
  86.  
  87. if(m<10)
  88. m="0"+ m;
  89. if(s<10)
  90. s="0"+ s;
  91. return h+":"+m+":"+s;
  92. }
  93. }
  94.  
  95. function listsum(list){
  96. let sum = 0;
  97. for(let i =0;i<list.length;i++ ){
  98. sum += parseInt(list[i],10)
  99. }
  100. return sum;
  101. }