tumblr video url

Get video url in dashboard or video blog page

  1. // ==UserScript==
  2. // @name tumblr video url
  3. // @name:zh-CN tumblr 视频链接
  4. // @namespace http://www.himysql.com/
  5. // @version 1.1.0
  6. // @create 2017-02-25
  7. // @description Get video url in dashboard or video blog page
  8. // @description:zh-CN 获取 tumblr 视频链接
  9. // @author leopku
  10. // @copyright 2017+, leopku
  11. // @license MIT License
  12. // @match *://www.tumblr.com/*
  13. // @match *://*.tumblr.com/*
  14. // @run-at document-end
  15. // @grant GM_registerMenuCommand
  16. // @grant GM_setClipboard
  17. // @require https://gf.qytechs.cn/scripts/27254-clipboard-js/code/clipboardjs.js?version=174357
  18. // ==/UserScript==
  19.  
  20. (function () {
  21. 'use strict';
  22. function convertPosterToVideo(poster) {
  23. var arr = poster.split('_', 2);
  24. var vid = arr[1];
  25. return 'https://vtt.tumblr.com/tumblr_' + vid + '.mp4';
  26. }
  27.  
  28. function copyURIToClipboard() {
  29. if (url) {
  30. GM_setClipboard(url);
  31. alert('视频链接已经在剪贴板中了');
  32. }
  33. else {
  34. alert('当前页面没有视频资源');
  35. }
  36. }
  37.  
  38. function insertElementAfterOther(newElement, targetElement) {
  39. var parent = targetElement.parentNode;
  40.  
  41. if (parent.lastChild === targetElement) {
  42. parent.appendChild(newElement);
  43. }
  44. else {
  45. parent.insertBefore(newElement, targetElement.nextSibling);
  46. }
  47. }
  48.  
  49. // eslint-disable-next-line no-unused-vars
  50. function insertPostBody(element) {
  51. var video = element.getElementsByTagName('video');
  52. var poster = video[0].getAttribute('poster');
  53. var postBody = document.createElement('p');
  54. postBody.setAttribute('class', 'post_body');
  55. postBody.appendChild(document.createTextNode(convertPosterToVideo(poster)));
  56. var postMedia = element.querySelectorAll('[class="post_media"]');
  57. insertElementAfterOther(postBody, postMedia[0]);
  58. }
  59.  
  60. function insertButton(element) {
  61. var video = element.getElementsByTagName('video');
  62. var poster = video[0].getAttribute('poster');
  63. var like = element.getElementsByClassName('like');
  64. var cb = document.createElement('div');
  65. cb.setAttribute('data-clipboard-text', convertPosterToVideo(poster));
  66. cb.setAttribute('class', 'post_control post-control-icon icon_queue');
  67. insertElementAfterOther(cb, like[0]);
  68. }
  69.  
  70. function parseVideo(elements) {
  71. for (var i = 0; i < elements.length; i++) {
  72. insertButton(elements[i]);
  73. }
  74. }
  75.  
  76. var clipboard = new Clipboard('[data-clipboard-text]'); // eslint-disable-line no-unused-vars
  77.  
  78. if (document.domain === 'www.tumblr.com') {
  79. // add download url for dynamic loaded videos
  80. document.addEventListener('DOMNodeInserted', function (evt) {
  81. if (evt.relatedNode.id === 'posts') {
  82. var el = evt.srcElement.getElementsByClassName('is_video');
  83. parseVideo(el);
  84. }
  85. }, false);
  86.  
  87. // add download url for first loaded videos
  88. var elements = document.getElementsByClassName('is_video');
  89. parseVideo(elements);
  90. }
  91. else {
  92. var ogImage = document.head.querySelector('[property="og:image"]').content;
  93. var url = convertPosterToVideo(ogImage);
  94. GM_registerMenuCommand('Get Tumblr video url', copyURIToClipboard);
  95. }
  96.  
  97. })();

QingJ © 2025

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