bilibiliGKD

自动播放B站某一分区视频

  1. // ==UserScript==
  2. // @name bilibiliGKD
  3. // @namespace bilibili_gkd
  4. // @version 0.1
  5. // @description 自动播放B站某一分区视频
  6. // @author Jonesn
  7. // @match http://*/*
  8. // @icon https://static.hdslb.com/images/favicon.ico
  9. // @include http://www.bilibili.com/video/BV*
  10. // @include https://www.bilibili.com/video/BV*
  11. // @include https://www.bilibili.com/video/av*
  12. // @include http://bangumi.bilibili.com/anime/v/*
  13. // @include https://bangumi.bilibili.com/anime/v/*
  14. // @include https://www.bilibili.com/bangumi/play/*
  15. // @run-at document-start
  16. // @grant GM_setValue
  17. // @grant GM_getValue
  18. // @grant GM_deleteValue
  19. // @license GPLv3
  20. // ==/UserScript==
  21. (function() {
  22. var keyword=escape(getUrlParam('gkd'));
  23. var channel={"%E5%AE%85%E8%88%9E": 20,"%E8%A1%97%E8%88%9E": 198,"%E6%98%8E%E6%98%9F%E8%88%9E%E8%B9%88":199,"chi%E5%9B%BD%E9%A3%8E%E8%88%9E%E8%B9%88na":200,"%E8%88%9E%E8%B9%88%E7%BB%BC%E5%90%88":154,"%E8%88%9E%E8%B9%88%E6%95%99%E7%A8%8B":156,"mad":24,"mmd":25,"%E6%89%8B%E4%B9%A6":47,"%E6%89%8B%E5%8A%9E":210,"%E7%89%B9%E6%91%84":86,"%E5%8A%A8%E6%BC%AB%E6%9D%82%E8%B0%88":253,"%E5%8A%A8%E6%BC%AB%E7%BB%BC%E5%90%88":27,"%E9%AC%BC%E7%95%9C%E8%B0%83%E6%95%99":22,"%E9%9F%B3mad":26,"vocaloid":126,"%E9%AC%BC%E7%95%9C%E5%89%A7%E5%9C%BA":216};
  24. var gkd = channel[keyword];
  25. if(gkd!=null)
  26. {
  27. NextVideo(gkd);
  28. }
  29. if ( getUrlParam('channel') != null) {
  30. window.addEventListener('load', function() {
  31. console.log("load success");
  32. this.$ = unsafeWindow.jQuery;
  33. let elementNames = ["bpx-player-ctrl-web-enter", "bilibili-player-iconfont-web-fullscreen-off", "player_pagefullscreen_player", "squirtle-pagefullscreen-inactive"];
  34. for (var i = 0; i < elementNames.length; i++) {
  35. waitElement(elementNames[i]);
  36. }
  37. });
  38. var duration = getUrlParam('time');
  39. setInterval(function() {
  40. NextVideo(getUrlParam('channel'));
  41. }, 1000 * duration + 500);
  42. }
  43. function NextVideo(gkd) {
  44. var response = JSON.parse(httpGet('https://api.bilibili.com/x/web-interface/dynamic/region?ps=1&pn=2&rid='+gkd));
  45. location.href = 'https://www.bilibili.com/video/' + response.data.archives[0].bvid + '?channel='+gkd+'&time=' + response.data.archives[0].duration;
  46. }
  47. function httpGet(theUrl) {
  48. var xmlHttp = new XMLHttpRequest();
  49. xmlHttp.open("GET", theUrl, false);
  50. xmlHttp.send(null);
  51. return xmlHttp.responseText;
  52. }
  53. function getUrlParam(name) {
  54. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
  55. var r = window.location.search.substr(1)
  56. .match(reg);
  57. if (r != null) return unescape(r[2]);
  58. return null;
  59. }
  60. function waitElement(elementName) {
  61. this.$ = unsafeWindow.jQuery;
  62. var _times = 20,
  63. _interval = 1000,
  64. _self = document.getElementsByClassName(elementName)[0],
  65. _iIntervalID;
  66. if (_self != undefined) {
  67. _self.click();
  68. } else {
  69. _iIntervalID = setInterval(function() {
  70. if (!_times) {
  71. clearInterval(_iIntervalID);
  72. }
  73. _times <= 0 || _times--;
  74. _self = document.getElementsByClassName(elementName)[0];
  75. if (_self == undefined) {
  76. _self = document.getElementById(elementName);
  77. }
  78. if (_self != undefined) {
  79. _self.click();
  80. clearInterval(_iIntervalID);
  81. }
  82. }, _interval);
  83. }
  84. return this;
  85. }
  86. })();