{"id":122,"date":"2016-05-12T11:29:25","date_gmt":"2016-05-12T03:29:25","guid":{"rendered":"http:\/\/www.lnzdl.com\/blog\/?p=122"},"modified":"2016-05-12T11:29:25","modified_gmt":"2016-05-12T03:29:25","slug":"xunlei-any-player","status":"publish","type":"post","link":"http:\/\/www.lnzdl.com\/blog\/xunlei-any-player\/","title":{"rendered":"Xunlei.Any.Player"},"content":{"rendered":"<p>\/\/ ==UserScript==<br \/>\/\/ @name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Xunlei.Any.Player<br \/>\/\/ @namespace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Xunlei.Any.Player<br \/>\/\/ @description&nbsp;&nbsp;&nbsp; Xunlei.Any.Player, should be working on xlpan.com and can play any url as you wish.<br \/>\/\/ @match&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href=\"http:\/\/xlpan.com\/\">http:\/\/xlpan.com\/<\/a>*<br \/>\/\/ @match&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href=\"http:\/\/f.xunlei.com\/\">http:\/\/f.xunlei.com\/<\/a>*<br \/>\/\/ @updateURL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href=\"https:\/\/userscripts.org\/scripts\/source\/138814.meta.js\">https:\/\/userscripts.org\/scripts\/source\/138814.meta.js<\/a><br \/>\/\/ @downloadURL&nbsp;&nbsp;&nbsp; <a href=\"https:\/\/userscripts.org\/scripts\/source\/138814.user.js\">https:\/\/userscripts.org\/scripts\/source\/138814.user.js<\/a><br \/>\/\/ @version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.45<br \/>\/\/ ==\/UserScript==<br \/>function proxy(fn) {<br \/> var script = document.createElement(&#8216;script&#8217;);<br \/> script.textContent = &#8216;(&#8216; + fn.toString() + &#8216;)(window);&#8217;;<br \/> document.body.appendChild(script);<br \/>}<br \/>function main(Global){<br \/> var CONSTANTS = {<br \/>&nbsp; tips: &#8216;&lt;div class=&#8221;tips_container&#8221;&gt;&lt;div class=&#8221;close&#8221;&gt;X&lt;\/div&gt;&lt;form autocomplete=&#8221;off&#8221; class=&#8221;url_form&#8221;&gt;&lt;input type=&#8221;text&#8221; placeholder=&#8221;\\u64ad\\u653eURL, \\u9700\\u8981 \\u6ce8\\u518c \\u6216 \\u767b\\u9646&#8243; name=&#8221;url&#8221; \/&gt;&lt;input type=&#8221;submit&#8221; value=&#8221;\\u64ad\\u653e&#8221; \/&gt;&lt;\/form&gt;&lt;select class=&#8221;record&#8221;&gt;&lt;\/select&gt;&amp;emsp;&lt;a href=&#8221;#&#8221; class=&#8221;record_clear&#8221;&gt;\\u6e05\\u7a7a&lt;\/a&gt;&lt;br \/&gt;Xunlei.Any.Player \\u5DF2\\u542F\\u7528&amp;emsp;&lt;a href=&#8221;<a href=\"http:\/\/opengg.me\/821\/xunlei-any-player\/\">http:\/\/opengg.me\/821\/xunlei-any-player\/<\/a>&#8221; style=&#8221;color:blue&#8221; target=&#8221;_blank&#8221;&gt;\\u53CD\\u9988&lt;\/a&gt;&lt;\/div&gt;&#8217;,<br \/>&nbsp; css: &#8216;.tips_container{position:fixed;bottom:2em;right:2em;color:green;opacity:0.4;background:#fff;padding:10px;z-index:99999}.tips_container:hover{opacity:0.9}.tips_container .close{position:absolute;top:0;right:0;color:red;cursor:pointer}.tips_container select, .tips_container select option{max-width:18em}&#8217;,<br \/>&nbsp; playerjs: &#8216;http:\/\/caiji.f.xunlei.com\/fileConsume\/v21\/min2js\/player.js&#8217;,<br \/>&nbsp; title: &#8216;Xunlei.Any.Player &#8211; OpenGG&#8217;<br \/> };<br \/> var UTILS = {<br \/>&nbsp; addCss: function(str){<br \/>&nbsp;&nbsp; var style = document.createElement(&#8216;style&#8217;);<br \/>&nbsp;&nbsp; style.textContent = str;<br \/>&nbsp;&nbsp; document.head.appendChild(style);<br \/>&nbsp; },<br \/>&nbsp; getScript: function (src) {<br \/>&nbsp;&nbsp; var script = document.createElement(&#8216;script&#8217;);<br \/>&nbsp;&nbsp; script.src = src;<br \/>&nbsp;&nbsp; document.body.appendChild(script);<br \/>&nbsp; },<br \/>&nbsp; addDom: function(html, callback){<br \/>&nbsp;&nbsp; var div = document.createElement(&#8216;div&#8217;);<br \/>&nbsp;&nbsp; div.innerHTML = html;<br \/>&nbsp;&nbsp; callback.call(div,div);<br \/>&nbsp;&nbsp; document.body.appendChild(div);<br \/>&nbsp; },<br \/>&nbsp; validate: function(url){<br \/>&nbsp;&nbsp; var magnetPattern = \/magnet:\\?xt=urn:btih:([a-zA-Z0-9]+)\/;<br \/>&nbsp;&nbsp; if(magnetPattern.test(url)){<br \/>&nbsp;&nbsp;&nbsp; return url.match(magnetPattern)[0];<br \/>&nbsp;&nbsp; }<br \/>&nbsp;&nbsp; return url;<br \/>&nbsp; },<br \/>&nbsp; getCookie: function(ae) {<br \/>&nbsp;&nbsp; return (document.cookie.match(new RegExp(&#8220;(^&#8221; + ae + &#8220;| &#8221; + ae + &#8220;)=([^;]*)&#8221;)) == null) ? &#8220;&#8221; : RegExp.$2<br \/>&nbsp; },<br \/>&nbsp; proxy: function(fn){<br \/>&nbsp;&nbsp; var script = document.createElement(&#8216;script&#8217;);<br \/>&nbsp;&nbsp; script.textContent = &#8216;(&#8216; + fn.toString() + &#8216;)(window);&#8217;;<br \/>&nbsp;&nbsp; document.body.appendChild(script);<br \/>&nbsp; },<br \/>&nbsp; isArray: function(o){<br \/>&nbsp;&nbsp; return Object.prototype.toString.call(o).indexOf(&#8216;Array&#8217;)!==-1;<br \/>&nbsp; }<br \/> };<br \/> var STORE;<br \/> (function(){<br \/>&nbsp; function empty(){}<br \/>&nbsp; var isStorage = true;<br \/>&nbsp; if(!Global.localStorage){<br \/>&nbsp;&nbsp; isStorage = false;<br \/>&nbsp; }else{<br \/>&nbsp;&nbsp; try{<br \/>&nbsp;&nbsp;&nbsp; var key = String(Math.random());<br \/>&nbsp;&nbsp;&nbsp; localStorage.setItem(key,&#8217;test&#8217;);<br \/>&nbsp;&nbsp;&nbsp; if(localStorage.getItem(key)!==&#8217;test&#8217;){<br \/>&nbsp;&nbsp;&nbsp;&nbsp; throw &#8216;not equal&#8217;;<br \/>&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp; localStorage.removeItem(key);<br \/>&nbsp;&nbsp; }catch(e){<br \/>&nbsp;&nbsp;&nbsp; isStorage=false;<br \/>&nbsp;&nbsp; }<br \/>&nbsp; }<br \/>&nbsp; STORE = {<br \/>&nbsp;&nbsp; getItem: isStorage?function(key){<br \/>&nbsp;&nbsp;&nbsp; var item;<br \/>&nbsp;&nbsp;&nbsp; try{<br \/>&nbsp;&nbsp;&nbsp;&nbsp; item = JSON.parse(localStorage.getItem(key));<br \/>&nbsp;&nbsp;&nbsp; }catch(e){<br \/>&nbsp;&nbsp;&nbsp;&nbsp; return undefined;<br \/>&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp; return item;<br \/>&nbsp;&nbsp; }:empty,<br \/>&nbsp;&nbsp; setItem: isStorage?function(key, value){<br \/>&nbsp;&nbsp;&nbsp; return localStorage.setItem(key, JSON.stringify(value));<br \/>&nbsp;&nbsp; }:empty,<br \/>&nbsp;&nbsp; removeItem: isStorage?function(key){<br \/>&nbsp;&nbsp;&nbsp; return localStorage.removeItem(key);<br \/>&nbsp;&nbsp; }:empty,<br \/>&nbsp;&nbsp; pushArr: isStorage?function(key, value){<br \/>&nbsp;&nbsp;&nbsp; var arr = this.getItem(key);<br \/>&nbsp;&nbsp;&nbsp; if(!UTILS.isArray(arr)){<br \/>&nbsp;&nbsp;&nbsp;&nbsp; arr = [];<br \/>&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp; arr.push(value);<br \/>&nbsp;&nbsp;&nbsp; return this.setItem(key, arr);<br \/>&nbsp;&nbsp; }:empty,<br \/>&nbsp; };<br \/> })();<br \/> (function (c) {<br \/>&nbsp; function h(a, e) {<br \/>&nbsp;&nbsp; return a &lt;&lt; e | a &gt;&gt;&gt; 32 &#8211; e<br \/>&nbsp; }<br \/>&nbsp; function m(a) {<br \/>&nbsp;&nbsp; var e = &#8220;&#8221;,<br \/>&nbsp;&nbsp;&nbsp; c, g;<br \/>&nbsp;&nbsp; for (c = 7; 0 &lt;= c; c&#8211;) g = a &gt;&gt;&gt; 4 * c &amp; 15, e += g.toString(16);<br \/>&nbsp;&nbsp; return e<br \/>&nbsp; }<br \/>&nbsp; c.SHA1 = function (a, e) {<br \/>&nbsp;&nbsp; var c, g, i = Array(80),<br \/>&nbsp;&nbsp;&nbsp; l = 1732584193,<br \/>&nbsp;&nbsp;&nbsp; q = 4023233417,<br \/>&nbsp;&nbsp;&nbsp; C = 2562383102,<br \/>&nbsp;&nbsp;&nbsp; z = 271733878,<br \/>&nbsp;&nbsp;&nbsp; v = 3285377520,<br \/>&nbsp;&nbsp;&nbsp; f, p, r, s, x, A, w = [];<br \/>&nbsp;&nbsp; for (g = 0; g &lt; e &#8211; 3; g += 4) c = a[g] &lt;&lt; 24 | a[g + 1] &lt;&lt; 16 | a[g + 2] &lt;&lt; 8 | a[g + 3], w.push(c);<br \/>&nbsp;&nbsp; switch (e % 4) {<br \/>&nbsp;&nbsp; case 0:<br \/>&nbsp;&nbsp;&nbsp; g = 2147483648;<br \/>&nbsp;&nbsp;&nbsp; break;<br \/>&nbsp;&nbsp; case 1:<br \/>&nbsp;&nbsp;&nbsp; g = a[e &#8211; 1] &lt;&lt; 24 | 8388608;<br \/>&nbsp;&nbsp;&nbsp; break;<br \/>&nbsp;&nbsp; case 2:<br \/>&nbsp;&nbsp;&nbsp; g = a[e &#8211; 2] &lt;&lt; 24 | a[e &#8211; 1] &lt;&lt; 16 | 32768;<br \/>&nbsp;&nbsp;&nbsp; break;<br \/>&nbsp;&nbsp; case 3:<br \/>&nbsp;&nbsp;&nbsp; g = a[e &#8211; 3] &lt;&lt; 24 | a[e &#8211; 2] &lt;&lt; 16 | a[e &#8211; 1] &lt;&lt; 8 | 128<br \/>&nbsp;&nbsp; }<br \/>&nbsp;&nbsp; for (w.push(g); 14 != w.length % 16;) w.push(0);<br \/>&nbsp;&nbsp; w.push(e &gt;&gt;&gt; 29);<br \/>&nbsp;&nbsp; w.push(e &lt;&lt; 3 &amp; 4294967295);<br \/>&nbsp;&nbsp; for (c = 0; c &lt; w.length; c += 16) {<br \/>&nbsp;&nbsp;&nbsp; for (g = 0; 16 &gt; g; g++) i[g] = w[c + g];<br \/>&nbsp;&nbsp;&nbsp; for (g = 16; 79 &gt;= g; g++) i[g] = h(i[g &#8211; 3] ^ i[g &#8211; 8] ^ i[g &#8211; 14] ^ i[g &#8211; 16], 1);<br \/>&nbsp;&nbsp;&nbsp; f = l;<br \/>&nbsp;&nbsp;&nbsp; p = q;<br \/>&nbsp;&nbsp;&nbsp; r = C;<br \/>&nbsp;&nbsp;&nbsp; s = z;<br \/>&nbsp;&nbsp;&nbsp; x = v;<br \/>&nbsp;&nbsp;&nbsp; for (g = 0; 19 &gt;= g; g++) A = h(f, 5) + (p &amp; r | ~p &amp; s) + x + i[g] + 1518500249 &amp; 4294967295, x = s, s = r, r = h(p, 30), p = f, f = A;<br \/>&nbsp;&nbsp;&nbsp; for (g = 20; 39 &gt;= g; g++) A = h(f, 5) + (p ^ r ^ s) + x + i[g] + 1859775393 &amp; 4294967295, x = s, s = r, r = h(p, 30), p = f, f = A;<br \/>&nbsp;&nbsp;&nbsp; for (g = 40; 59 &gt;= g; g++) A = h(f, 5) + (p &amp; r | p &amp; s | r &amp; s) + x + i[g] + 2400959708 &amp; 4294967295, x = s, s = r, r = h(p, 30), p = f, f = A;<br \/>&nbsp;&nbsp;&nbsp; for (g = 60; 79 &gt;= g; g++) A = h(f, 5) + (p ^ r ^ s) + x + i[g] + 3395469782 &amp; 4294967295, x = s, s = r, r = h(p, 30), p = f, f = A;<br \/>&nbsp;&nbsp;&nbsp; l = l + f &amp; 4294967295;<br \/>&nbsp;&nbsp;&nbsp; q = q + p &amp; 4294967295;<br \/>&nbsp;&nbsp;&nbsp; C = C + r &amp; 4294967295;<br \/>&nbsp;&nbsp;&nbsp; z = z + s &amp; 4294967295;<br \/>&nbsp;&nbsp;&nbsp; v = v + x &amp; 4294967295<br \/>&nbsp;&nbsp; }<br \/>&nbsp;&nbsp; A = m(l) + m(q) + m(C) + m(z) + m(v);<br \/>&nbsp;&nbsp; return A.toUpperCase()<br \/>&nbsp; }<br \/> })(UTILS);<br \/> (function(parent, Global){<br \/>&nbsp; function getFiles(d, h) {<br \/>&nbsp;&nbsp; var p = k = &#8221;, i = j = 0, m = [];<br \/>&nbsp;&nbsp; var l = 0;<br \/>&nbsp;&nbsp; for ( j = d.length; i &lt; j; i++ ) {<br \/>&nbsp;&nbsp;&nbsp; if ( d[i] === 58 ) {<br \/>&nbsp;&nbsp;&nbsp;&nbsp; p = String.fromCharCode(d[++i], d[++i], d[++i], d[++i], d[++i]);<br \/>&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u5982\u679cp\u7b49\u4e8epiece\uff0c\u7ed3\u675f\u5faa\u73af<br \/>&nbsp;&nbsp;&nbsp;&nbsp; if ( p === &#8216;piece&#8217; )<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br \/>&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u5982\u679cp\u4e0d\u7b49\u4e8epathl\uff0c\u7ed3\u675f\u672c\u6b21\u5faa\u73af<br \/>&nbsp;&nbsp;&nbsp;&nbsp; else if ( p !== &#8216;pathl&#8217; )<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;<br \/>&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u8fed\u4ee3\u5f97\u5230\u6587\u4ef6\u540d<br \/>&nbsp;&nbsp;&nbsp;&nbsp; p = (function itera(i) {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for ( p = k = &#8221;; d[i] !== 58; i++ )<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; k += String.fromCharCode(d[i]);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for ( k = parseInt(k); k &gt; 0; k&#8211; )<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p += &#8216;%&#8217; + radix(d[++i],10,16);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p = decodeURIComponent(p)<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch(e) {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p = unescape(p)<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return d[++i] === 101 ? p : itera(i);<br \/>&nbsp;&nbsp;&nbsp;&nbsp; })(++i);<br \/>&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u6587\u4ef6\u540d\u52a0\u5165\u6570\u7ec4<br \/>&nbsp;&nbsp;&nbsp;&nbsp; m.push({name:p,id:l++});<br \/>&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp; }<br \/>&nbsp;&nbsp; \/\/\u5224\u65ad\u6587\u4ef6\u662f\u5426\u662f\u5a92\u4f53\u6587\u4ef6\uff0c\u5e76\u8fd4\u56de\u6587\u4ef6\u5217\u8868<br \/>&nbsp;&nbsp; var files = [];<br \/>&nbsp;&nbsp; for ( i = 0, j = m.length; i &lt; j; i++ ) {<br \/>&nbsp;&nbsp;&nbsp; if ( \/\\.(3gp|asf|avi|dat|flv|f4v|m4v|mkv|mov|mp4|mpeg|mpg|mts|ogv|rm|rmvb|ts|vob|webm|wmv)$\/i.test(m[i].name) ) {<br \/>&nbsp;&nbsp;&nbsp;&nbsp; files.push({name:m[i].name,id:m[i].id});<br \/>&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp; }<br \/>&nbsp;&nbsp; return files;<br \/>&nbsp; } <\/p>\n<p>&nbsp; function getLength(d, m, i, j, k) {<br \/>&nbsp;&nbsp; var p = &#8221;, l = n = m.length &#8211; 1, o = m.substr(0, 1);<br \/>&nbsp;&nbsp; if ( k === -1 )<br \/>&nbsp;&nbsp;&nbsp; var getLenTest = function() { return i &gt; j };<br \/>&nbsp;&nbsp; else<br \/>&nbsp;&nbsp;&nbsp; var getLenTest = function() { return i &lt; j };<br \/>&nbsp;&nbsp; for ( ; getLenTest(); i += k ) {<br \/>&nbsp;&nbsp;&nbsp; p = String.fromCharCode(d[i]);<br \/>&nbsp;&nbsp;&nbsp; if ( p === o ) {<br \/>&nbsp;&nbsp;&nbsp;&nbsp; for ( ; n &gt; 0; n&#8211; )<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p += String.fromCharCode(d[++i]);<br \/>&nbsp;&nbsp;&nbsp;&nbsp; if ( p === m )<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return i;<br \/>&nbsp;&nbsp;&nbsp;&nbsp; else if ( k === -1 )<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; i -= l;<br \/>&nbsp;&nbsp;&nbsp;&nbsp; n = l;<br \/>&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp; }<br \/>&nbsp;&nbsp; return false;<br \/>&nbsp; }<br \/>&nbsp; \/\/\u8fdb\u5236\u8f6c\u6362<br \/>&nbsp; function radix(o, before, after) {<br \/>&nbsp;&nbsp; return parseInt(o, before).toString(after);<br \/>&nbsp; };<br \/>&nbsp; function readFile(file, o_start, o_stop, callback) {<br \/>&nbsp;&nbsp; var reader = new FileReader();<br \/>&nbsp;&nbsp; var start = o_start || 0;<br \/>&nbsp;&nbsp; var stop = o_stop || file.size &#8211; 1;<br \/>&nbsp;&nbsp; \/\/\u622a\u53d6\u6587\u4ef6\u5f00\u59cb\/\u7ed3\u675f<br \/>&nbsp;&nbsp; if ( file.slice ){<br \/>&nbsp;&nbsp;&nbsp; var blob = file.slice(start, stop + 1);<br \/>&nbsp;&nbsp; } else {<br \/>&nbsp;&nbsp;&nbsp; throw &#8216;Not supported by you browser.&#8217;;<br \/>&nbsp;&nbsp;&nbsp; return;<br \/>&nbsp;&nbsp; }<br \/>&nbsp;&nbsp; if ( o_start ) {<br \/>&nbsp;&nbsp;&nbsp; \/\/\u7b2c\u4e8c\u6b21\u8bfb\u53d6\u5b8c\u6587\u4ef6<br \/>&nbsp;&nbsp;&nbsp; reader.onloadend = function(event) {<br \/>&nbsp;&nbsp;&nbsp;&nbsp; if ( event.target.readyState == FileReader.DONE ) {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var uint8Array = new Uint8Array(event.target.result);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u8ba1\u7b97\u51faSHA1<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var hash = parent.SHA1(uint8Array, uint8Array.length);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u83b7\u53d6\u79cd\u5b50\u4e2d\u5a92\u4f53\u6587\u4ef6\u5217\u8868<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var files = getFiles(uint8Array, hash);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u533a\u522b\u591a\u6587\u4ef6\u79cd\u5b50\\\u5355\u6587\u4ef6\u79cd\u5b50\u8f6c\u6362\u7684\u94fe\u63a5<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var links = [];<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0;i&lt;files.length;++i){<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; links.push({name:files[i].name,link:&#8217;bt:\/\/&#8217;+hash+&#8217;\/&#8217;+files[i].id});<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; callback(links);<br \/>&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp; } else if ( file ) {<br \/>&nbsp;&nbsp;&nbsp; \/\/\u7b2c\u4e00\u6b21\u8bfb\u53d6\u5b8c\u6587\u4ef6<br \/>&nbsp;&nbsp;&nbsp; reader.onloadend = function(event) {<br \/>&nbsp;&nbsp;&nbsp;&nbsp; if ( event.target.readyState == FileReader.DONE ) {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var uint8Array = new Uint8Array(event.target.result);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var leng = uint8Array.length;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u67e5\u627e4:info\u4f4d\u7f6e\uff0c\u5982\u679c\u6709\u5c31\u662f\u79cd\u5b50\u6587\u4ef6<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var start = getLength(uint8Array, &#8216;4:info&#8217;, 0, leng, 1);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( !start ) {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw &#8216;Not torrent.&#8217;;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u67e5\u627e5:nodes\u4f4d\u7f6e\uff0c\u5982\u679c\u6ca1\u6709\uff0c\u90a3\u4e48\u4f4d\u7f6e\u7b49\u4e8e\u7ed3\u5c3e\u957f\u5ea6\u51cf1<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var stop = getLength(uint8Array, &#8216;5:nodes&#8217;, leng, -1, -1);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stop = stop ? stop &#8211; 7 : leng &#8211; 2;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/\u8bfb\u53d6\u6587\u4ef64:info\u5f00\u59cb\/5:nodes\u7ed3\u675f\u4f4d\u7f6e<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; readFile(file, start + 1, stop, callback);<br \/>&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp; }<br \/>&nbsp;&nbsp; reader.readAsArrayBuffer(blob);<br \/>&nbsp; }<br \/>&nbsp; function readTorrent(file, callback){<br \/>&nbsp;&nbsp; file.slice = file.slice||file.mozSlice||file.webkitSlice;<br \/>&nbsp;&nbsp; if(!(Global.File &amp;&amp; Global.FileReader &amp;&amp; Global.FileList &amp;&amp; Global.Blob &amp;&amp; file.slice)){<br \/>&nbsp;&nbsp;&nbsp; throw &#8216;Not supported by browser.&#8217;;<br \/>&nbsp;&nbsp; }<br \/>&nbsp;&nbsp; readFile(file,0,0,callback);<br \/>&nbsp; }<br \/>&nbsp; parent.readTorrent = readTorrent;<br \/> })(UTILS, typeof Global!==&#8217;undefined&#8217;?Global:this);<br \/> (function(Global){<br \/>&nbsp;&nbsp;&nbsp;&nbsp; var cache = {};<br \/>&nbsp;&nbsp;&nbsp;&nbsp; Global.PubSub = Global.PubSub||{<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; on: function(e,fn){<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!cache[e]){<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cache[e]=[];<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cache[e].push(fn);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return fn;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; off: function(e,fn){<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!cache[e]){<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var fns = cache[e];<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!fn){<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fns.length=0;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0;i&lt;fns .length;++i){<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(fns[i]===fn){<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fns.splice(i,1);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; trigger: function(e,data){<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(!cache[e]){<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var fns = cache[e];<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(var i=0;i&lt;fns.length;++i){<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fns[i](e,data);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp;&nbsp; };<br \/> })(typeof Global!==&#8217;undefined&#8217;?Global:this);<br \/> function play(e ,opts){<br \/>&nbsp; opts = opts||{};<br \/>&nbsp; var XL_CLOUD_FX_INSTANCE = Global.XL_CLOUD_FX_INSTANCE;<br \/>&nbsp; var url = UTILS.validate(opts.url);<br \/>&nbsp; var title = opts.title;<br \/>&nbsp; if(!url){<br \/>&nbsp;&nbsp; alert(&#8216;Invalid url&#8217;);<br \/>&nbsp;&nbsp; return;<br \/>&nbsp; }<br \/>&nbsp; if(title){<br \/>&nbsp;&nbsp; document.title = [title,CONSTANTS.title].join(&#8216; &#8211; &#8216;);<br \/>&nbsp; }<br \/>&nbsp; var setAttribute = Global.SWFObject&amp;&amp;Global.SWFObject.prototype&amp;&amp;Global.SWFObject.prototype.setAttribute;<br \/>&nbsp; if(setAttribute&amp;&amp;setAttribute.toString().indexOf(&#8216;arguments&#8217;)===-1){<br \/>&nbsp;&nbsp; Global.SWFObject.prototype.setAttribute = function(){<br \/>&nbsp;&nbsp;&nbsp; if(arguments.length&gt;1&amp;&amp;arguments[0]===&#8217;swf&#8217;){<br \/>&nbsp;&nbsp;&nbsp;&nbsp; var pieces = arguments[1].split(&#8216;?&#8217;);<br \/>&nbsp;&nbsp;&nbsp;&nbsp; if(pieces.length&gt;2){<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pieces.length = 2;<br \/>&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp;&nbsp; var url = pieces.join(&#8216;?&#8217;);<br \/>&nbsp;&nbsp;&nbsp;&nbsp; return setAttribute.call(this, &#8216;swf&#8217;, url);<br \/>&nbsp;&nbsp;&nbsp; }else{<br \/>&nbsp;&nbsp;&nbsp;&nbsp; return setAttribute.apply(this, arguments);<br \/>&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp; };<br \/>&nbsp; }<br \/>&nbsp; if(XL_CLOUD_FX_INSTANCE){<br \/>&nbsp;&nbsp; XL_CLOUD_FX_INSTANCE.user.u = UTILS.getCookie(&#8220;userid&#8221;);<br \/>&nbsp;&nbsp; XL_CLOUD_FX_INSTANCE.user.v = 1;<br \/>&nbsp;&nbsp; XL_CLOUD_FX_INSTANCE.user.s = UTILS.getCookie(&#8220;sessionid&#8221;);<br \/>&nbsp;&nbsp; XL_CLOUD_FX_INSTANCE.isXlpan = true;<br \/>&nbsp;&nbsp; XL_CLOUD_FX_INSTANCE.query(encodeURIComponent(url));<br \/>&nbsp;&nbsp; return;<br \/>&nbsp; }<br \/>&nbsp; var XL_CLOUD_VOD_PLAYER = document.querySelector(&#8216;#XL_CLOUD_VOD_PLAYER&#8217;);<br \/>&nbsp; if(!XL_CLOUD_VOD_PLAYER){<br \/>&nbsp;&nbsp; var container = document.querySelector(&#8216;#interestContent&#8217;) || document.querySelector(&#8216;#wrap&#8217;) || document.body;<br \/>&nbsp;&nbsp; var html = &#8216;&lt;div from=&#8221;xlpan_web&#8221; style=&#8221;height: 457px; width: 680px; background-color: rgb(0, 0, 0); overflow: hidden;&#8221; id=&#8221;XL_CLOUD_VOD_PLAYER&#8221; name=&#8221;XL_CLOUD_VOD_PLAYER&#8221;&gt;&lt;a enable_kkva=&#8221;true&#8221; autoplay=&#8221;true&#8221; href=&#8221;{url}&#8221; style=&#8221;display:none;&#8221; onclick=&#8221;return false;&#8221; onsuccess=&#8221;successBack&#8221; onfail=&#8221;failBack&#8221;&gt;&lt;\/a&gt;&lt;\/div&gt;&#8217;.replace(&#8216;{url}&#8217;,url);<br \/>&nbsp;&nbsp; container.innerHTML = html;<br \/>&nbsp;&nbsp; UTILS.proxy(function(Global){<br \/>&nbsp;&nbsp;&nbsp; Global.parseConfigBaseUrl = &#8220;<a href=\"http:\/\/caiji.f.xunlei.com\/\">http:\/\/caiji.f.xunlei.com<\/a>&#8220;;<br \/>&nbsp;&nbsp;&nbsp; Global.parseConfigVer = &#8216;v21&#8217;;<br \/>&nbsp;&nbsp;&nbsp; Global.parseConfigJs = &#8216;min2js&#8217;;<br \/>&nbsp;&nbsp;&nbsp; Global.rarConfigUrl = {<br \/>&nbsp;&nbsp;&nbsp;&nbsp; version:parseConfigVer,<br \/>&nbsp;&nbsp;&nbsp;&nbsp; BaseUrl:parseConfigBaseUrl + &#8220;\/fileConsume\/&#8221; + parseConfigVer + &#8220;\/&#8221;,<br \/>&nbsp;&nbsp;&nbsp;&nbsp; imgBaseUrl:parseConfigBaseUrl + &#8220;\/fileConsume\/&#8221; + parseConfigVer + &#8220;\/images\/&#8221;,<br \/>&nbsp;&nbsp;&nbsp;&nbsp; cssBaseUrl:parseConfigBaseUrl + &#8220;\/fileConsume\/&#8221; + parseConfigVer + &#8220;\/css\/&#8221;,<br \/>&nbsp;&nbsp;&nbsp;&nbsp; swfBaseUrl:parseConfigBaseUrl + &#8220;\/fileConsume\/&#8221; + parseConfigVer + &#8220;\/swf\/&#8221;,<br \/>&nbsp;&nbsp;&nbsp;&nbsp; jsMinBaseUrl:parseConfigBaseUrl + &#8220;\/fileConsume\/&#8221; + parseConfigVer + &#8220;\/minjs\/&#8221;,<br \/>&nbsp;&nbsp;&nbsp;&nbsp; jsBaseUrl:parseConfigBaseUrl + &#8220;\/fileConsume\/&#8221; + parseConfigVer + &#8220;\/&#8221; + parseConfigJs + &#8220;\/&#8221;,<br \/>&nbsp;&nbsp;&nbsp;&nbsp; editBaseUrl:parseConfigBaseUrl + &#8220;\/fileConsume\/&#8221; + parseConfigVer + &#8220;\/&#8221; + parseConfigJs + &#8220;\/edit\/&#8221;<br \/>&nbsp;&nbsp;&nbsp; };<br \/>&nbsp;&nbsp;&nbsp; Global.DEBUG=false;<br \/>&nbsp;&nbsp;&nbsp; Global.Debug={<br \/>&nbsp;&nbsp;&nbsp;&nbsp; trace:function(){}<br \/>&nbsp;&nbsp;&nbsp; };<br \/>&nbsp;&nbsp; });<br \/>&nbsp;&nbsp; UTILS.getScript(CONSTANTS.playerjs);<br \/>&nbsp; }<br \/> }<br \/> PubSub.on(&#8216;video:play&#8217;, play);<br \/> function push(e, records){<br \/>&nbsp; for(var i=0;i&lt;records.length;++i){<br \/>&nbsp;&nbsp; var record = records[i];<br \/>&nbsp;&nbsp; STORE.pushArr(&#8216;record&#8217;,{name:record.name||&#8217;No name&#8217;, link: record.link});<br \/>&nbsp; }<br \/>&nbsp; PubSub.trigger(&#8216;record:load&#8217;);<br \/> }<br \/> PubSub.on(&#8216;record:push&#8217;, push);<br \/> UTILS.addCss(CONSTANTS.css);<br \/> UTILS.addDom(CONSTANTS.tips, function(){<br \/>&nbsp; function cancel(e){<br \/>&nbsp;&nbsp; e.stopPropagation();<br \/>&nbsp;&nbsp; e.preventDefault();<br \/>&nbsp;&nbsp; return false;<br \/>&nbsp; }<br \/>&nbsp; var that = this;<br \/>&nbsp; that.addEventListener(&#8216;dragenter&#8217;, cancel, false);<br \/>&nbsp; that.addEventListener(&#8216;dragover&#8217;, cancel, false);<br \/>&nbsp; that.addEventListener(&#8216;drop&#8217;, function(e){<br \/>&nbsp;&nbsp; UTILS.readTorrent(e.dataTransfer ? e.dataTransfer.files[0] : e.target.files[0], function (files) {<br \/>&nbsp;&nbsp;&nbsp; PubSub.trigger(&#8216;record:push&#8217;, files);<br \/>&nbsp;&nbsp;&nbsp; files.length&gt;0&amp;&amp;PubSub.trigger(&#8216;video:play&#8217;,{url:files[0].link});<br \/>&nbsp;&nbsp; });<br \/>&nbsp;&nbsp; return cancel(e);<br \/>&nbsp; }, false);<br \/>&nbsp; that.querySelector(&#8216;.close&#8217;).addEventListener(&#8216;click&#8217;,function(){<br \/>&nbsp;&nbsp; that.parentNode.removeChild(that);<br \/>&nbsp; },false);<br \/>&nbsp; that.querySelector(&#8216;.url_form&#8217;).addEventListener(&#8216;submit&#8217;,function(e){<br \/>&nbsp;&nbsp; e.preventDefault();<br \/>&nbsp;&nbsp; var url = this.querySelector(&#8216;input[name=&#8221;url&#8221;]&#8217;).value;<br \/>&nbsp;&nbsp; PubSub.trigger(&#8216;video:play&#8217;, {url: url});<br \/>&nbsp;&nbsp; PubSub.trigger(&#8216;record:push&#8217;, [{link:url}]);<br \/>&nbsp;&nbsp; return false;<br \/>&nbsp; },false);<br \/>&nbsp; var select = that.querySelector(&#8216;.record&#8217;);<br \/>&nbsp; select.addEventListener(&#8216;change&#8217;,function(e){<br \/>&nbsp;&nbsp; var select = e.target;<br \/>&nbsp;&nbsp; var index = select.selectedIndex;<br \/>&nbsp;&nbsp; var option = select.options[index];<br \/>&nbsp;&nbsp; if(option.value){<br \/>&nbsp;&nbsp;&nbsp; PubSub.trigger(&#8216;video:play&#8217;, {title: option.textContent, url: option.value});<br \/>&nbsp;&nbsp; }<br \/>&nbsp; },false);<br \/>&nbsp; function load(){<br \/>&nbsp;&nbsp; var records = STORE.getItem(&#8216;record&#8217;);<br \/>&nbsp;&nbsp; if(!records){<br \/>&nbsp;&nbsp;&nbsp; records=[];<br \/>&nbsp;&nbsp; }<br \/>&nbsp;&nbsp; var options = [&#8216;&lt;option value=&#8221;&#8221;&gt;Play records&lt;\/option&gt;&#8217;];<br \/>&nbsp;&nbsp; for(var i=0;i&lt;records.length;++i){<br \/>&nbsp;&nbsp;&nbsp; var item = records[i];<br \/>&nbsp;&nbsp;&nbsp; options.push(&#8216;&lt;option value=&#8221;&#8216;+item.link+'&#8221;&gt;&#8217;+item.name+'&lt;\/option&gt;&#8217;);<br \/>&nbsp;&nbsp; }<br \/>&nbsp;&nbsp; select.innerHTML = options.join(&#8221;);<br \/>&nbsp; }<br \/>&nbsp; that.querySelector(&#8216;.record_clear&#8217;).addEventListener(&#8216;click&#8217;,function(e){<br \/>&nbsp;&nbsp; e.preventDefault;<br \/>&nbsp;&nbsp; STORE.removeItem(&#8216;record&#8217;);<br \/>&nbsp;&nbsp; PubSub.trigger(&#8216;record:load&#8217;);<br \/>&nbsp;&nbsp; return false;<br \/>&nbsp; });<br \/>&nbsp; PubSub.on(&#8216;record:load&#8217;, load);<br \/>&nbsp; PubSub.trigger(&#8216;record:load&#8217;);<br \/> });<br \/>}<br \/>proxy(main);<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\/\/ ==UserScript==\/\/ @name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Xunlei.Any.Player\/\/ @namespace&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Xunlei.Any.Player\/\/ @description&nbsp;&nbsp;&nbsp; Xu [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"_links":{"self":[{"href":"http:\/\/www.lnzdl.com\/blog\/wp-json\/wp\/v2\/posts\/122"}],"collection":[{"href":"http:\/\/www.lnzdl.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.lnzdl.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.lnzdl.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.lnzdl.com\/blog\/wp-json\/wp\/v2\/comments?post=122"}],"version-history":[{"count":1,"href":"http:\/\/www.lnzdl.com\/blog\/wp-json\/wp\/v2\/posts\/122\/revisions"}],"predecessor-version":[{"id":123,"href":"http:\/\/www.lnzdl.com\/blog\/wp-json\/wp\/v2\/posts\/122\/revisions\/123"}],"wp:attachment":[{"href":"http:\/\/www.lnzdl.com\/blog\/wp-json\/wp\/v2\/media?parent=122"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.lnzdl.com\/blog\/wp-json\/wp\/v2\/categories?post=122"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.lnzdl.com\/blog\/wp-json\/wp\/v2\/tags?post=122"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}