Greasy Fork

Greasy Fork is available in English.

Twitter Video Download

Adds a button to download video from a tweet

目前为 2021-11-03 提交的版本。查看 最新版本

// ==UserScript==
// @name         Twitter Video Download
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  Adds a button to download video from a tweet
// @run-at       document-idle
// @author       naileD
// @include      https://twitter.com*
// @include      https://mobile.twitter.com*
// @icon         https://www.google.com/s2/favicons?domain=twitter.com
// @grant        none
// ==/UserScript==

'use strict';
setInterval(() => {
  var main = document.querySelector("main[role='main'] section[role='region']");
  if (!main) return;
  var react = Object.entries(main.parentElement.parentElement).find(el => el[0].startsWith("__reactInternalInstance"))[1];
  if (!react.memoizedProps.children[0]) return;
  var tweet = react.memoizedProps.children[0]._owner.memoizedProps.focalTweet;
  if (!tweet || !tweet.extended_entities || !tweet.extended_entities.media || !tweet.extended_entities.media[0].video_info) return;
  var el = document.querySelector(`a[href*="${tweet.id_str}"]`);
  if (!el) return;
  while (el.tagName !== "ARTICLE") { el = el.parentElement; }
  el = el.querySelector(`[aria-label^="Share Tweet"`);
  if (!el) return;
  var el2 = el.parentElement.parentElement;
  if (el2.lastElementChild.tagName === "A") return;
  var video = tweet.extended_entities.media[0].video_info.variants.filter(v => v.content_type == "video/mp4").sort((a,b) => b.bitrate - a.bitrate)[0].url.replace(new RegExp("\\?tag=.*"), "");
  el2.insertAdjacentHTML("beforeend", `<a href="${video}" target="_blank" style="display: flex;" title="Download Video">${el.parentElement.outerHTML}</a>`);
  el2 = el2.lastElementChild;
  el2.querySelector("path").style.transform = "rotateX(180deg) translateY(-18px)";
}, 1000);