// ==UserScript== // @name Twitter Video Download // @namespace http://tampermonkey.net/ // @version 0.1 // @description Adds a button to download video from a tweet // @run-at document-idle // @author You // @include *twitter.com* // @match *twitter.com* // @icon https://www.google.com/s2/favicons?domain=twitter.com // @grant none // @downloadURL none // ==/UserScript== 'use strict'; var intervalId = 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; el2.insertAdjacentHTML("beforeend", ` v.content_type == "video/mp4").sort((a,b) => b.bitrate - a.bitrate)[0].url.replace(new RegExp("\\?tag=.*"), "")} target="_blank" style="display: flex;" title="Download Video">${el.parentElement.outerHTML}`); el2 = el2.lastElementChild; el2.querySelector("path").style.transform = "rotateX(180deg) translateY(-18px)"; }, 1000);