Video Download Button

This script adds a download button on many video sites.

目前为 2016-06-26 提交的版本。查看 最新版本

// ==UserScript==
// @name        Video Download Button
// @namespace   VDBMB
// @author      MegaByte
// @description This script adds a download button on many video sites.
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
// @run-at 		document-end
// @noframes
// @include     http*://*streamcloud.eu/*
// @include     http*://*powerwatch.pw/*
// @include     http*://*vivo.sx/*
// @include     http*://*shared.sx/*
// @include     http*://*youtube.com/watch?v=*
// @version     1.2
// @grant       GM_addStyle
// ==/UserScript==


function main() {
  var site = window.location.href || document.URL;

  if(site.includes("streamcloud.eu")) streamcloud();
  else if(site.includes("powerwatch.pw")) powerwatch();
  else if(site.includes("vivo.sx")) vivo();
  else if(site.includes("shared.sx")) shared();
  else if(site.includes("youtube.com")) youtube();
}

function streamcloud() {
  if($("#player_code").length === 0) return;
	var url = searchInScripts("file:\\s?\"https?:\\/\\/.+?\\.mp4\"", "http", ".mp4");
	if(url !== null) 
		$(".container-fluid ul.nav").prepend("<li>" + button(url) + "</li>");
}

function powerwatch() {
  if($("#vplayer").length === 0) return;
	var url = searchInScripts("file:\\s?\"https?:\\/\\/.+?\\.mp4\"", "http", ".mp4");
	if(url !== null) {
		$("h5.h4-fine").html("<span class='head'>"+$("h5.h4-fine").html()+"</span><span class='down'>" + button(url) + "</span>")
		GM_addStyle("h5.h4-fine { display: flex; } h5.h4-fine .head { flex-grow: 1; } h5.h4-fine .down { flex-grow: 0; }");
	}
}

function vivo() {
  var e = $(".stream-content");
  if(e.length === 0) return;
  var url = e.attr("data-url");
  if(typeof url === "undefined") return;
  $(".light-switch.btn").parent().prepend("<div class='light-switch btn btn-info download'>" + button(url) + "</div>");
  GM_addStyle(".download.light-switch { margin-right: 15px; }  .download.light-switch a { text-decoration: none; color: white; }");
}

function shared() {
  var e = $(".stream-content");
  if(e.length === 0) return;
  var url = e.attr("data-url");
  if(typeof url === "undefined") return;
  $(".light-switch").parent().prepend("<div class='download'>" + button(url) + "</div>");
  GM_addStyle(".addthis_toolbox { width: unset !important; }  .download { position: relative; background-color: #FF6550; color: #FFF; float: right; font-size: 13px; font-weight: 700; height: 32px; line-height: 32px; margin: 0 0 0 10px; padding: 0 15px; width: auto; cursor: pointer; -webkit-transition: all .35s ease-in; -moz-transition: all .35s ease-in; -o-transition: all .35s ease-in; transition: all .35s ease-in; opacity: 1; z-index: 300; }  .download a { text-decoration: none; color: white;}");
}

function youtube() {
  $("script").each(function() {
    var cont = decodeURI($(this).html());
    if(!cont.includes("\"adaptive_fmts\":")) return;
    cont = cont.replace(",", "\\u0026");
    var data = cont.split("\\u0026");
    var format = [];
    var vid = {};
    for(var dat of data) {
      var tmp = dat.split("=");
      var name = tmp[0];
      var val = tmp[1];
      if("|type|quality_label|url|fps|".includes("|"+name+"|")) {
        if(name === "url" || name === "type") val = decodeURIComponent(val);
        if(name === "type") val = val.substring(0, val.indexOf(";"));
        if(name in vid) {
          if(("url" in vid) && ("type" in vid)) format.push(vid);
          vid = {};
        } else vid[name] = val;
      }
    }
    for(var t of format) console.log(t);
    var links = "";
    for(var t of format) links += "<li><span loop='0' class='yt-ui-menu-item'><a class='download-link' download href='" + t["url"] + "'>" + t["type"] + "|" + t["quality_label"] + "</a></span></a></li>";
    $("#watch8-secondary-actions").prepend("<button title='Download' aria-expanded='false' aria-pressed='false' aria-labelledby='yt-uix-tooltip25-arialabel' role='button' type='button' data-tooltip-text='Download' class='yt-uix-button  yt-uix-button-size-default yt-uix-button-opacity yt-uix-tooltip' id='download-video-button'><span><span class='yt-uix-button-icon-wrapper'><img style='width:20px;height:20px;background-size:20px 20px;background-repeat:no-repeat;background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABG0lEQVRYR+2W0Q3CMAxE2wkYAdiEEWADmIxuACMwCmzABpCTEmRSO7YTQX+ChECV43t2nF7GYeHPuLD+0AKwC/DnWMAp/N5qimkBuAfBdRTF/+2/AV6ZYFUxVYuicAfoHegd6B3oHfhZB+ByF+JyV8FkrAB74pqH3DU5L3iGoBURhdVODIQF4EjEkWLmmhYALOQgNIBcHHke4buhxXAAaFnaAhqbQ5QAOHHkwhZ8balkx1ICCiEBWNZ+CivdB7REHIC2ZjZK2oWklDDdB1NSdCd/Js2PqQMpSIKYVcM8kE6QCwDBNRCqOBJrW0CL8kCYxL0A1k6YxWsANAiXeC2ABOEWbwHAWrwxpzgkmA/JtIqnxTOElmPnjlkc4A3FykAhA42AxwAAAABJRU5ErkJggg==);' class='yt-uix-button-icon' src='//s.ytimg.com/yt/img/pixel-vfl3z5WfW.gif'></span><span class='yt-uix-button-content'>Download </span><ul class='yt-uix-button-menu hid' style='min-width: 114px; left: 40px; top: 501px; display: none;'>" + links + "</ul></span></button>");
    GM_addStyle(".download-link { text-decoration: none; color: inherit; } .download-link:hover { text-decoration: none; }");
  });
}

function searchInScripts(patt, start, end) {
  var url = null;
	$("body script").each(function() {
    var regex = new RegExp(patt);
		var out = regex.exec($(this).html());
		if(typeof out !== "undefined" && out !== "" && out !== null) {
      if(typeof out !== "string") out = out[0];
      var s = out.indexOf(start);
      var e = out.lastIndexOf(end);
      if( s!==-1 && e!==-1 ) url = out.substring(s, e);
      return false;
    }
	});
  return url;
}

function button(url) {
  return "<a href='" + url + "' download target='_blank'>Download</a>";
}

main();

QingJ © 2025

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