// ==UserScript== // @name DOUBAN Movie info for TorrentGalaxy // @namespace http://tgx.rs/ // @version 0.7.0 // @description Adds douban movie info to TorrentGalaxy // @author tofuliang // @match https://tgx.rs/* // @require https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.slim.min.js // @grant GM_xmlhttpRequest // @grant GM_getValue // @grant GM_setValue // @grant GM_deleteValue // @grant GM_listValues // @grant GM_registerMenuCommand // @grant GM_unregisterMenuCommand // @grant GM_download // @grant GM_info // @connect m.douban.com // @connect movie.douban.com // @downloadURL https://update.greasyfork.icu/scripts/17663/DOUBAN%20Movie%20info%20for%20TorrentGalaxy.user.js // @updateURL https://update.greasyfork.icu/scripts/17663/DOUBAN%20Movie%20info%20for%20TorrentGalaxy.meta.js // ==/UserScript== function isEmpty(s) { return !s || s === 'N/A'; } function encode(s) { let out = []; for ( let i = 0; i < s.length; i++ ) { out[i] = s.charCodeAt(i); } return new Uint8Array( out ); } function combineFiled(a,k){ let ak=[]; a.forEach((v) => v.hasOwnProperty(k) && ak.push(v[k])); return ak.join(' / ') } Date.prototype.format = function(fmt) { var o = { "M+" : this.getMonth()+1, //月份 "d+" : this.getDate(), //日 "h+" : this.getHours(), //小时 "m+" : this.getMinutes(), //分 "s+" : this.getSeconds(), //秒 "q+" : Math.floor((this.getMonth()+3)/3), //季度 "S" : this.getMilliseconds() //毫秒 }; if(/(y+)/.test(fmt)) { fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length)); } for(var k in o) { if(new RegExp("("+ k +")").test(fmt)){ fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length))); } } return fmt; } let emptyStar = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ5Ljk0IDQ5Ljk0IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0OS45NCA0OS45NDsiIHhtbDpzcGFjZT0icHJlc2VydmUiIHdpZHRoPSI1MTJweCIgaGVpZ2h0PSI1MTJweCI+CjxwYXRoIGQ9Ik00OC44NTYsMjIuNzMxYzAuOTgzLTAuOTU4LDEuMzMtMi4zNjQsMC45MDYtMy42NzFjLTAuNDI1LTEuMzA3LTEuNTMyLTIuMjQtMi44OTItMi40MzhsLTEyLjA5Mi0xLjc1NyAgYy0wLjUxNS0wLjA3NS0wLjk2LTAuMzk4LTEuMTktMC44NjVMMjguMTgyLDMuMDQzYy0wLjYwNy0xLjIzMS0xLjgzOS0xLjk5Ni0zLjIxMi0xLjk5NmMtMS4zNzIsMC0yLjYwNCwwLjc2NS0zLjIxMSwxLjk5NiAgTDE2LjM1MiwxNGMtMC4yMywwLjQ2Ny0wLjY3NiwwLjc5LTEuMTkxLDAuODY1TDMuMDY5LDE2LjYyM0MxLjcxLDE2LjgyLDAuNjAzLDE3Ljc1MywwLjE3OCwxOS4wNiAgYy0wLjQyNCwxLjMwNy0wLjA3NywyLjcxMywwLjkwNiwzLjY3MWw4Ljc0OSw4LjUyOGMwLjM3MywwLjM2NCwwLjU0NCwwLjg4OCwwLjQ1NiwxLjRMOC4yMjQsNDQuNzAyICBjLTAuMjMyLDEuMzUzLDAuMzEzLDIuNjk0LDEuNDI0LDMuNTAyYzEuMTEsMC44MDksMi41NTUsMC45MTQsMy43NzIsMC4yNzNsMTAuODE0LTUuNjg2YzAuNDYxLTAuMjQyLDEuMDExLTAuMjQyLDEuNDcyLDAgIGwxMC44MTUsNS42ODZjMC41MjgsMC4yNzgsMS4xLDAuNDE1LDEuNjY5LDAuNDE1YzAuNzM5LDAsMS40NzUtMC4yMzEsMi4xMDMtMC42ODhjMS4xMTEtMC44MDgsMS42NTYtMi4xNDksMS40MjQtMy41MDIgIEwzOS42NTEsMzIuNjZjLTAuMDg4LTAuNTEzLDAuMDgzLTEuMDM2LDAuNDU2LTEuNEw0OC44NTYsMjIuNzMxeiBNMzcuNjgxLDMyLjk5OGwyLjA2NSwxMi4wNDJjMC4xMDQsMC42MDYtMC4xMzEsMS4xODUtMC42MjksMS41NDcgIGMtMC40OTksMC4zNjEtMS4xMiwwLjQwNS0xLjY2NSwwLjEyMWwtMTAuODE1LTUuNjg3Yy0wLjUyMS0wLjI3My0xLjA5NS0wLjQxMS0xLjY2Ny0wLjQxMXMtMS4xNDUsMC4xMzgtMS42NjcsMC40MTJsLTEwLjgxMyw1LjY4NiAgYy0wLjU0NywwLjI4NC0xLjE2OCwwLjI0LTEuNjY2LTAuMTIxYy0wLjQ5OC0wLjM2Mi0wLjczMi0wLjk0LTAuNjI5LTEuNTQ3bDIuMDY1LTEyLjA0MmMwLjE5OS0xLjE2Mi0wLjE4Ni0yLjM0OC0xLjAzLTMuMTcgIEwyLjQ4LDIxLjI5OWMtMC40NDEtMC40My0wLjU5MS0xLjAzNi0wLjQtMS42MjFjMC4xOS0wLjU4NiwwLjY2Ny0wLjk4OCwxLjI3Ni0xLjA3N2wxMi4wOTEtMS43NTcgIGMxLjE2Ny0wLjE2OSwyLjE3Ni0wLjkwMSwyLjY5Ny0xLjk1OWw1LjQwNy0xMC45NTdjMC4yNzItMC41NTIsMC44MDMtMC44ODEsMS40MTgtMC44ODFjMC42MTYsMCwxLjE0NiwwLjMyOSwxLjQxOSwwLjg4MSAgbDUuNDA3LDEwLjk1N2MwLjUyMSwxLjA1OCwxLjUyOSwxLjc5LDIuNjk2LDEuOTU5bDEyLjA5MiwxLjc1N2MwLjYwOSwwLjA4OSwxLjA4NiwwLjQ5MSwxLjI3NiwxLjA3NyAgYzAuMTksMC41ODUsMC4wNDEsMS4xOTEtMC40LDEuNjIxbC04Ljc0OSw4LjUyOEMzNy44NjYsMzAuNjUsMzcuNDgxLDMxLjgzNSwzNy42ODEsMzIuOTk4eiIgZmlsbD0iI0ZGREE0NCIvPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8Zz4KPC9nPgo8L3N2Zz4K'; let solidStar = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pg0KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDE5LjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPg0KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNTEyLjAwMiA1MTIuMDAyIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1MTIuMDAyIDUxMi4wMDI7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4NCjxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfMV8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMjM2LjkzODIiIHkxPSI0NTguNDI4NCIgeDI9IjIzNi45MzgyIiB5Mj0iLTcxLjE4MTYiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wNjY3IDAgMCAtMS4wNjY3IDMuMjY2NiA1NTcuNTM1MikiPg0KCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRkNGOTUiLz4NCgk8c3RvcCAgb2Zmc2V0PSIwLjQyNyIgc3R5bGU9InN0b3AtY29sb3I6I0ZGQzk1NCIvPg0KCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRkMyMDAiLz4NCjwvbGluZWFyR3JhZGllbnQ+DQo8cGF0aCBzdHlsZT0iZmlsbDp1cmwoI1NWR0lEXzFfKTsiIGQ9Ik0yNzQuODQsMjMuMjEybDY3LjcyMiwxMzcuMjE4bDE1MS40MjksMjIuMDA0YzE3LjIzMiwyLjUwMywyNC4xMTIsMjMuNjgsMTEuNjQ0LDM1LjgzNQ0KCUwzOTYuMDU4LDMyNS4wNzdsMjUuODY3LDE1MC44MTdjMi45NDQsMTcuMTYyLTE1LjA3LDMwLjI1LTMwLjQ4MiwyMi4xNDdMMjU2LDQyNi44MzVsLTEzNS40NDIsNzEuMjA2DQoJYy0xNS40MTIsOC4xMDItMzMuNDI2LTQuOTg1LTMwLjQ4Mi0yMi4xNDdsMjUuODY3LTE1MC44MTdMNi4zNjcsMjE4LjI2OGMtMTIuNDY5LTEyLjE1NS01LjU4OC0zMy4zMywxMS42NDQtMzUuODM1bDE1MS40MjktMjIuMDA0DQoJbDY3LjcyMS0xMzcuMjE3QzI0NC44NjgsNy41OTcsMjY3LjEzMyw3LjU5NywyNzQuODQsMjMuMjEyeiIvPg0KPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF8yXyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIzNjEuMzM4IiB5MT0iMzkwLjEzMTQiIHgyPSIyMDEuMjM4IiB5Mj0iMzkwLjEzMTQiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wNjY3IDAgMCAtMS4wNjY3IDMuMjY2NiA1NTcuNTM1MikiPg0KCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRkMyMDA7c3RvcC1vcGFjaXR5OjAiLz4NCgk8c3RvcCAgb2Zmc2V0PSIwLjIwMyIgc3R5bGU9InN0b3AtY29sb3I6I0ZGQkIwMDtzdG9wLW9wYWNpdHk6MC4yMDMiLz4NCgk8c3RvcCAgb2Zmc2V0PSIwLjQ5OSIgc3R5bGU9InN0b3AtY29sb3I6I0ZGQTcwMDtzdG9wLW9wYWNpdHk6MC40OTkiLz4NCgk8c3RvcCAgb2Zmc2V0PSIwLjg1MiIgc3R5bGU9InN0b3AtY29sb3I6I0ZGODgwMDtzdG9wLW9wYWNpdHk6MC44NTIiLz4NCgk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojRkY3ODAwIi8+DQo8L2xpbmVhckdyYWRpZW50Pg0KPHBhdGggc3R5bGU9ImZpbGw6dXJsKCNTVkdJRF8yXyk7IiBkPSJNMzQyLjU2LDE2MC40M0wyNzQuODQsMjMuMjEyYy0zLjg1My03LjgwNy0xMS4zNDYtMTEuNzExLTE4LjgzOS0xMS43MTF2MjU5Ljc4OQ0KCUwzNDIuNTYsMTYwLjQzeiIvPg0KPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF8zXyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIzODguNjg3NCIgeTE9IjE0NC44MzgzIiB4Mj0iMzQ2LjI4NzQiIHkyPSIzNTMuNjM4MyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjA2NjcgMCAwIC0xLjA2NjcgMy4yNjY2IDU1Ny41MzUyKSI+DQoJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6I0ZGQzIwMDtzdG9wLW9wYWNpdHk6MCIvPg0KCTxzdG9wICBvZmZzZXQ9IjAuMjAzIiBzdHlsZT0ic3RvcC1jb2xvcjojRkZCQjAwO3N0b3Atb3BhY2l0eTowLjIwMyIvPg0KCTxzdG9wICBvZmZzZXQ9IjAuNDk5IiBzdHlsZT0ic3RvcC1jb2xvcjojRkZBNzAwO3N0b3Atb3BhY2l0eTowLjQ5OSIvPg0KCTxzdG9wICBvZmZzZXQ9IjAuODUyIiBzdHlsZT0ic3RvcC1jb2xvcjojRkY4ODAwO3N0b3Atb3BhY2l0eTowLjg1MiIvPg0KCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRjc4MDAiLz4NCjwvbGluZWFyR3JhZGllbnQ+DQo8cGF0aCBzdHlsZT0iZmlsbDp1cmwoI1NWR0lEXzNfKTsiIGQ9Ik0zOTYuMDU4LDMyNS4wNzdsMTA5LjU3NS0xMDYuODFjNi4xNTEtNS45OTYsNy41ODYtMTQuMTg1LDUuMzk5LTIxLjI0N0wyNTYsMjcxLjI4OQ0KCUwzOTYuMDU4LDMyNS4wNzd6Ii8+DQo8bGluZWFyR3JhZGllbnQgaWQ9IlNWR0lEXzRfIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeDE9IjE4My4wOTc3IiB5MT0iMzUuMTA4NyIgeDI9IjM0OS4xNTc3IiB5Mj0iMjAxLjE2ODciIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMS4wNjY3IDAgMCAtMS4wNjY3IDMuMjY2NiA1NTcuNTM1MikiPg0KCTxzdG9wICBvZmZzZXQ9IjAiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRkMyMDA7c3RvcC1vcGFjaXR5OjAiLz4NCgk8c3RvcCAgb2Zmc2V0PSIwLjIwMyIgc3R5bGU9InN0b3AtY29sb3I6I0ZGQkIwMDtzdG9wLW9wYWNpdHk6MC4yMDMiLz4NCgk8c3RvcCAgb2Zmc2V0PSIwLjQ5OSIgc3R5bGU9InN0b3AtY29sb3I6I0ZGQTcwMDtzdG9wLW9wYWNpdHk6MC40OTkiLz4NCgk8c3RvcCAgb2Zmc2V0PSIwLjg1MiIgc3R5bGU9InN0b3AtY29sb3I6I0ZGODgwMDtzdG9wLW9wYWNpdHk6MC44NTIiLz4NCgk8c3RvcCAgb2Zmc2V0PSIxIiBzdHlsZT0ic3RvcC1jb2xvcjojRkY3ODAwIi8+DQo8L2xpbmVhckdyYWRpZW50Pg0KPHBhdGggc3R5bGU9ImZpbGw6dXJsKCNTVkdJRF80Xyk7IiBkPSJNNDEzLjYzLDQ5Ni4zOTNMMjU2LDI3MS4yODl2MTU1LjU0NmwxMzUuNDQyLDcxLjIwNg0KCUMzOTkuMTc2LDUwMi4xMDcsNDA3LjU2Myw1MDAuODM1LDQxMy42Myw0OTYuMzkzeiIvPg0KPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF81XyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSI2NC42Nzc3IiB5MT0iMjQ1LjEwOCIgeDI9IjE4Ny4wNzc3IiB5Mj0iMTQyLjcwOCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjA2NjcgMCAwIC0xLjA2NjcgMy4yNjY2IDU1Ny41MzUyKSI+DQoJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6I0ZGQzIwMDtzdG9wLW9wYWNpdHk6MCIvPg0KCTxzdG9wICBvZmZzZXQ9IjAuMjAzIiBzdHlsZT0ic3RvcC1jb2xvcjojRkZCQjAwO3N0b3Atb3BhY2l0eTowLjIwMyIvPg0KCTxzdG9wICBvZmZzZXQ9IjAuNDk5IiBzdHlsZT0ic3RvcC1jb2xvcjojRkZBNzAwO3N0b3Atb3BhY2l0eTowLjQ5OSIvPg0KCTxzdG9wICBvZmZzZXQ9IjAuODUyIiBzdHlsZT0ic3RvcC1jb2xvcjojRkY4ODAwO3N0b3Atb3BhY2l0eTowLjg1MiIvPg0KCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRjc4MDAiLz4NCjwvbGluZWFyR3JhZGllbnQ+DQo8cGF0aCBzdHlsZT0iZmlsbDp1cmwoI1NWR0lEXzVfKTsiIGQ9Ik0yNTYsMjcxLjI4OWwtMTQwLjA1OCw1My43ODhMOTAuMDc2LDQ3NS44OTRjLTEuNDY3LDguNTUsMi4yNzEsMTYuMDg3LDguMjk0LDIwLjQ5OQ0KCUwyNTYsMjcxLjI4OXoiLz4NCjxsaW5lYXJHcmFkaWVudCBpZD0iU1ZHSURfNl8iIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiB4MT0iMTU2LjQzMzQiIHkxPSI0MTQuMDIiIHgyPSIxMDYuODMzNCIgeTI9IjI3My4yMiIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjA2NjcgMCAwIC0xLjA2NjcgMy4yNjY2IDU1Ny41MzUyKSI+DQoJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6I0ZGQzIwMDtzdG9wLW9wYWNpdHk6MCIvPg0KCTxzdG9wICBvZmZzZXQ9IjAuMjAzIiBzdHlsZT0ic3RvcC1jb2xvcjojRkZCQjAwO3N0b3Atb3BhY2l0eTowLjIwMyIvPg0KCTxzdG9wICBvZmZzZXQ9IjAuNDk5IiBzdHlsZT0ic3RvcC1jb2xvcjojRkZBNzAwO3N0b3Atb3BhY2l0eTowLjQ5OSIvPg0KCTxzdG9wICBvZmZzZXQ9IjAuODUyIiBzdHlsZT0ic3RvcC1jb2xvcjojRkY4ODAwO3N0b3Atb3BhY2l0eTowLjg1MiIvPg0KCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRjc4MDAiLz4NCjwvbGluZWFyR3JhZGllbnQ+DQo8cGF0aCBzdHlsZT0iZmlsbDp1cmwoI1NWR0lEXzZfKTsiIGQ9Ik0wLjk2OCwxOTcuMDIxTDI1NiwyNzEuMjg5bC04Ni41Ni0xMTAuODZMMTguMDExLDE4Mi40MzQNCglDOS4yOCwxODMuNzAyLDMuMjE0LDE4OS43NjcsMC45NjgsMTk3LjAyMUwwLjk2OCwxOTcuMDIxeiIvPg0KPGxpbmVhckdyYWRpZW50IGlkPSJTVkdJRF83XyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIHgxPSIzNDMuMTM5OSIgeTE9IjM5OS4zMTY0IiB4Mj0iLTIxLjI2MDEiIHkyPSIyNDQuMTE2NCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgxLjA2NjcgMCAwIC0xLjA2NjcgMy4yNjY2IDU1Ny41MzUyKSI+DQoJPHN0b3AgIG9mZnNldD0iMCIgc3R5bGU9InN0b3AtY29sb3I6I0ZGQzIwMDtzdG9wLW9wYWNpdHk6MCIvPg0KCTxzdG9wICBvZmZzZXQ9IjAuMjAzIiBzdHlsZT0ic3RvcC1jb2xvcjojRkZCQjAwO3N0b3Atb3BhY2l0eTowLjIwMyIvPg0KCTxzdG9wICBvZmZzZXQ9IjAuNDk5IiBzdHlsZT0ic3RvcC1jb2xvcjojRkZBNzAwO3N0b3Atb3BhY2l0eTowLjQ5OSIvPg0KCTxzdG9wICBvZmZzZXQ9IjAuODUyIiBzdHlsZT0ic3RvcC1jb2xvcjojRkY4ODAwO3N0b3Atb3BhY2l0eTowLjg1MiIvPg0KCTxzdG9wICBvZmZzZXQ9IjEiIHN0eWxlPSJzdG9wLWNvbG9yOiNGRjc4MDAiLz4NCjwvbGluZWFyR3JhZGllbnQ+DQo8cGF0aCBzdHlsZT0iZmlsbDp1cmwoI1NWR0lEXzdfKTsiIGQ9Ik0xMTUuOTQzLDMyNS4wNzdMNi4zNjcsMjE4LjI2OGMtNi4xNTEtNS45OTYtNy41ODYtMTQuMTg1LTUuMzk5LTIxLjI0N0wyNTYsMjcxLjI4OQ0KCUwxMTUuOTQzLDMyNS4wNzd6Ii8+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8Zz4NCjwvZz4NCjxnPg0KPC9nPg0KPGc+DQo8L2c+DQo8L3N2Zz4NCg=='; let staredMovies = GM_getValue("staredMovies", {}); let starMovie = function(starId,date){ date = date || new Date(); staredMovies[starId] = +(date); GM_setValue('staredMovies',staredMovies); } let unStarMovie = function(starId){ delete staredMovies[starId]; GM_setValue('staredMovies',staredMovies); } let checkMovieStared = function(starId,defaultValue){ return staredMovies.hasOwnProperty(starId)?staredMovies[starId]:defaultValue; } let exportStaredMovies = function(){ let str = JSON.stringify(staredMovies); let data = encode(str); let blob = new Blob( [ data ], { type: 'application/octet-stream' }); let url = URL.createObjectURL(blob); let a = document.createElement('a'); a.setAttribute('href', url); a.setAttribute('download', data.name != null ? data.name : 'staredMovies.json'); document.documentElement.appendChild(a); let e = new MouseEvent('click'); a.dispatchEvent(e); document.documentElement.removeChild(a); setTimeout(function() { URL.revokeObjectURL(url); if ('close' in blob) blob.close(); blob = undefined; }, 1000); GM_download(url); } let importStaredMovies = function(){ let movies = prompt("请输入从别处导出的已收藏电影",''); if (movies !== null) { let _movies = JSON.parse(movies); for( let movieId in _movies){ staredMovies[movieId] = _movies[movieId]; } GM_setValue('staredMovies',staredMovies); overlib('成功导入'+Object.keys(_movies).length+'部已收藏电影'); setTimeout(nd,5000); } } let enableSwitchListAMenuID,disableSwitchListAMenuID,switchListA = function(){ if(GM_getValue('switchListA',0) === 0){ GM_setValue('switchListA',1); if(disableSwitchListAMenuID){ GM_unregisterMenuCommand(disableSwitchListAMenuID); } }else{ GM_setValue('switchListA',0); if(enableSwitchListAMenuID){ GM_unregisterMenuCommand(enableSwitchListAMenuID); } } window.location.reload(); } async function asyncGM_xmlhttpRequest(url) { return new Promise(function (resolve, reject) { GM_xmlhttpRequest({ headers:{Referer:'https://m.douban.com'}, method: 'GET', url: url, onload: function(response) { resolve(response); }, onerror: function () { reject('你网络有问题...'); }, ontimeout: function () { reject('请求超时...'); } }); }); } async function getDoubanData(imdbId){ let data = GM_getValue('douBanInfo_' + imdbId, undefined); if (undefined !== data && +(new Date()) - data.lastModify < 86400000*7) { return data; }else{ try{ let doubanId = '' let response = await asyncGM_xmlhttpRequest('https://m.douban.com/search/?query=' + imdbId ); let matches = /\/movie\/subject\/(\d+)/.exec(response.responseText); if(null !== matches && matches.length>1 && !isEmpty(matches[1])){ doubanId = matches[1]; }else{ overlib('你太潮了,豆瓣都没资料...'); } if(doubanId.length > 1){ response = await asyncGM_xmlhttpRequest('https://m.douban.com/rexxar/api/v2/movie/' + doubanId); if(response.status === 404 && /douban.com\/api\/v2\/tv\/(\d+)/.test(response.finalUrl)){ response = await asyncGM_xmlhttpRequest('https://m.douban.com/rexxar/api/v2/tv/' + doubanId); if(0 === response.responseText.indexOf('{') && '}' === response.responseText.slice(-1)){ data = JSON.parse(response.responseText); if (!isEmpty(data.title)) { data.lastModify = +(new Date()); GM_setValue('douBanInfo_' + imdbId, data); return data; }else if(data.code !==null && data.code !==undefined ){ overlib('豆瓣大爷不干了('+response.status + ': '+response.statusText+')(搪塞理由:'+data.code+':'+data.msg +')...'); }else{ overlib('天晓得发生什么事了('+response.status + ': '+response.statusText+')...'); } } }else if(0 === response.responseText.indexOf('{') && '}' === response.responseText.slice(-1)){ data = JSON.parse(response.responseText); if (!isEmpty(data.title)) { data.lastModify = +(new Date()); GM_setValue('douBanInfo_' + imdbId, data); return data; }else if(data.code !==null && data.code !==undefined ){ overlib('豆瓣大爷不干了('+response.status + ': '+response.statusText+')(搪塞理由:'+data.code+':'+data.msg +')...'); } }else{ overlib('天晓得发生什么事了('+response.status + ': '+response.statusText+')...'); } }else{ overlib('你太潮了,豆瓣都没资料...'); } }catch(e){ console.log(e) overlib('exception',e); } return false; } } for (let s of GM_listValues()){ if(s.indexOf('starInfo_') !== -1){ starMovie(s.replace('starInfo_',''),GM_getValue(s, +(new Date()))); GM_deleteValue(s); } } if(GM_getValue('switchListA',0) === 0){ enableSwitchListAMenuID = GM_registerMenuCommand("开启推荐项豆瓣信息", switchListA); }else{ disableSwitchListAMenuID = GM_registerMenuCommand("取消推荐项豆瓣信息", switchListA); } GM_registerMenuCommand("导出已收藏电影", exportStaredMovies); GM_registerMenuCommand("导入已收藏电影", importStaredMovies); $('body').on('mouseenter', 'a[data-imdbId]', function() { let timer =0, overlibed = 0; let imdbId = $(this).attr('data-imdbId'); let aTag = this; timer = setTimeout(function(){ overlib('数据加载中...'); function showDouBanInfo(data,aTag) { let html = ''; html += '
' + data.original_title + ' ' + data.title + ' (' + data.year + ')
'; html += '' + data.rating.value + ' / ' + data.rating.count + '
'; html += '上映时间: ' + data.pubdate.join(' / ') + '
'; } if (!isEmpty(data.duration)) { html += '片长: ' + data.duration.join(' / ') + '
'; } if (!isEmpty(data.aka)) { html += '别名: ' + data.aka.join(' / ') + '
'; } if (!isEmpty(data.directors)) { html += '导演: ' + combineFiled(data.directors,'name') + '
'; } // if (!isEmpty(data.attrs.writer)) { html += '编剧: ' + data.attrs.writer.join(' / ') + '
'; } if (!isEmpty(data.actors)) { html += '主演: ' + combineFiled(data.actors,'name') + '
'; } if (!isEmpty(data.genres)) { html += '类型: ' + data.genres.join(' / ') + '
'; } if (!isEmpty(data.countries)) { html += '制片国家/地区: ' + data.countries.join(' / ') + '
'; } if (!isEmpty(data.languages)) { html += '语言: ' + data.languages.join(' / ') + '
'; } if (!isEmpty(data.intro)) { html += '简介: ' + data.intro + '
'; } html += '电影名(点击隐藏/显示列表) | 收藏时间 |