Tumblr Videos to HD Redirector and Dashboard Download Button

Automatically promotes Tumblr video links to raw HD versions, and displays a download button below videos on the dashboard

当前为 2017-09-01 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         Tumblr Videos to HD Redirector and Dashboard Download Button
// @namespace    TumblrVideoReszr
// @description  Automatically promotes Tumblr video links to raw HD versions, and displays a download button below videos on the dashboard
// @version      0.3
// @author       Kai Krause <[email protected]>
// @match        http://*.tumblr.com/*
// @match        https://*.tumblr.com/*
// @run-at       document-start
// ==/UserScript==

// Video URL Patterns
// https://vt.media.tumblr.com/tumblr_ID_NUM.mp4
// https://vtt.tumblr.com/tumblr_ID_NUM.mp4
// https://vt.tumblr.com/tumblr_ID_NUM.mp4

function redirectToHD () {
	var loc = location.toString();
	
	// Check that the URL is a ~.mp4
	if (!loc.endsWith('.mp4')) return;
	
	var lowQuality = /[$_]\d*.mp4$/;
	// Do not redirect if already HD
	if (!loc.match(lowQuality)) return;
	// Change to HD
	loc = loc.replace(lowQuality, '.mp4');

	// If the URL is HTTP, change it to HTTPS
	if (!loc.startsWith('https://')) {
		loc = loc.replace(/^http/, 'https');
	}

	// Redirect to the HD video
	window.location = loc;
}
redirectToHD();

function createDownloadButtons () {
	// Get all tumblr posts on dashboard page
	var posts = document.getElementsByClassName('post_media')
	
	// Get all tumblr posts on a blog - Good luck, they're all iframes.
	/*
	if (posts[0] == null) {
		posts = document.getElementsByClassName('video-wrapper');
	}
	*/
	
	for (var i = 0; i < posts.length; ++i) {
		var videos = posts[i].getElementsByTagName('video');
		if (videos[0] != null) {
			for (var a = 0; a < videos.length; ++a) {
				// if the button already exists, ignore this post
				if (posts[i].querySelector('#videoDownloadButton_kk')) break;
				// Create the button style
				var downloadButton = document.createElement('a');
				downloadButton.innerText = 'Download This Video (HD)';
				downloadButton.style.display = 'block';
				downloadButton.style.width = '100%';
				downloadButton.style.height = '100%';
				downloadButton.style.padding = '4px';
				downloadButton.style.border = '2px solid #2F3D51';
				downloadButton.style.backgroundColor = '#2F3D51';
				downloadButton.style.color = '#979EA8';
				downloadButton.style.fontWeight = '600';
				downloadButton.style.textAlign = 'center';
				// Convert the video preview image URL to a video URL
				var videoURL = videos[a].poster;
				console.log('url is: ' + videoURL);
				videoURL = videoURL.replace(/\d+(?=\.media)/, 'vt');
				videoURL = videoURL.replace(/[^_]*$/, '');
				videoURL = videoURL.replace(/_$/, '.mp4');
				// Set and create the download button
				downloadButton.setAttribute('id', 'videoDownloadButton_kk');
				downloadButton.setAttribute('href', videoURL);
				posts[i].appendChild(downloadButton);
			}
		}
	}
}
setTimeout(createDownloadButtons,1200);
document.addEventListener('scroll', createDownloadButtons);