Wikitube - YouTube on Wikipedia

Adds relevant YouTube videos to Wikipedia.

目前为 2019-05-22 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Wikitube - YouTube on Wikipedia
  3. // @namespace WYOWW
  4. // @version 3.3.5
  5. // @description Adds relevant YouTube videos to Wikipedia.
  6. // @include http*://*.wikipedia.org/wiki*
  7. // @require http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
  8. // @author Mark Dunne | http://markdunne.github.io/ | https://chrome.google.com/webstore/detail/wikitube/aneddidibfifdpbeppmpoackniodpekj
  9. // @developer vinc, drhouse
  10. // @icon https://en.wikipedia.org/static/favicon/wikipedia.ico
  11. // ==/UserScript==
  12.  
  13. $(document).ready(function () {
  14.  
  15. const YOUTUBE_DATA_API_CREDENTIAL_1 = 'AIzaSyC1ucHysupgOH1JQmPaGqfFGoO1QCCOhQA';
  16. const YOUTUBE_DATA_API_CREDENTIAL_BAK = 'AIzaSyCRziwj9Gem35VEPYva9oHBvoLXKPpYI-o';
  17.  
  18. // pages of wikipedia which should disable Wikitube
  19. var banned_paths = [
  20. '/wiki/Main_Page',
  21. ];
  22. var banned_paths_prefix = [
  23. '/wiki/Help:',
  24. '/wiki/Wikipedia:',
  25. '/wiki/User:',
  26. '/wiki/Special:'
  27. ];
  28.  
  29. function addGlobalStyle(css) {
  30. var head, style;
  31. head = document.getElementsByTagName('head')[0];
  32. if (!head) { return; }
  33. style = document.createElement('style');
  34. style.type = 'text/css';
  35. style.innerHTML = css;
  36. head.appendChild(style);
  37. }
  38.  
  39. addGlobalStyle('#wikitube_container { padding-bottom: 30px; margin-top: -15px; margin-bottom: -10px; overflow-y:hidden; white-space: nowrap; }');
  40. addGlobalStyle('#wikitube_container::-webkit-scrollbar { width: 0px; background: transparent; }');
  41. addGlobalStyle('#wikitube_container div { width: auto; height: 200px; margin-right: 5px; display: inline-block; box-shadow: 0 0 5px #888; }');
  42. addGlobalStyle('#wikitube_container .plusBtn { width: 100px; text-align: center; border-radius: 5px; background-color: rgb(192, 62, 62); background-position: center; background-repeat: no-repeat; cursor: pointer;}');
  43. addGlobalStyle('#wikitube_container .plusBtn:hover { background-color: rgb(192, 92, 92); }');
  44.  
  45. var allow_path = function(path){
  46. console.log(path);
  47. for (var i = 0; i < banned_paths_prefix.length; i++){
  48. if(path.startsWith(banned_paths_prefix[i])){
  49. return false;
  50. }
  51. }
  52. for (var i = 0; i < banned_paths.length; i++) {
  53. if(path == banned_paths[i]){
  54. return false;
  55. }
  56. }
  57. return true;
  58. }
  59.  
  60. var title_text;
  61. var num_videos_to_load;
  62. var num_videos_loaded = 0;
  63. var more_videos_button = $('<div class="plusBtn" title="Load more videos!"></div>');
  64. var container = $('<div id="wikitube_container"></div>');
  65.  
  66. var first_load = function(){
  67. container.insertBefore('#mw-content-text');
  68. container.append(more_videos_button);
  69.  
  70. var plusImgURL = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtv\
  71. UhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcA\
  72. YCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ\
  73. 5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X\
  74. 48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL'+'/'+'/wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAA\
  75. RKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyU\
  76. T3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQ\
  77. SiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhh\
  78. WDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R\
  79. 27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBts\
  80. Mzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2q\
  81. bcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+V\
  82. MGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga\
  83. 0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMD\
  84. UzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQF\
  85. r6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7\
  86. P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EH\
  87. Th0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fy\
  88. nQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAMZQTFRFERER////ERERE\
  89. RERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER\
  90. ERERERERERERERERERERERERERERERERERERERERERERlvLzngAAAEF0Uk5TAAABAgMEBQYHCAkKCwwNDg8QEhUXGBkaHR4gISMkJSYpKy4xMjM0Nzg7PUFGR0hNZWZnr7fHyNrb5ufo8vP19v4deCuTAAACGklEQVRYw+2XWXOiQBSFnV6jgmy2gqC4oSgGY3RMJjEL//9PxQAd\
  91. DTFTtD0PTlXO65WvKLvv4ZzKL0lVLgJQOS0AIMKEEIwgAKd/8jcAgJhWFU03dE2pUQyBIAAgWtetltNxO07L0usUASEAQFcNy/aHk2k4nQx922pcnSJ8C9g/r7Hu6GZ995Q83a1Xoy7TThG+BxC16cfbhOt37DdVIgCAVdNdPCQH/Vm4ZhWWByCFDTbJsTYDpqDyAKzZwcsnwEtga\
  92. 7g8gBhumHxW6BqkPICa3qwAmHkmFQH05gXAvPcDuHxAZj80l8r6UQEQ9ZmaTw8edQAARPb2Y5i5mBfEBUAceCyfGppSJelyfwD2+6+azHa9XqZ+EC0LgGUU9LOh59rMVFN74IB3/2i6gyCczTNF8fILYBlH2XAWBgO3mRoMB0DaYP5i85yU1PNm4bMGhRwAcN3qXj8mAnq87lp1DDi\
  93. A6s5omwhpO7J1ygGwZvmrRFAr36rBHICU1nAtClgPWwrKAVhzJveigPuJo+EcQPTOdCcK2E07OuGAvQO+igJe303yX72B9H+AlPY5p9D+OIWz7sHt0T047yY6h5uY7kIssQt8G0ufxK6wjdwPxmX9YFz0A2lHkvdEeVf++bRdJEAyZEnHvK9BczcWCprSUTcN28cG8SAYtotxfysa9/\
  94. PCsTq7cEhXHl662meXrqz21SRqn1Dx/M/L9xutmnjEud3T6wAAAABJRU5ErkJggg==';
  95.  
  96. more_videos_button.css('background-image', 'url(' + plusImgURL + ')');
  97.  
  98. more_videos_button.click(function(){
  99. load_new_videos(false);
  100. });
  101.  
  102. $('iframe').ready(function(){
  103. vinc_set_horiz_scroll();
  104. });
  105. }
  106.  
  107. var load_new_videos = function(is_first_load){
  108. var url = 'https://www.googleapis.com/youtube/v3/search?part=snippet&q='+title_text+'&key=' + YOUTUBE_DATA_API_CREDENTIAL_1 + '&maxResults='+(num_videos_loaded+num_videos_to_load);
  109. $.getJSON(url, function(response){
  110. if(response['items'].length > 0){
  111. if (is_first_load) {
  112. first_load();
  113. }
  114. var new_videos = videos = response['items'];
  115. new_videos = new_videos.slice(num_videos_loaded);
  116. num_videos_loaded += num_videos_to_load;
  117. add_videos_to_page(new_videos);
  118. }
  119. });
  120. }
  121.  
  122. var add_videos_to_page = function(new_videos){
  123. for (var i = 0; i < new_videos.length; i++) {
  124. video = new_videos[i];
  125. var videoHtml = '<div class="vinc_yt"><iframe width="350" height="200" frameborder="0" allowfullscreen src="//www.youtube.com/embed/'+video['id']['videoId']+'"></iframe></div>';
  126. more_videos_button.before(videoHtml);
  127. };
  128. }
  129.  
  130. var test_func = function(){
  131. url = 'https://www.googleapis.com/youtube/v3/search?part=snippet&q=memes&key=' + YOUTUBE_DATA_API_CREDENTIAL_1;
  132. $.getJSON(url, function(response){
  133. console.log(response);
  134. })
  135. }
  136.  
  137. var vinc_set_horiz_scroll = function(){
  138. $('#wikitube_container').on('mousewheel DOMMouseScroll', function(e){
  139. var delt = null;
  140.  
  141. if (e.type == 'mousewheel') {
  142. delt = (e.originalEvent.wheelDelta * -1);
  143. }
  144. else if (e.type == 'DOMMouseScroll') {
  145. delt = 40 * e.originalEvent.detail;
  146. }
  147.  
  148. if (delt) {
  149. e.preventDefault();
  150. $(this).scrollLeft(delt + $(this).scrollLeft());
  151. }
  152. });
  153. }
  154.  
  155. // main code
  156. if(allow_path(window.location.pathname)){
  157. title_text = document.getElementById('firstHeading').innerText;
  158. num_videos_to_load = Math.floor($('#bodyContent').width() / 350) + 1; //video width = 350px
  159. load_new_videos(true);
  160. }
  161.  
  162. });

QingJ © 2025

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