您需要先安装一个扩展,例如 篡改猴、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);