您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Shows a list of the playlist video names in tab delimited text to be easily copied
当前为
- // ==UserScript==
- // @name Export Youtube Playlist in tab delimited text
- // @namespace 1N07 & MK
- // @version 0.4.1
- // @description Shows a list of the playlist video names in tab delimited text to be easily copied
- // @author 1N07 & MK
- // @require https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js
- // @include https://www.youtube.com/*
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- var listCreationAllowed = true;
- var urlAtLastCheck = "";
- setInterval(function() {
- if (urlAtLastCheck != window.location.href) {
- urlAtLastCheck = window.location.href;
- if (urlAtLastCheck.includes("/playlist?list=")) InsertButtonASAP();
- }
- }, 100);
- function InsertButtonASAP() {
- let buttonInsertInterval = setInterval(function() {
- //wait for possible previous buttons to stop existing (due to how youtube loads pages) and for the space for the new button to be available
- if ($("#exportTabTextList").length == 0 && $("ytd-playlist-sidebar-secondary-info-renderer > #owner-container").length > 0) {
- $("ytd-playlist-sidebar-secondary-info-renderer > #owner-container").parent().after("<button id='exportTabTextList' style='font-family: Roboto, Arial, sans-serif; font-size: 13px;'>Export as tab delimited text</button>");
- $("#exportTabTextList").click(ScrollUntillAllVisible);
- clearInterval(buttonInsertInterval);
- }
- }, 100);
- }
- function ScrollUntillAllVisible() {
- if (!listCreationAllowed) return;
- listCreationAllowed = false;
- $("#exportTabTextList").after(`<p id="listBuildMessage" style="color: red; font-size: 1.33em;">Getting list... please wait.</p>`);
- let numOfVideosInPlaylist = $("ytd-playlist-sidebar-renderer.ytd-browse > #items #stats > yt-formatted-string.ytd-playlist-sidebar-primary-info-renderer:first").text().replace(/(\D+|\s+)/g, '');
- let scrollInterval = setInterval(function(){
- if ($("yt-formatted-string#index.ytd-playlist-video-renderer").last().text() != numOfVideosInPlaylist)
- $(document).scrollTop($(document).height());
- else {
- BuildAndDisplayList();
- clearInterval(scrollInterval);
- }
- }, 100);
- }
- function BuildAndDisplayList() {
- let list = "<Name>\t<Channel>\t<Duration>";
- /*let vTitle = "";
- let vChannel = "";
- let vDuration = "";
- let vFull = "";
- $("ytd-playlist-video-renderer #content #video-title").each(function() {
- vTitle = $(this).attr("title");
- if (vTitle != "[Private video]" && vTitle != "[Deleted video]") {
- vFull = $(this).attr("aria-label");
- vFull = vFull.replace(vTitle, "");
- vFull = vFull.replace(" by ", "\t");
- vFull = vFull.replace(/\w+(?=\s+ago)/g, "");
- vFull = vFull.replace(/\w+(?=\s+ago)/g, "");
- vFull = vFull.replace(" ago ", "\t");
- list += vTitle + vFull + "\n";
- } else {
- list += vTitle + "\n";
- }
- });*/
- var myNodeList = document.querySelectorAll("div");
- var i;
- for (i = 0; i < myNodeList.length; i++) {
- if (myNodeList[i].id == "content" && myNodeList[i].className == "style-scope ytd-playlist-video-renderer") {
- var mySpanList = myNodeList[i].querySelectorAll("span");
- var myAList = myNodeList[i].querySelectorAll("a");
- var j;
- for (j = 0; j < mySpanList.length; j++) {
- if (mySpanList[j].id == "video-title") {
- list += "\n" + mySpanList[j].innerText.trim();
- }
- }
- for (j = 0; j < myAList.length; j++) {
- if (myAList[j].className == "yt-simple-endpoint style-scope yt-formatted-string") {
- list += "\t" + myAList[j].innerText.trim();
- }
- }
- for (j = 0; j < mySpanList.length; j++) {
- if (mySpanList[j].className == "style-scope ytd-thumbnail-overlay-time-status-renderer") {
- list += "\t " + mySpanList[j].innerText;
- }
- }
- }
- }
- $("body").append('<div id="tablistDisplayContainer" style="position: fixed; z-index: 9999; top: 5%; right: 5%; background-color: gray; padding: 10px; border-radius: 5px;"><button id="selectAllAndCopy" style="font-family: Roboto, Arial, sans-serif; font-size: 13px;">Select all and copy</button> <button id="closeTheListThing" style="font-family: Roboto, Arial, sans-serif; font-size: 13px;">Close</button><br><br><textarea id="tabPlayList" style="width: 50vw; height: 80vh; max-width: 90vw; max-height: 90vh;">'+list+'</textarea></div>');
- $("#listBuildMessage").remove();
- $("#closeTheListThing").click(function() {
- $("#tablistDisplayContainer").remove();
- listCreationAllowed = true;
- });
- $("#selectAllAndCopy").click(function() {
- document.getElementById("tabPlayList").select();
- document.execCommand("copy");
- });
- }
- }) ();