您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Enhanced version of Youtube Playlist Video Link Extractor by Yooness Rostamy. Updates the code to work on modern versions and adds the ability to list unavailable videos.
// ==UserScript== // @name YouTube Playlist Link Extractor Enhanced // @namespace http://tampermonkey.net/ // @version 0.7 // @description Enhanced version of Youtube Playlist Video Link Extractor by Yooness Rostamy. Updates the code to work on modern versions and adds the ability to list unavailable videos. // @author Marvin P. // @match https://www.youtube.com/playlist?list=* // @grant none // @resource http://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css // @require https://code.jquery.com/jquery-1.12.4.min.js // @require https://code.jquery.com/ui/1.12.1/jquery-ui.min.js // @run-at document-end // ==/UserScript== (function() { 'use strict'; var ytple_loaded = 0; function appendYTPLE(target){ $(target).append ( ' \ <textarea id="ytple_links" spellcheck="false"></textarea> \ <div class="ytple_spacer"> \ <div> \ <button id="ytple_count" class="ytple_btn ytple_btnprimary">List</button> \ <button id="ytple_countdeleted" class="ytple_btn">List Unavailable</button> \ </div> \ <div> \ <b class="ytple_counter">Count</b> \ <p id="ytple_vcount" class="ytple_counter">0</p> \ </div> \ </div> \ ' ); }; function generateLinks(selector) { var ar=[]; $(selector).each(function(index){var item = $(this).attr("href").replace(/&list.*/g,'');ar[index]=item;}); $("#ytple_links").val(ar.map(x=> "https://www.youtube.com"+x).join("\n")); $("#ytple_vcount").text(ar.length); }; $( window ).on( "load", function() { window.addEventListener("yt-navigate-finish", () => { if (ytple_loaded == 0) { // quick fix for new YouTube layout if ($("body").attr("rounded-container") === ""){ var target = "ytd-playlist-header-renderer"; appendYTPLE(target); } else { var target = "ytd-playlist-sidebar-renderer"; appendYTPLE(target); } } // Append styles to body $( "<style>#ytple_links { box-sizing: border-box; width: 100%; height: 30vh; background-color: transparent; border: 1px solid var(--ytd-searchbox-border-color); border-radius: 2px; resize: none; font-family: Roboto, Arial, sans-serif; font-size: 14px; padding: 10px 16px; color: var(--yt-spec-text-primary); margin-bottom: 8px; }</style>" ).appendTo( "head" ); $( "<style>.ytple_btn { border: 1px solid var(--yt-spec-call-to-action); padding: var(--yt-button-padding-minus-border); text-transform: uppercase; font-family: Roboto, Arial, sans-serif; font-size: 14px; text-align: center; border-radius: 2px; background-color: transparent; color: var(--yt-spec-call-to-action); cursor: pointer; margin-right: 4px; } }</style>" ).appendTo( "head" ); $( "<style>.ytple_btnprimary { background-color: var(--yt-spec-call-to-action); color: var(--yt-spec-general-background-a); }</style>" ).appendTo( "head" ); $( "<style>.ytple_spacer { display: flex; flex-direction: row; justify-content: space-between; align-items: center; }</style>" ).appendTo( "head" ); $( "<style>.ytple_counter { color: var(--yt-spec-text-secondary); margin: 0; text-align: right; }</style>" ).appendTo( "head" ); // Prevent appending aforementioned code on next playlist load ytple_loaded = 1; $("#ytple_countdeleted").click(function() { var selector="ytd-playlist-video-renderer > #content > #container > #meta > h3 > a:contains('video]')"; generateLinks(selector); }); $("#ytple_count").click(function() { var selector="ytd-playlist-video-renderer > #content > #container > #meta > h3 > a"; generateLinks(selector); }); }); }); })();