您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Save playlist title to browser local storage
// ==UserScript== // @name jc youtube script - save playlist // @namespace http://jc.at.home/ // @require http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.11.1.min.js // @match http://www.youtube.com/playlist* // @match https://www.youtube.com/playlist* // @include http://www.youtube.com/playlist* // @include https://www.youtube.com/playlist* // @description Save playlist title to browser local storage // @version 2014.08.09.23h // @copyright 2011+, You // ==/UserScript== (function($) { //GM_addStyle(".jc_url:visited { color: red !important; }"); GM_addStyle("#divJcSavePlaylistArea {border:1px solid gray; position: fixed; right: 30px; top: 130px; width: 400px;}"); GM_addStyle("#divJcMsg {border:1px solid blue; height:700px; overflow-y:auto; background-color:white;}"); GM_addStyle(".jcItem { border:1px solid gray; margin-bottom:5px; }"); var nowUrl = ''; function getJcPlaylistId() { // 取得目前的 Playlist Id var aurl = location.href; if (aurl.indexOf('playlist?')==-1) { listId = ''; } else { var r = new RegExp('list=(.*?)(&|$)' , ''); var listId = r.exec(aurl)[1]; aurl = null; r = null; } return (listId); } function doJcLoadVideos() { // 載入已儲存的標題 var listId = getJcPlaylistId(); if (''==listId) { $('#divJcSavePlaylistArea').hide(); } else { $('#divJcSavePlaylistArea').show(); $('#divJcMsg').html( 'Load Playlist Id = ' + listId + '<hr />' + localStorage.getItem('jc_youtube_playlist_' + listId)); listId = null; nowUrl = location.href; // console.log('exec doJcLoadVideos()'); } window.setTimeout(function() { doJcClickLoadMoreBtn(); },2000); } function doJcSaveVideos() { // 儲存影片標題至 Browser Local Storage var yVideos = []; $('.pl-video-title-link').each(function() { var atitle = $.trim($(this).text()); yVideos.push(atitle); }); var astr = yVideos.join(',,,,,'); var listId = getJcPlaylistId(); localStorage.setItem('jc_youtube_playlist_' + listId , astr); $('#divJcMsg').html( 'Playlist Id = ' + listId + '<hr />' + astr ); listId = null; yVideos = null; atitle = null; astr = null; } function doJcCheckVideos() { // 檢查哪些影片不存在 或 重複 var listId = getJcPlaylistId(); var videosStr = localStorage.getItem('jc_youtube_playlist_' + listId); var videosStrLen = parseInt(videosStr.length / 1024 , 10) + ' KB'; $('#spanJcSavePlaylistDataSize').text(videosStrLen); var videosArr = videosStr.split(',,,,,'); var atitle; var btitle; var surl; var bArr = []; var video_link_class = '.pl-video-title-link'; $(video_link_class).each(function() { var atitle = $.trim($(this).text()); bArr[atitle] = '1'; }); $('#divJcMsg').html(''); for (video in videosArr) { btitle = videosArr[video]; if (undefined == bArr[btitle]) { surl = 'http://www.youtube.com/results?search_query=' + encodeURIComponent(btitle); $('#divJcMsg').append('<div class="jcItem">' + btitle + ' : Not Exists! ' + ' <a target="_blank" href="' + surl + '">Search</a>' + '</div>'); } } // for video = null; var cArr = []; for (video in videosArr) { btitle = videosArr[video]; cArr[btitle] = '2'; } $('#divJcMsg').append('<hr />'); $(video_link_class).each(function() { var atitle = $.trim($(this).text()); if (undefined == cArr[atitle]) { //surl = 'http://www.youtube.com/results?search_query=' + encodeURIComponent(btitle); $('#divJcMsg').append('<div class="jcItem">' + atitle + ' : Not Save! </div>'); } }); //$('#divJcMsg').html( bArr.join('<br />') ); surl = null; atitle = null; btitle = null; listId = null; videosArr = null; videosStr = null; cArr = null; bArr = null; } function doJcAddSavePlaylistBtn() { $('body').append('<div id="divJcSavePlaylistArea">'+ '<div><input type="button" id="btnJcMax" value="放大" /><input type="button" id="btnJcMin" value="縮小" /></div>'+ '<div id="divJcSavePlaylistBtns2Area"><input type="button" id="btnJcSave" value="Save To Local Storage" />' + '<input type="button" id="btnJcCheck" value="Check deleted videos" /><span id="spanJcSavePlaylistDataSize">--- KB</span></div>' + '<div id="divJcMsg"></div></div>'); $('#btnJcSave').click(function() { // 儲存影片標題至 Browser Local Storage doJcSaveVideos(); }); $('#btnJcCheck').click(function() { // 檢查哪些影片不存在 或 重複 doJcCheckVideos(); }); $('#btnJcMax').on('click', function() { $('#divJcMsg').show(); $('#divJcSavePlaylistBtns2Area').show(); }); $('#btnJcMin').on('click', function() { $('#divJcMsg').hide(); $('#divJcSavePlaylistBtns2Area').hide(); }); // 載入已儲存的標題 doJcLoadVideos(); } function doJcClickLoadMoreBtn() { // Click LoadMore Button if ($('button.load-more-button').length>0) { $('button.load-more-button').eq(0).trigger('click'); } } $(document).ready(function() { window.setTimeout(function() { doJcAddSavePlaylistBtn(); } , 200); window.setInterval(function() { if (nowUrl != location.href) { doJcLoadVideos(); } },5000); }); })(jQuery);