directly show search r###lts of douban in current web page
// ==UserScript== // @name douban_search // @namespace https://github.com/Kyouichirou // @version 1.0 // @description directly show search r###lts of douban in current web page // @author HLA // @license MIT // @include * // @grant GM_xmlhttpRequest // @connect search.douban.com // @compatiable chrome; just test on chrome 80+ // @noframes // @icon https://book.douban.com/favicon.ico // ==/UserScript== (() => { /* @name: doubane_search_r###lt_decrypt @description: 豆瓣搜索结果整合在html文件中, 但是经过加密 位于'window.__DATA__ =' modify from: https://github.com/SergioJune/Spider-Crack-JS/blob/master/douban/main.js 修改内容: 1. 修正大量的错误 2. 删减冗余代码 3. 删减/修改大部分代码, 简化部分代码 4. 代码规范(部分改成Es6+) 5. 使之最终可在"use strict"模式下运行 */ "use strict"; const e_playload = (r) => r; const K = { read(t, e, r, n, o) { let i, a, s = 8 * o - n - 1, u = (1 << s) - 1, c = u >> 1, f = -7, l = r ? o - 1 : 0, h = r ? -1 : 1, p = t[e + l]; for ( l += h, i = p & ((1 << -f) - 1), p >>= -f, f += s; f > 0; i = 256 * i + t[e + l], l += h, f -= 8 ); for ( a = i & ((1 << -f) - 1), i >>= -f, f += n; f > 0; a = 256 * a + t[e + l], l += h, f -= 8 ); if (0 === i) i = 1 - c; else { if (i === u) return a ? NaN : (1 / 0) * (p ? -1 : 1); a += Math.pow(2, n); i -= c; } return (p ? -1 : 1) * a * Math.pow(2, i - n); }, write(t, e, r, n, o, i) { var a, s, u, c = 8 * i - o - 1, f = (1 << c) - 1, l = f >> 1, h = 23 === o ? Math.pow(2, -24) - Math.pow(2, -77) : 0, p = n ? 0 : i - 1, d = n ? 1 : -1, m = e < 0 || (0 === e && 1 / e < 0) ? 1 : 0; for ( e = Math.abs(e), isNaN(e) || e === 1 / 0 ? ((s = isNaN(e) ? 1 : 0), (a = f)) : ((a = Math.floor(Math.log(e) / Math.LN2)), e * (u = Math.pow(2, -a)) < 1 && (a--, (u *= 2)), (e += a + l >= 1 ? h / u : h * Math.pow(2, 1 - l)), e * u >= 2 && (a++, (u /= 2)), a + l >= f ? ((s = 0), (a = f)) : a + l >= 1 ? ((s = (e * u - 1) * Math.pow(2, o)), (a += l)) : ((s = e * Math.pow(2, l - 1) * Math.pow(2, o)), (a = 0))); o >= 8; t[r + p] = 255 & s, p += d, s /= 256, o -= 8 ); for ( a = (a << o) | s, c += o; c > 0; t[r + p] = 255 & a, p += d, a /= 256, c -= 8 ); t[r + p - d] |= 128 * m; }, }; const t = { getStat: (e) => a(e) }; const encry2arr_from = (t, e, r) => from_a(null, t, e, r); function hash(e) { return ( "string" === typeof e && (e = encry2arr_from(e)), to_string.call((0, o_default)(e, 41405), 16).replace(/^0+/, "") ); } function to_number() { return 65536 * this._a16 + this._a00; } function to_string(t) { t = t || 10; var e = new i_i(t); if (!gt.call(this, e)) return to_number.call(this).toString(t); for ( var r = clone.call(this), n = new Array(64), o = 63; o >= 0 && (div.call(r, e), (n[o] = to_number.call(r.remainder).toString(t)), gt.call(r, e)); o-- ); n[o - 1] = to_number.call(r).toString(t); return n.join(""); } const gt = function (t) { return ( this._a48 > t._a48 || (!(this._a48 < t._a48) && (this._a32 > t._a32 || (!(this._a32 < t._a32) && (this._a16 > t._a16 || (!(this._a16 < t._a16) && this._a00 > t._a00))))) ); }; function div(t) { for (var e = clone.call(t), r = -1; !lt.call(this, e); ) shiftLeft.call(e, 1, !0), r++; for ( this.remainder = clone.call(this), this._a00 = 0, this._a16 = 0, this._a32 = 0, this._a48 = 0; r >= 0; r-- ) shiftRight.call(e, 1), lt.call(this.remainder, e) || (subtract(this.remainder, e), r > 47 ? (this._a48 |= 1 << (r - 48)) : r > 31 ? (this._a32 |= 1 << (r - 32)) : r > 15 ? (this._a16 |= 1 << (r - 16)) : (this._a00 |= 1 << r)); return this; } function lt(t) { return ( this._a48 < t._a48 || (!(this._a48 > t._a48) && (this._a32 < t._a32 || (!(this._a32 > t._a32) && (this._a16 < t._a16 || (!(this._a16 > t._a16) && this._a00 < t._a00))))) ); } function shiftLeft(t, e) { return ( (t %= 64), t > 47 ? ((this._a48 = this._a00 << (t - 48)), (this._a32 = 0), (this._a16 = 0), (this._a00 = 0)) : t > 31 ? ((t -= 32), (this._a48 = (this._a16 << t) | (this._a00 >> (16 - t))), (this._a32 = (this._a00 << t) & 65535), (this._a16 = 0), (this._a00 = 0)) : t > 15 ? ((t -= 16), (this._a48 = (this._a32 << t) | (this._a16 >> (16 - t))), (this._a32 = 65535 & ((this._a16 << t) | (this._a00 >> (16 - t)))), (this._a16 = (this._a00 << t) & 65535), (this._a00 = 0)) : ((this._a48 = (this._a48 << t) | (this._a32 >> (16 - t))), (this._a32 = 65535 & ((this._a32 << t) | (this._a16 >> (16 - t)))), (this._a16 = 65535 & ((this._a16 << t) | (this._a00 >> (16 - t)))), (this._a00 = (this._a00 << t) & 65535)), e || (this._a48 &= 65535), this ); } const Ut = { $UID: "j", $defaultRootUID: 4, $keys: "z", $vals: "k", crypto: { decrypt: function n(t, e) { return r_decrypt(t, e); }, encrypt: function r(e) { var r = arguments.length > 1 && undefined !== arguments[1] ? arguments[1] : "hjasbdn2ih823rgwudsde7e2dhsdhas"; "string" === typeof r && (r = [].map.call(r, (t) => t.charCodeAt(0))); for ( var n, o = [], i = 0, a = new t(e.length), s = 0; s < 256; s++ ) o[s] = s; for (s = 0; s < 256; s++) (i = (i + o[s] + r[s % r.length]) % 256), (n = o[s]), (o[s] = o[i]), (o[i] = n); (s = 0), (i = 0); for (var u = 0; u < e.length; u++) (s = (s + 1) % 256), (i = (i + o[s]) % 256), (n = o[s]), (o[s] = o[i]), (o[i] = n), (a[u] = e[u] ^ o[(o[s] + o[i]) % 256]); return a; }, }, getRealUID: (t) => (t > 1 ? (t < 7 ? 5 : t < 12 ? -5 : 0) : 0) + t, getType: function o(t) { return Object.prototype.toString.call(t).slice(8, -1); }, }; const from_a = (t, e, r) => ("string" === typeof e ? f(t, e, r) : null); const f = (t, e, r) => { let n = y(e, r); t = o_19(t, n); let a = write(t, e, r); a !== n && (t = t.slice(0, a)); return t; }; const y = (t, e) => { "string" !== typeof t && (t += ""); let r = t.length; if (0 === r) return 0; let n = false; while (true) { switch (e) { case "ascii": case "latin1": case "binary": return r; case "utf8": case "utf-8": case undefined: return Y(t).length; case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": return 2 * r; case "hex": return r >>> 1; case "base64": return V(t).length; default: if (n) return Y(t).length; e = ("" + e).toLowerCase(); n = true; } } }; function toByteArray(t) { // 13 30 32 let f = { 43: 62, 45: 62, 47: 63, 48: 52, 49: 53, 50: 54, 51: 55, 52: 56, 53: 57, 54: 58, 55: 59, 56: 60, 57: 61, 65: 0, 66: 1, 67: 2, 68: 3, 69: 4, 70: 5, 71: 6, 72: 7, 73: 8, 74: 9, 75: 10, 76: 11, 77: 12, 78: 13, 79: 14, 80: 15, 81: 16, 82: 17, 83: 18, 84: 19, 85: 20, 86: 21, 87: 22, 88: 23, 89: 24, 90: 25, 95: 63, 97: 26, 98: 27, 99: 28, 100: 29, 101: 30, 102: 31, 103: 32, 104: 33, 105: 34, 106: 35, 107: 36, 108: 37, 109: 38, 110: 39, 111: 40, 112: 41, 113: 42, 114: 43, 115: 44, 116: 45, 117: 46, 118: 47, 119: 48, 120: 49, 121: 50, 122: 51, }; let e, r, o, i, a, s, u = t.length; (a = n_is_4(t)), (s = new Uint8Array((3 * u) / 4 - a)), (o = a > 0 ? u - 4 : u); let c = 0; for (e = 0, r = 0; e < o; e += 4, r += 3) (i = (f[t.charCodeAt(e)] << 18) | (f[t.charCodeAt(e + 1)] << 12) | (f[t.charCodeAt(e + 2)] << 6) | f[t.charCodeAt(e + 3)]), (s[c++] = (i >> 16) & 255), (s[c++] = (i >> 8) & 255), (s[c++] = 255 & i); return ( 2 === a ? ((i = (f[t.charCodeAt(e)] << 2) | (f[t.charCodeAt(e + 1)] >> 4)), (s[c++] = 255 & i)) : 1 === a && ((i = (f[t.charCodeAt(e)] << 10) | (f[t.charCodeAt(e + 1)] << 4) | (f[t.charCodeAt(e + 2)] >> 2)), (s[c++] = (i >> 8) & 255), (s[c++] = 255 & i)), s ); } const z = (t) => (t.trim ? t.trim() : t.replace(/^\s+|\s+$/g, "")); const V = (t) => toByteArray(q(t)); const o_19 = (t, e) => (t = new Uint8Array(e)); const q = (t) => { t = z(t).replace(/[^+\/0-9A-Za-z-_]/g, ""); if (t.length < 2) return ""; while (t.length % 4 !== 0) t += "="; return t; }; function n_is_4(t) { const e = t.length; if (e % 4 > 0) throw new Error("Invalid string. Length must be a multiple of 4"); return "=" === t[e - 2] ? 2 : "=" === t[e - 1] ? 1 : 0; } function Y(t, e) { e = e || 1 / 0; for (var r, n = t.length, o = null, i = [], a = 0; a < n; ++a) { if ((r = t.charCodeAt(a)) > 55295 && r < 57344) { if (!o) { if (r > 56319) { (e -= 3) > -1 && i.push(239, 191, 189); continue; } if (a + 1 === n) { (e -= 3) > -1 && i.push(239, 191, 189); continue; } o = r; continue; } if (r < 56320) { (e -= 3) > -1 && i.push(239, 191, 189), (o = r); continue; } r = 65536 + (((o - 55296) << 10) | (r - 56320)); } else o && (e -= 3) > -1 && i.push(239, 191, 189); if (((o = null), r < 128)) { if ((e -= 1) < 0) break; i.push(r); } else if (r < 2048) { if ((e -= 2) < 0) break; i.push((r >> 6) | 192, (63 & r) | 128); } else if (r < 65536) { if ((e -= 3) < 0) break; i.push((r >> 12) | 224, ((r >> 6) & 63) | 128, (63 & r) | 128); } else { if (!(r < 1114112)) throw new Error("Invalid code point"); if ((e -= 4) < 0) break; i.push( (r >> 18) | 240, ((r >> 12) & 63) | 128, ((r >> 6) & 63) | 128, (63 & r) | 128 ); } } return i; } const write_E = (t, e, r, n) => X(Y(e, t.length - r), t, r, n); function write(k, t, e, r, n) { // 23 37 63 if (undefined === e) { n = "utf8"; r = k.length; e = 0; } else if (undefined === r && "string" === typeof e) (n = e), (r = k.length), (e = 0); else { if (!isFinite(e)) throw new Error( "Buffer.write(string, encoding, offset[, length]) is no longer supported" ); (e |= 0), isFinite(r) ? ((r |= 0), undefined === n && (n = "utf8")) : ((n = r), (r = undefined)); } let o = k.length - e; if ( ((undefined === r || r > o) && (r = o), (t.length > 0 && (r < 0 || e < 0)) || e > 0) ) throw new RangeError("Attempt to write outside buffer bounds"); n || (n = "utf8"); for (var i = !1; ; ) switch (n) { case "hex": return _(k, t, e, r); case "utf8": case "utf-8": return write_E(k, t, e, r); case "ascii": case "latin1": case "binary": case "base64": return S_24(k, t, e, r); case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": default: if (i) throw new TypeError("Unknown encoding: " + n); (n = ("" + n).toLowerCase()), (i = !0); } } const S_24 = (t, e, r, n) => X(V(e), t, r, n); function X(t, e, r, n) { for (var o = 0; o < n && !(o + r >= e.length || o >= t.length); ++o) e[o + r] = t[o]; return o; } function a_slice(k, t, e) { //~~ double NOT按位运算符。用它代替Math.floor(),因为它更快 let r = k.length; (t = ~~t), (e = undefined === e ? r : ~~e), t < 0 ? (t += r) < 0 && (t = 0) : t > r && (t = r), e < 0 ? (e += r) < 0 && (e = 0) : e > r && (e = r), e < t && (e = t); const n = k.subarray(t, e); return n; } const c = (t, e) => (t = o_19(t, e < 0 ? 0 : e)); const allocUnsafe = (t) => c(null, t); function a_68_copy(k, t, e, r, n) { if ( (r || (r = 0), n || 0 === n || (n = k.length), e >= t.length && (e = t.length), e || (e = 0), n > 0 && n < r && (n = r), n === r) ) return 0; if (0 === t.length || 0 === k.length) return 0; if (e < 0) throw new RangeError("targetStart out of bounds"); if (r < 0 || r >= k.length) throw new RangeError("sourceStart out of bounds"); if (n < 0) throw new RangeError("sourceEnd out of bounds"); n > k.length && (n = k.length), t.length - e < n - r && (n = t.length - e + r); var o, a = n - r; if (k === t && r < e && e < n) for (o = a - 1; o >= 0; --o) t[o + e] = k[o + r]; else if (a < 1e3 || !true) for (o = 0; o < a; ++o) t[o + e] = k[o + r]; else Uint8Array.prototype.set.call(t, k.subarray(r, r + a), e); return a; } function concat(t, e) { var r; if (undefined === e) for (e = 0, r = 0; r < t.length; ++r) e += t[r].length; var n = allocUnsafe(e), o = 0; for (r = 0; r < t.length; ++r) { var a = t[r]; a_68_copy(a, n, o), (o += a.length); } return n; } function a(e) { return ( "string" === typeof e && (e = t.from(e)), (0, null)(e, 41405).toString(16).replace(/^0+/, "") ); } function i_update(t, e, r) { if ("number" === typeof t) { if ("string" === typeof e) throw new Error( "If encoding is specified then the first argument must be a string" ); return c(this, t); } return a_g_Bt(this, t, e, r); } function update(kkk, t) { var r, o = "string" === typeof t; o && ((t = null), (o = !1), (r = !0)), "undefined" != typeof ArrayBuffer && t instanceof ArrayBuffer && ((r = !0), (t = new Uint8Array(t))); let c = t.length; if (0 == c) return kkk; if ( ((kkk.total_len += c), 0 == kkk.memsize && (kkk.memory = o ? "" : r ? new Uint8Array(32) : new i_update(32)), kkk.memsize + c < 32) ) return ( o ? (kkk.memory += t) : r ? kkk.memory.set(t.subarray(0, c), kkk.memsize) : a_68_copy(t, kkk.memory, kkk.memsize, 0, c), (kkk.memsize += c), kkk ); } function digest(kkk) { // 90 var a = i_i, // 这些加密数据有用 s = a("11400714785074694791"), u = a("14029467366897019727"), c = a("1609587929392839161"), f = a("9650029242287828579"), l = a("2870177450012600261"); var t, e, r = kkk.memory, n = "string" === typeof r, o = 0, i = kkk.memsize, h = new i_i(); for ( kkk.total_len >= 32 ? ((t = kkk.v1.clone().rotl(1)), t.add(kkk.v2.clone().rotl(7)), t.add(kkk.v3.clone().rotl(12)), t.add(kkk.v4.clone().rotl(18)), t.xor(kkk.v1.multiply(u).rotl(31).multiply(s)), t.multiply(s).add(f), t.xor(kkk.v2.multiply(u).rotl(31).multiply(s)), t.multiply(s).add(f), t.xor(kkk.v3.multiply(u).rotl(31).multiply(s)), t.multiply(s).add(f), t.xor(kkk.v4.multiply(u).rotl(31).multiply(s)), t.multiply(s).add(f)) : (t = add(kkk.seed.clone(), l)), add(t, s_this(kkk.total_len, h)); o <= i - 8; ) n ? a_a.call( h, (r.charCodeAt(o + 1) << 8) | r.charCodeAt(o), (r.charCodeAt(o + 3) << 8) | r.charCodeAt(o + 2), (r.charCodeAt(o + 5) << 8) | r.charCodeAt(o + 4), (r.charCodeAt(o + 7) << 8) | r.charCodeAt(o + 6) ) : a_a.call( h, (r[o + 1] << 8) | r[o], (r[o + 3] << 8) | r[o + 2], (r[o + 5] << 8) | r[o + 4], (r[o + 7] << 8) | r[o + 6] ), multiply(rotl.call(multiply(h, u), 31), s), add(multiply(rotl.call(xor.call(t, h), 27), s), f), (o += 8); for ( o + 4 <= i && (n ? h.fromBits( (r.charCodeAt(o + 1) << 8) | r.charCodeAt(o), (r.charCodeAt(o + 3) << 8) | r.charCodeAt(o + 2), 0, 0 ) : h.fromBits( (r[o + 1] << 8) | r[o], (r[o + 3] << 8) | r[o + 2], 0, 0 ), t.xor(multiply(h, s)).rotl(23).multiply(u).add(c), (o += 4)); o < i; ) h.fromBits(n ? r.charCodeAt(o++) : r[o++], 0, 0, 0), t.xor(h.multiply(l)).rotl(11).multiply(s); return ( (e = shiftRight.call(clone.call(t), 33)), multiply(xor.call(t, e), u), (e = shiftRight.call(clone.call(t), 29)), multiply(xor.call(t, e), c), (e = shiftRight.call(clone.call(t), 32)), xor.call(t, e), i_this.call(kkk, kkk.seed), t ); } function clone() { return new i_i(this._a00, this._a16, this._a32, this._a48); } function shiftRight(t) { return ( (t %= 64), t > 47 ? ((this._a00 = this._a48 >> (t - 48)), (this._a16 = 0), (this._a32 = 0), (this._a48 = 0)) : t > 31 ? ((t -= 32), (this._a00 = 65535 & ((this._a32 >> t) | (this._a48 << (16 - t)))), (this._a16 = (this._a48 >> t) & 65535), (this._a32 = 0), (this._a48 = 0)) : t > 15 ? ((t -= 16), (this._a00 = 65535 & ((this._a16 >> t) | (this._a32 << (16 - t)))), (this._a16 = 65535 & ((this._a32 >> t) | (this._a48 << (16 - t)))), (this._a32 = (this._a48 >> t) & 65535), (this._a48 = 0)) : ((this._a00 = 65535 & ((this._a00 >> t) | (this._a16 << (16 - t)))), (this._a16 = 65535 & ((this._a16 >> t) | (this._a32 << (16 - t)))), (this._a32 = 65535 & ((this._a32 >> t) | (this._a48 << (16 - t)))), (this._a48 = (this._a48 >> t) & 65535)), this ); } function o_default() { return 2 === arguments.length ? digest(update(new o_default(arguments[1]), arguments[0])) : this instanceof o_default ? void i_this.call(this, arguments[0]) : null; } function i_this(t) { var s = { remainder: null, _a00: 51847, _a16: 34283, _a32: 31153, _a48: 40503, clone: function () { return new i_i(this._a00, this._a16, this._a32, this._a48); }, }; var u = { remainder: null, _a00: 60239, _a16: 10196, _a32: 44605, _a48: 49842, }; return ( (this.seed = new i_a(t)), (this.v1 = add(add(this.seed.clone(), s), u)), (this.v2 = add(this.seed.clone(), u)), (this.v3 = this.seed.clone()), (this.v4 = subtract(this.seed.clone(), s)), (this.total_len = 0), (this.memsize = 0), (this.memory = null), this ); } const subtract = (a, t) => add(a, negate(clone.call(t))); function negate(a) { var t = 1 + (65535 & ~a._a00); return ( (a._a00 = 65535 & t), (t = (65535 & ~a._a16) + (t >>> 16)), (a._a16 = 65535 & t), (t = (65535 & ~a._a32) + (t >>> 16)), (a._a32 = 65535 & t), (a._a48 = (~a._a48 + (t >>> 16)) & 65535), a ); } function i_i(t, e, r, n) { return this instanceof i_i ? ((this.remainder = null), "string" === typeof t ? i_u.call(this, t, e) : undefined === e ? s_this.call(this, t) : void a_a.apply(this, arguments)) : new i_i(t, e, r, n); } function i_u(t, e) { (e = e || 10), (this._a00 = 0), (this._a16 = 0), (this._a32 = 0), (this._a48 = 0); for ( var r = c[e] || new i_i(Math.pow(e, 5)), n = 0, o = t.length; n < o; n += 5 ) { var a = Math.min(5, o - n), s = parseInt(t.slice(n, n + a), e); add( multiply(this, a < 5 ? new i_i(Math.pow(e, a)) : r), new i_i(s) ); } return this; } function multiply(k, t) { var e = k._a00, r = k._a16, n = k._a32, o = k._a48, i = t._a00, a = t._a16, s = t._a32, u = t._a48, c = e * i, f = c >>> 16; f += e * a; var l = f >>> 16; (f &= 65535), (f += r * i), (l += f >>> 16), (l += e * s); var h = l >>> 16; return ( (l &= 65535), (l += r * a), (h += l >>> 16), (l &= 65535), (l += n * i), (h += l >>> 16), (h += e * u), (h &= 65535), (h += r * s), (h &= 65535), (h += n * a), (h &= 65535), (h += o * i), (k._a00 = 65535 & c), (k._a16 = 65535 & f), (k._a32 = 65535 & l), (k._a48 = 65535 & h), k ); } function i_a(t) { // 73 75 78 80 return ( (this.remainder = null), (this._a00 = 65535 & t), (this._a16 = t >>> 16), (this._a32 = 0), (this._a48 = 0), (this.clone = function () { // 77 81 return new i_i(this._a00, this._a16, this._a32, this._a48); }), this ); } function s_this(t, k) { // 74 if (k) return ( (k._a00 = 65535 & t), (k._a16 = t >>> 16), (k._a32 = 0), (k._a48 = 0), k ); return ( (this._a00 = 65535 & t), (this._a16 = t >>> 16), (this._a32 = 0), (this._a48 = 0), this ); } function rotl(t) { if (0 === (t %= 64)) return this; if (t > 31) { var e = this._a00; if ( ((this._a00 = this._a32), (this._a32 = e), (e = this._a48), (this._a48 = this._a16), (this._a16 = e), 32 == t) ) return this; t -= 32; } var r = (this._a48 << 16) | this._a32, n = (this._a16 << 16) | this._a00, o = (r << t) | (n >>> (32 - t)), i = (n << t) | (r >>> (32 - t)); return ( (this._a00 = 65535 & i), (this._a16 = i >>> 16), (this._a32 = 65535 & o), (this._a48 = o >>> 16), this ); } function xor(t) { return ( (this._a00 ^= t._a00), (this._a16 ^= t._a16), (this._a32 ^= t._a32), (this._a48 ^= t._a48), this ); } function a_a(t, e, r, n) { return undefined === r ? ((this._a00 = 65535 & t), (this._a16 = t >>> 16), (this._a32 = 65535 & e), (this._a48 = e >>> 16), this) : ((this._a00 = 0 | t), (this._a16 = 0 | e), (this._a32 = 0 | r), (this._a48 = 0 | n), this); } function add(a, t) { // 83 85 var e = a._a00 + t._a00, r = e >>> 16; r += a._a16 + t._a16; var n = r >>> 16; n += a._a32 + t._a32; var o = n >>> 16; return ( (o += a._a48 + t._a48), (a._a00 = 65535 & e), (a._a16 = 65535 & r), (a._a32 = 65535 & n), (a._a48 = 65535 & o), a ); } function r_decrypt(e) { var r = arguments.length > 1 && undefined !== arguments[1] ? arguments[1] : "hjasbdn2ih823rgwudsde7e2dhsdhas"; "string" === typeof r && (r = [].map.call(r, function (t) { return t.charCodeAt(0); })); for ( var n, o = [], i = 0, a = new i_update(e.length), s = 0; s < 256; s++ ) o[s] = s; for (s = 0; s < 256; s++) (i = (i + o[s] + r[s % r.length]) % 256), (n = o[s]), (o[s] = o[i]), (o[i] = n); (s = 0), (i = 0); for (var u = 0; u < e.length; u++) (s = (s + 1) % 256), (i = (i + o[s]) % 256), (n = o[s]), (o[s] = o[i]), (o[i] = n), (a[u] = e[u] ^ o[(o[s] + o[i]) % 256]); return a; } function Bt(t) { var e = {}; (e.maxObjectSize = 1e8), (e.maxObjectCount = 32768), (e.parseFile = function (t, e) { function r(t) { var r, n = null; try { r = null; } catch (t) { n = t; } e(n, r); } }); function r(e) { var r = x[e], n = t[r], o = (240 & n) >> 4, i = 15 & n, a = { offset: r, type: n, objType: o, objInfo: i, tableOffset: e, }; switch (o) { case 0: return f(a); case 1: return h(a); case 8: return null; case 2: return d(a); case 3: return m(a); case 6: return y(a); case 4: return g(a); case 5: return g(a, !0); case 10: return v(a); case 13: return b(a); default: throw new Error(2, o.toString(16)); } } function f(t) { let e = t.objInfo, r = t.objType; switch (e) { case 0: return null; case 8: return !1; case 9: return !0; case 15: return null; default: throw new Error(3, r.toString(16)); } } function h(r) { var n = r.offset, o = r.objInfo, i = Math.pow(2, o); if (i < e.maxObjectSize) return a_h_Bt(a_slice(t, n + 1, n + 1 + i)); throw new Error("4 " + i + " " + e.maxObjectSize); } function d(r) { var n = r.offset, o = r.objInfo, i = Math.pow(2, o); if (!(i < e.maxObjectSize)) throw new Error("4 " + i + " " + e.maxObjectSize); var a = t.slice(n + 1, n + 1 + i); return 4 === i ? readFloatBE.call(a, 0) : 8 === i ? readDoubleBE.call(a, 0) : undefined; } function m(e) { var r = e.offset, n = e.objInfo; 3 != n && console.error(5, n); var o = t.slice(r + 1, r + 9); return new Date(9783072e5 + 1e3 * o.readDoubleBE(0)); } function y(r) { var n = r.offset, o = r.objInfo, a = 1, s = o; if (15 == o) { var u = t[n + 1], c = (240 & u) / 16; 1 != c && console.error(6, c); var f = 15 & u, l = Math.pow(2, f); (a = 2 + l), (s = null); } if (s < e.maxObjectSize) return t.slice(n + a, n + a + s); throw new Error("4 " + s + " " + e.maxObjectSize); } function g(r, o) { var a = r.offset, s = r.objInfo; o = o || 0; var u = "utf8", f = s, l = 1; if (15 == s) { var h = t[a + 1], p = (240 & h) / 16; if (1 != p) throw new Error("7 " + p); var d = 15 & h, m = Math.pow(2, d); (l = 2 + m), (f = i_Bt(a_slice(t, a + 2, a + 2 + m))); } if ((f *= o + 1) < e.maxObjectSize) { var y = new i_update(a_slice(t, a + l, a + l + f)); return ( o && ((y = c_g_Bt(y)), (u = "ucs2")), to_string_g_Bt.call(y, u) ); } throw new Error("4 " + f + " " + e.maxObjectSize); } function v(n) { var o = n.offset, a = n.objInfo, s = a, u = 1; if (15 == a) { var c = t[o + 1], f = (240 & c) / 16; var l = 15 & c, h = Math.pow(2, l); (u = 2 + h), (s = i_Bt(a_slice(t, o + 2, o + 2 + h))); } for (var p = [], d = 0; d < s; d++) { var m = i_Bt(a_slice(t, o + u + d * E, o + u + (d + 1) * E)); p[d] = r(m); } return p; } function b(n) { var o = n.offset, a = n.objInfo, s = (n.tableOffset, a), u = 1; if (15 == a) { var c = t[o + 1], f = (240 & c) / 16; 1 != f && console.error(9, f); var l = 15 & c, h = Math.pow(2, l); (u = 2 + h), (s = null); } if (2 * s * E > e.maxObjectSize) throw new Error(4); for (var p = {}, d = 0; d < s; d++) { var m = i_Bt(a_slice(t, o + u + d * E, o + u + (d + 1) * E)), y = i_Bt( a_slice( t, o + u + s * E + d * E, o + u + s * E + (d + 1) * E ) ), g = r(m), v = r(y); p[g] = v; } return p; } var w = a_slice(t, t.length - 32, t.length), _ = readUInt8.call(w, 6), E = readUInt8.call(w, 7), A = s_Bt(w, 8), C = s_Bt(w, 16), S = s_Bt(w, 24); for (var x = [], O = 0; O < A; O++) { var T = a_slice(t, S + O * _, S + (O + 1) * _); x[O] = i_Bt(T, 0); } return r(C); } function readUInt8(t) { return this[t]; } function s_Bt(t, e) { return readUInt32BE.call(a_slice(t, e, e + 8), 4, 8); } function readUInt32BE(t) { return ( 16777216 * this[t] + ((this[t + 1] << 16) | (this[t + 2] << 8) | this[t + 3]) ); } function i_Bt(t, e) { e = e || 0; for (var r = 0, n = e; n < t.length; n++) (r <<= 8), (r |= 255 & t[n]); return r; } function a_g_Bt(t, e, r, n) { if ("number" === typeof e) throw new TypeError('"value" argument must not be a number'); return "undefined" != typeof ArrayBuffer && e instanceof ArrayBuffer ? null : "string" === typeof e ? f(t, e, r) : p_a(t, e); } function p_a(t, e) { let r = e.length; return ( (t = o_19(t, r)), 0 === t.length ? t : (a_68_copy(e, t, 0, 0, r), t) ); } function c_g_Bt(t) { for (var e = t.length, r = 0; r < e; r += 2) { var n = t[r]; (t[r] = t[r + 1]), (t[r + 1] = n); } return t; } function to_string_g_Bt() { const t = this.length; return 0 === t ? "" : 0 === arguments.length ? null : g_to_string.apply(this, arguments); } function g_to_string(t, e, r) { var n = !1; if (((undefined === e || e < 0) && (e = 0), e > this.length)) return ""; if (((undefined === r || r > this.length) && (r = this.length), r <= 0)) return ""; if (((r >>>= 0), (e >>>= 0), r <= e)) return ""; for (t || (t = "utf8"); ; ) switch (t) { case "hex": case "utf8": case "utf-8": return T_g(this, e, r); case "ascii": case "latin1": case "binary": case "base64": case "ucs2": case "ucs-2": case "utf16le": case "utf-16le": return j_g(this, e, r); default: if (n) throw new TypeError("Unknown encoding: " + t); (t = (t + "").toLowerCase()), (n = !0); } } function j_g(t, e, r) { for (var n = a_slice(t, e, r), o = "", i = 0; i < n.length; i += 2) o += String.fromCharCode(n[i] + 256 * n[i + 1]); return o; } function T_g(t, e, r) { r = Math.min(t.length, r); for (var n = [], o = e; o < r; ) { var i = t[o], a = null, s = i > 239 ? 4 : i > 223 ? 3 : i > 191 ? 2 : 1; if (o + s <= r) { var u, c, f, l; switch (s) { case 1: i < 128 && (a = i); break; case 2: (u = t[o + 1]), 128 === (192 & u) && (l = ((31 & i) << 6) | (63 & u)) > 127 && (a = l); break; case 3: (u = t[o + 1]), (c = t[o + 2]), 128 === (192 & u) && 128 === (192 & c) && (l = ((15 & i) << 12) | ((63 & u) << 6) | (63 & c)) > 2047 && (l < 55296 || l > 57343) && (a = l); break; case 4: (u = t[o + 1]), (c = t[o + 2]), (f = t[o + 3]), 128 === (192 & u) && 128 === (192 & c) && 128 === (192 & f) && (l = ((15 & i) << 18) | ((63 & u) << 12) | ((63 & c) << 6) | (63 & f)) > 65535 && l < 1114112 && (a = l); } } null === a ? ((a = 65533), (s = 1)) : a > 65535 && ((a -= 65536), n.push(((a >>> 10) & 1023) | 55296), (a = 56320 | (1023 & a))), n.push(a), (o += s); } return P_T(n); } function P_T(t) { const e = t.length; if (e < 4097) return String.fromCharCode.apply(String, t); for (var r = "", n = 0; n < e; ) r += String.fromCharCode.apply(String, a_slice(t, n, (n += 4096))); return r; } const a_h_Bt = (t, e, r) => ( (e = e || 0), (r = r || t.length - e), readIntBE.call(t, e, r) ); function readIntBE(t, e, r) { (t |= 0), (e |= 0), r || undefined; for (var n = e, o = 1, i = this[t + --n]; n > 0 && (o *= 256); ) i += this[t + --n] * o; return (o *= 128), i >= o && (i -= Math.pow(2, 8 * e)), i; } function readFloatBE(t, e) { return e || undefined, K.read(this, t, !1, 23, 4); } function readDoubleBE(t, e) { return e || undefined, K.read(this, t, !1, 52, 8); } function kt(t) { var i = Ut; function n(e) { if (1 === Object.keys(e).length && undefined !== e[i.$UID]) return o(e[i.$UID]); if (i.$vals in e) { var t = e[i.$keys], n = e[i.$vals]; return t ? t.reduce(function (e, t, i) { return (e[o(t)] = r(n[i])), e; }, {}) : n.map(function (e) { return o(e); }); } return Object.keys(e).reduce(function (t, n) { var o = e[n]; return (t[n] = r(o)), t; }, {}); } function r(t) { return "Object" === (0, i.getType)(t) ? n(t) : "Array" === (0, i.getType)(t) ? t.map((e) => r(e)) : t instanceof i_update ? (0 === t[t.length - 1] && (t = t.slice(0, t.length - 1)), t.toString()) : t; } const o = (e) => r(t[(0, i.getRealUID)(e)]); return o( arguments.length > 1 && undefined !== arguments[1] ? arguments[1] : (0, i.getRealUID)(i.$defaultRootUID) ); } const n_n = (r) => e_e(t)(r_r)(r); function e_e(e) { return function (e) { return function (t) { var n = Object.keys(t)[0], r = Ut.crypto.decrypt(t[n], n); return e(r); }; }; } function e_e_decrypt(e) { return function (e) { return function (t) { return e(Bt(t)); }; }; } function playload(e) { return function (e) { return function (t) { return e({ type: "INIT", payload: kt(t), }); }; }; } const r_r = (r) => e_e_decrypt(t)(e_e_decrypt_n)(r); const e_e_decrypt_n = (r) => playload(t)(e_playload)(r); //interface const decrypt = (data) => { try { let a = encry2arr_from(data, "base64"), // 0 s = Math.max(Math.floor((a.length - 32) / 3), 0), // 40 u = a_slice(a, s, s + 16); // 41 a = concat([a_slice(a, 0, s), a_slice(a, s + 16)]); // 43 45 47 let c_data = hash(concat([u, encry2arr_from("")])); // 49 67 69 let l = {}; l[c_data] = a; return n_n(((l = {}), (l[c_data] = a), l)); } catch (err) { console.log(err); return null; } }; const createPannel = { frame(lists) { const html = ` <div id="settingLayerMask" > <style> #settingLayerMask { display: flex; align-items: stretch; justify-content: center; position: fixed; top: 0; right: 0; bottom: 0; left: 0; background-color: rgba(0, 0, 0, 0.5); z-index: 200000000; overflow: auto; font-family: arial, sans-serif; min-height: 100%; font-size: 16px; transition: 0.5s; padding-bottom: 80px; box-sizing: border-box; } #settingLayer { box-sizing: unset !important; height: 560px; display: flex; flex-wrap: wrap; padding: 20px; margin: 0px 25px 50px 5px; background-color: #fff; border-radius: 4px; position: absolute; min-width: 580px; max-width: 580px; transition: 0.5s; } #search-close { background: white; color: #3abdc1; line-height: 20px; height: fit-content; width: fit-content; text-align: center; font-size: 20px; padding: 10px; border: 3px solid #3abdc1; border-radius: 50%; transition: 0.5s; top: -20px; right: -20px; position: absolute; } .item-movie-root { padding: 15px 20px !important; display: flex; position: relative; -webkit-box-pack: justify; justify-content: space-between; border: 4px dashed rgba(133, 144, 166, 0.2) !important; border-radius: 6px !important; margin: 5px 0px !important; } .item_detail{ flex: 1; } .item_pl { font: 12px Arial, Helvetica, sans-serif; line-height: 150%; color: #666666; } a:link { color: #37a; } .item_meta { margin-top: 7px; color: #999; font-size: 12px; line-height: 1.5; } a.title.text { vertical-align: middle; line-height: 1.5; } img.cover { height: 120px; width: 100px; margin: 1px; margin-right: 40px; } #search-close::before { content: "\\2716"; } </style> <div id="settingLayer" style="top: 45%; left: 50%; transform: translate(-50%, -50%)" > <div class="setting_content" style="margin-left: 1%; height: 100%; min-width:560px; max-width: 560px;"> <ul class="items_list" style="overflow:auto;height: 100%;"> ${lists.join("")} </ul> </div> <span id="search-close" title="close"></span> </div> </div>`; document.documentElement.insertAdjacentHTML("beforeend", html); this.event(); }, item_raw(info) { const bpurl = "data:image/gif;base64,R0lGODlhZACRANUAAOzs7NnZ2cXFxeTk5Pb29ry8vO3t7dHR0cfHx8/Pz/r6+sDAwLe3t9TU1OLi4sHBwdjY2PHx8crKyvj4+Ovr6/Ly8tbW1rW1tefn58nJydPT093d3c7OztXV1bq6uu/v7+rq6tvb27Kysv///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAABkAJEAAAb/QJBwSCwaj8ikcslsOp/QqHTKHFmv2Kx2y+16v+Bw9jMUm8/o9JksVLvfcDH7E6/b6/O7fm/O8/+AY2WBhH9+hYh2h4mMbouNkH2DkZRhj5WYWpeZnCObnZifoJSio5ClpoyoqYirrISur4Cxsny0tXq3uIqTu6q9vq3AwbDDxLPGaREAzM3Oz9DR0syBupoPItna29zd3t/cFrbJYgfZAujpAgkB7e7v8PHvBs0OARLZCXvWVwUiDQoiAcgGIBe5L/4cYErwz2CbNBn+UaEXTZ47hVcCNLxjbSC4jyBDMohgRWMAh3TQMBTJsqUIASU38np4RoDLmyFjnuR4kItN/5xAvelECTGo0W1DedI08/Oo0aQzU9Z0ehQqnp5bmlLFGdAkUTRat7os6FWpVKZigZKVeXWpmLDapsmNtuDj2p1Riwq1A3fb3a9TvakbTLiwOgZ2R5TNCzYtzr9m9TpuCZlx4MksKShmG8daX8zfKrc9+xZ05s14R0sWPFEkCNSA0YKD6cY17MiNPyIwzDud7cWqc5sGKbozVi2fh/vdTNuybOXg1jYPfhm6N+mxS1sPzTx7BYrgw2Pbfp353PDoBbkdEKK9+/ft/ZHvtrYA/Pv43Q9QT5p9fvfyzbecRvb9Z2AI+2HxiH8GBiggQZsVeGB+CV6x4IQOPljfhP9VaP/FhQdmKOCGHOLnoSfAMPifiPORWCJ8J4LY4IMDiiDhi/rxl4WK+bFInos4thdjihjSGFeEQb435HpFGikCkEEu2V+TRkKJo5Q7UkmjlS9iiQWP+Pm4HZclenkFmPeJaR2ZHJppBZrwqQkdmxO6OQKc78mpHJ0H2okngE4+iWSSQur4pZYaemIjoYUqSOSBCARa0EA3RmnomRNG6uSkizLqZ6aSKlrplZe+CeqmojKKYKl3nlplqp6y+md7mr5KqaqfQhrqrbE6yqSuqDKUAa6yurqlA532auGjBta6ZQMaqNrosr82G2gD0ubo65TAGnlAttN+yKyBTnoAbrgoVmvhIAcXPPgABOeuum2WJR5g7734fhvvvkoWy++/8eYK8MDEznsowQgnKXDCDNfpb8MQd/hwxBT3azCmFWeMrowaU7xwxxDbOQEBJJds8skop6zyyiy37HLKrB6DjFsyG3JczW/wg7McN++sTM8+rwF00DzTTLRxRh+d89BKe6Fz05owDfUWT09NLWlW/5x01kVjzbUkW3/9RdVZk2212VOjDbXaTbOttNtHw0203EHT7bPdO+ONs9418y2z38cATozgwRDui+G7II6L4rXM4fjjkEcu+###V2755ZhPpPnmmgcBADs="; const purl = info.cover_url; let rate = info.rating && info.rating.value; const count = info.rating && info.rating.count; let style = ""; if (rate) { rate = parseFloat(rate); const color = rate > 7.9 ? "green" : rate < 6.5 ? "red" : "#D4652F"; style = `style="color: ${color};"`; } const html = ` <li class="item-movie-root"> <a href=${info.url} class="cover-link" target="_blank" ><img src=${ !purl || ["essay", "default", "banner"].some((x) => purl.includes(x) ) ? bpurl : purl } crossorigin="anonymous" referrerpolicy="no-referrer" class="cover" /></a> <div class="item_detail"> <div class="item_title"> <a class="title-text" href=${info.url} target="_blank" >${info.title}</a > </div> <div class="rating"> <span class="rating_nums" ${style}>评分: ${ rate || "暂无评价" }</span ><span class="item_pl"> (${ count ? count + "人" : "评分人数不足" })</span> </div> <div class="item_meta abstract"> ${info.abstract || "尚无信息"} </div> <div class="item_meta abstract_2"> ${info.abstract_2 || "尚无信息"} </div> </div> </li>`; return html; }, node: null, remove() { if (this.node) { this.node.parentNode.remove(); this.node = null; } }, event() { setTimeout(() => { this.node = document.getElementById("settingLayer"); //使用onclick, 注意事件被覆蓋的問題, 这会导致a标签无法跳转 this.node.addEventListener( "click", (e) => e.target.id === "search-close" && this.remove() ); }, 25); }, main(arr) { this.node ? this.remove() : this.frame(arr.map((e) => this.item_raw(e))); }, }; const xmlHTTPRequest = (url, time = 3500, rType = false) => { return new Promise(function (resolve, reject) { GM_xmlhttpRequest({ method: "GET", url: url, timeout: time, onload: (response) => { if (response.status == 200) resolve(rType ? response.finalUrl : response.response); else { console.log(`err: code ${response.status}`); reject("request data error"); } }, onerror: (e) => { console.log(e); reject("something error"); }, ontimeout: (e) => { console.log(e); reject("timeout error"); }, }); }); }; const get_data = (url) => { return new Promise((resolve, reject) => { xmlHTTPRequest(url).then( (html) => { if (html) { const dom = new DOMParser().parseFromString( html, "text/html" ); const scripts = dom.getElementsByTagName("script"); if (scripts.length > 0) { for (const e of scripts) { if (e.type === "text/javascript") { const text = e.text; if ( text && text.includes("window.__DATA") ) { resolve( text.slice( text.indexOf('"') + 1, text.lastIndexOf('"') ) ); return; } } } } reject(null); } }, () => reject(null) ); }); }; const get_search_r###lts = (url) => { get_data(url).then((data) => { if (data) { const d = decrypt(data); if (!d) { alert("failed to decrypt data"); return; } if (d.payload.error_info || d.payload.items.length === 0) { alert("no search r###lts"); return; } createPannel.main(d.payload.items); } else alert("failed to get html content"); }); }; document.onkeydown = (e) => { const code = e.key; if ( !(code === "1" || code === "2") || e.shiftKey || e.ctrlKey || e.altKey ) return; let cl = ""; if ( (e.target.localName && ["input", "textarea"].includes( e.target.localName.toLowerCase() )) || ((cl = e.target.className) && (cl = cl.toLocaleUpperCase()) && ["draft", "editor", "text", "code"].some((c) => cl.includes(c))) ) return; const s = window.getSelection().toString(); s && get_search_r###lts( "https://search.douban.com/" + (code === "1" ? `book/subject_search?search_text=${encodeURIComponent( s )}&cat=1001` : `movie/subject_search?search_text=${encodeURIComponent( s )}&cat=1002`) ); }; })();