Descargue el audio VKontakte a través del cliente js o la extensión de archivo .m3u8

Cómo empezó todo ...


Como siempre, colgado en VKontakte, decidí descargar un par de nuevas grabaciones de audio a la computadora. Pero me decepcionó: las grabaciones de audio volvieron en un formato extraño: m3u8. Este formato ni siquiera reproducía vlc media pleyer, y comencé a pensar qué hacer ...

¿Qué hace realmente?


Buscando en Google qué tipo de formato .m3u8 es, me di cuenta de que este es audio en formato .m3u . Ok, descargue este archivo .m3u8, ábralo con un editor de texto y vea algo como esto:

Texto
#EXTM3U #EXT-X-TARGETDURATION:3 #EXT-X-ALLOW-CACHE:YES #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:1 #EXTINF:1.000, 6cfGpgIDcrZjA.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:2.000, c2d2tpKzIsYzM.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:3.000, a3fWlvLDwmZD4.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:3.000, edeWZhKTUnazE.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:3.000, 9df2NqJzcmZj0.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXT-X-ENDLIST 


Además entendemos que

 9df2NqJzcmZj0.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh 

- camino a la grabación de audio. Es decir, debe sustituir un host para cada ruta y, muy probablemente, este audio se podrá reproducir. Después de haber lanzado rápidamente un par de líneas de código en python, implementamos esto:

Código
 import re text='''#EXTM3U #EXT-X-TARGETDURATION:3 #EXT-X-ALLOW-CACHE:YES #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:1 #EXTINF:1.000, 6cfGpgIDcrZjA.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:2.000, c2d2tpKzIsYzM.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:3.000, a3fWlvLDwmZD4.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:3.000, edeWZhKTUnazE.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:3.000, 9df2NqJzcmZj0.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXT-X-ENDLIST''' host='https://cs9-5v4.vkuseraudio.net/p16/d5fce44eae6dbc/' al = re.findall('\n.+?\.ts\?extra\=.+?\n',text) for r in al: text=text.replace(r,'\n'+host+r.strip('\n')+'\n') print(text) input() nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh import re text='''#EXTM3U #EXT-X-TARGETDURATION:3 #EXT-X-ALLOW-CACHE:YES #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:1 #EXTINF:1.000, 6cfGpgIDcrZjA.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:2.000, c2d2tpKzIsYzM.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:3.000, a3fWlvLDwmZD4.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:3.000, edeWZhKTUnazE.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:3.000, 9df2NqJzcmZj0.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXT-X-ENDLIST''' host='https://cs9-5v4.vkuseraudio.net/p16/d5fce44eae6dbc/' al = re.findall('\n.+?\.ts\?extra\=.+?\n',text) for r in al: text=text.replace(r,'\n'+host+r.strip('\n')+'\n') print(text) input() nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh import re text='''#EXTM3U #EXT-X-TARGETDURATION:3 #EXT-X-ALLOW-CACHE:YES #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:1 #EXTINF:1.000, 6cfGpgIDcrZjA.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:2.000, c2d2tpKzIsYzM.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:3.000, a3fWlvLDwmZD4.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:3.000, edeWZhKTUnazE.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:3.000, 9df2NqJzcmZj0.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXT-X-ENDLIST''' host='https://cs9-5v4.vkuseraudio.net/p16/d5fce44eae6dbc/' al = re.findall('\n.+?\.ts\?extra\=.+?\n',text) for r in al: text=text.replace(r,'\n'+host+r.strip('\n')+'\n') print(text) input() nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh import re text='''#EXTM3U #EXT-X-TARGETDURATION:3 #EXT-X-ALLOW-CACHE:YES #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:1 #EXTINF:1.000, 6cfGpgIDcrZjA.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:2.000, c2d2tpKzIsYzM.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:3.000, a3fWlvLDwmZD4.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:3.000, edeWZhKTUnazE.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:3.000, 9df2NqJzcmZj0.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXT-X-ENDLIST''' host='https://cs9-5v4.vkuseraudio.net/p16/d5fce44eae6dbc/' al = re.findall('\n.+?\.ts\?extra\=.+?\n',text) for r in al: text=text.replace(r,'\n'+host+r.strip('\n')+'\n') print(text) input() nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh import re text='''#EXTM3U #EXT-X-TARGETDURATION:3 #EXT-X-ALLOW-CACHE:YES #EXT-X-PLAYLIST-TYPE:VOD #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:1 #EXTINF:1.000, 6cfGpgIDcrZjA.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:2.000, c2d2tpKzIsYzM.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:3.000, a3fWlvLDwmZD4.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:3.000, edeWZhKTUnazE.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXTINF:3.000, 9df2NqJzcmZj0.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh #EXT-X-ENDLIST''' host='https://cs9-5v4.vkuseraudio.net/p16/d5fce44eae6dbc/' al = re.findall('\n.+?\.ts\?extra\=.+?\n',text) for r in al: text=text.replace(r,'\n'+host+r.strip('\n')+'\n') print(text) input() 


y obtenemos un archivo .m3u ya jugable.

PERO! El problema es que:

  • Este archivo solo se puede reproducir mientras los enlaces a espacios de audio son válidos.
  • También puede convertir el archivo solo mientras los enlaces sean válidos
  • Solo puede convertir el archivo en la computadora en la que se recibió. Los enlaces están vinculados a la dirección IP de la PC.

Habiendo entendido todo esto, decidí escribir un programa en el cliente js para que pudiera ejecutarse en la línea de comando. Esto es lo que obtuve:

El programa
 class music_get{ constructor(){ this.el=document.getElementsByClassName("audio_row"); this.str_param=[]; this.json=[]; this.last_len=this.el.length; this.make_str(this.el); this.load_audio_to_json(0,this.str_param[0]); } parse(element_){ //,  id ,     ,   . //let i=JSON.parse(element_.attributes['data-audio'].nodeValue),s1=i[13].split("/"); //return i[1]+"_"+i[0]+"_"+s1[2]+"_"+s1[s1.length-2]; let i = AudioUtils.asObject(JSON.parse(element_.getAttribute('data-audio'))); return i.fullId+"_"+i.actionHash+"_"+i.urlHash; } encode_url(t) { //,     let c = {v:(t)=> { return t.split('').reverse().join('')},r: (t, e) => {t = t.split('');for (let i, o = _ + _, a = t.length; a--; ) ~(i = o.indexOf(t[a])) && (t[a] = o.substr(i - e, 1));return t.join('')}, s: (t,e)=> { let i = t.length;if (i) { let o = function(t, e) {let i = t.length,o = [];if (i) {let a = i;for (e = Math.abs(e); a--; ) e = (i * (a + 1) ^ e + a) % i,o[a] = e }return o}(t, e), a = 0;for (t = t.split(''); ++a < i; ) t[a] = t.splice(o[i - 1 - a], 1, t[a]) [0];t = t.join('')}return t}, i:(t, e)=> {return cs(t, e ^ vk.id)},x: (t, e)=> {let i = [];return e = e.charCodeAt(0),each(t.split(''), (t, o) => {i.push(String.fromCharCode(o.charCodeAt(0) ^ e))}),i.join('')} },_ = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN0PQRSTUVWXYZO123456789+/=',h=(t)=>{ if (!t || t.length % 4 == 1) return !1;for (var e, i, o = 0, a = 0, s = ''; i = t.charAt(a++); ) ~(i = _.indexOf(i)) && (e = o % 4 ? 64 * e + i : i, o++ % 4) && (s += String.fromCharCode(255 & e >> ( - 2 * o & 6)));return s}; if ((!window.wbopen || !~(window.open + '').indexOf('wbopen')) && ~t.indexOf('audio_api_unavailable')) { let e = t.split('?extra=')[1].split('#'),i=''===e[1]?'':h(e[1]); if (e = h(e[0]), 'string' != typeof i || !e) return t;for (var o, a, s = (i = i ? i.split(String.fromCharCode(9)) : []).length; s--; ) {if (o = (a = i[s].split(String.fromCharCode(11))).splice(0, 1, e) [0], !c[o]) return t; e = c[o].apply(null, a)}if (e && 'http' === e.substr(0, 4)) return e}return t } end(){ //    html    each(this.json,(_,item)=>{ let els = document.querySelectorAll('[data-full-id="'+item.fullId+'"]')[0]; if(els.children[0].children[6].children.length===3)return; els.children[0].children[6].innerHTML+="<div onclick='new music_download().download(this);' style='float:right;height:40px;width:40px;background:url(/doc472427950_504561254) no-repeat 5px 5px;'></div>" els.children[0].children[6].children[2].attributes.info=item; }); } make_str(mass){ //,    str_param   id ,     . each(mass,(i,e)=>{ if(Math.floor(i/10)===i/10) this.str_param.push(this.parse(e)); else this.str_param[this.str_param.length-1]+=","+this.parse(e); }); } load_audio_to_json(i,l){ //    ,        , //       this.json ajax.post("/al_audio.php",{act:'reload_audio',al:'1',ids:l},{onDone:(a)=>{ //each - ,     vk.com -   array.forEach each(a,(_,c)=>{ c=AudioUtils.asObject(c); //   ,    ) c.url = this.encode_url(c.url); this.json.push(c); }); // if(this.str_param.length-1===i) this.end(); else this.load_audio_to_json(i+1,this.str_param[i+1]); }}); } _update_scroll(){ //,    . if(this.el.length===this.last_len)return; let c = this.el.length,offset=c-this.last_len; this.last_len=c; let arr = Array.from(this.el).splice(-offset); this._load_button(arr); } _load_button(list){ //,    . let leng=this.str_param.length-1; this.make_str(list); this.load_audio_to_json(leng,this.str_param[leng]); } } class music_download{ //constructor(){} download(e){ this.info = e.attributes.info; //   - .mp3,        if(this.info.url.indexOf(".mp3?")!==-1) window.open(this.info.url); else //       .m3u8,   (), //       .ts,    . //    response: fetch(this.info.url).then((e)=>e.text().then((e)=>this.response(e))); } response(data){ let alls = data.match(/\n.+?\.ts\?/ig), host=this.info.url.split("index.m3u8")[0]; each(alls,(_,e)=>data=data.replace(e,"\n"+host+e.replace('\n',''))); //   this.download_data(this.info.title.replace(/[-\/\\:*?"<>|]/gim,'')+".m3u8",data); } download_data(f_n, t) { let e = document.createElement('a'); e.setAttribute('href', //'data:text/plain;charset=utf-8,' 'data:text/html;base64,'+ btoa(t)); e.setAttribute('download', f_n); e.style.display = 'none'; document.body.appendChild(e); e.click(); document.body.removeChild(e); } } var mus = new music_get(); //  window.onscroll=()=>mus._update_scroll(); 

El resultado es algo como esto:


Además, después de descargar todo el audio en una carpeta, escribí el siguiente código de Python para convertir todo el audio .m3u8 a .ts :

Código
 import requests,re,os def convert_mp3(f): z=open(f).read() con=list(map(lambda e: e.rstrip('\n').rstrip('#EXT-X-ENDLIST').rstrip("\n") if '#EXTM3U' not in e else '' ,re.split('#EXTINF:\d+.\d+,\n',z))) z = b'' for r in con: if(r==''):continue; z+=requests.get(r).content open(f.strip(".m3u8")+".ts",'bw').write(z) z=set() for file in os.listdir(): if file.endswith(".m3u8"): z.add(file) convert_mp3(file) z=',\n'.join(z) input(f":{z} .\n Enter,  !") 


En principio, puede intentar combinar extractos .ts en js y luego descargar todo el archivo, pero no tuve éxito (

PD que triunfa - escribe en los comentarios
PPS Olvidé decir que Yandex.browser todavía devuelve enlaces a .mp3)

Actualización:


Como notó correctamente nokimaro , puede descargar mp3 de inmediato:
codigo
 class music_get{ constructor(){ this.el=document.getElementsByClassName("audio_row"); this.s=[]; this.j=[]; this.last_len=this.el.length; this.make_str(this.el); this.load_audio_to_json(0,this.s[0]); } parse(element_){ //,  id ,     ,   . //let i=JSON.parse(element_.attributes['data-audio'].nodeValue),s1=i[13].split("/"); //return i[1]+"_"+i[0]+"_"+s1[2]+"_"+s1[s1.length-2]; let i = AudioUtils.asObject(JSON.parse(element_.getAttribute('data-audio'))); return i.fullId+"_"+i.actionHash+"_"+i.urlHash; } encode_url(t) { //,     let c = {v:(t)=> { return t.split('').reverse().join('')},r: (t, e) => {t = t.split('');for (let i, o = _ + _, a = t.length; a--; ) ~(i = o.indexOf(t[a])) && (t[a] = o.substr(i - e, 1));return t.join('')}, s: (t,e)=> { let i = t.length;if (i) { let o = function(t, e) {let i = t.length,o = [];if (i) {let a = i;for (e = Math.abs(e); a--; ) e = (i * (a + 1) ^ e + a) % i,o[a] = e }return o}(t, e), a = 0;for (t = t.split(''); ++a < i; ) t[a] = t.splice(o[i - 1 - a], 1, t[a]) [0];t = t.join('')}return t}, i:(t, e)=> {return cs(t, e ^ vk.id)},x: (t, e)=> {let i = [];return e = e.charCodeAt(0),each(t.split(''), (t, o) => {i.push(String.fromCharCode(o.charCodeAt(0) ^ e))}),i.join('')} },_ = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN0PQRSTUVWXYZO123456789+/=',h=(t)=>{ if (!t || t.length % 4 == 1) return !1;for (var e, i, o = 0, a = 0, s = ''; i = t.charAt(a++); ) ~(i = _.indexOf(i)) && (e = o % 4 ? 64 * e + i : i, o++ % 4) && (s += String.fromCharCode(255 & e >> ( - 2 * o & 6)));return s}; if ((!window.wbopen || !~(window.open + '').indexOf('wbopen')) && ~t.indexOf('audio_api_unavailable')) { let e = t.split('?extra=')[1].split('#'),i=''===e[1]?'':h(e[1]); if (e = h(e[0]), 'string' != typeof i || !e) return t;for (var o, a, s = (i = i ? i.split(String.fromCharCode(9)) : []).length; s--; ) {if (o = (a = i[s].split(String.fromCharCode(11))).splice(0, 1, e) [0], !c[o]) return t; e = c[o].apply(null, a)}if (e && 'http' === e.substr(0, 4)) return e}return t } end(){ //    html    each(this.j,(_,i)=>{ let e = document.querySelectorAll('[data-full-id="'+i.fullId+'"]')[0],q=e.children[0].children[6]; if(q.children.length===3)return; q.innerHTML+="<a href='"+this._g(i)+"' target='_blank' style='float:right;height:40px;width:40px;background:url(/doc472427950_504561254) no-repeat 5px 5px;'></a>" }); } _g(info){ if(info.url.indexOf(".mp3?")!==-1) return info.url; else return info.url.replace("/index.m3u8",".mp3").replace(/\/\w{11}\//,'/'); } make_str(mass){ //,    s   id ,     . each(mass,(i,e)=>{ if(Math.floor(i/10)===i/10) this.s.push(this.parse(e)); else this.s[this.s.length-1]+=","+this.parse(e); }); } load_audio_to_json(i,l){ //    ,        , //       this.j ajax.post("/al_audio.php",{act:'reload_audio',al:'1',ids:l},{onDone:(a)=>{ //each - ,     vk.com -   array.forEach each(a,(_,c)=>{ c=AudioUtils.asObject(c); //   ,    ) c.url = this.encode_url(c.url); this.j.push(c); }); // if(this.s.length-1===i) this.end(); else this.load_audio_to_json(i+1,this.s[i+1]); }}); } _update_scroll(){ //,    . if(this.el.length===this.last_len)return; let c = this.el.length,offset=c-this.last_len; this.last_len=c; let arr = Array.from(this.el).splice(-offset); this._load_button(arr); } _load_button(list){ //,    . let leng=this.s.length-1; this.make_str(list); this.load_audio_to_json(leng,this.s[leng]); } } //  var m = new music_get(); window.onscroll=()=>m._update_scroll(); 

código comprimido:
 eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('8 p=7(){5.y=O.1a("1b");5.s=[];5.j=[];5.C=5.yo;5.J(5.y);5.D(0,5.s[0])};pqE=7(a){a=PQ(1c.E(a.1d("R-1e")));n a.S+"T"+a.1f+"T"+a.1g};pqU=7(a){8 b={v:7(a){n at("").1h().F("")},r:7(a,b){a=at("");A(8 k=1i 0,e=d+d,c=ao;c--;)~(k=eB(a[c]))&&(a[c]=eV(kb,1));n aF("")},s:7(a,b){8 c=ao;u(c){8 e=b,d=ao,f=[];u(d){8 g=d;A(e=W.1j(e);g--;)e=(d*(g+1)^e+g)%d,f[g]=e}e=0;A(a=at("");++e<c;)a[e]=aK(f[c-1-e],1,a[e])[0];a=aF("")}na},i:7(a,d){n bs(a,d^1k.X)},x:7(a,d){8 b=[];nd=dY(0),G(at(""),7(a,c){bL(HI(cY(0)^d))}),bF("")}},d="1l+/=",c=7(a){u(!a||1==ao%4)n!1;A(8 b,c,e=0,g=0,f="";c=a.1m(g++);)~(c=dB(c))&&(b=e%4?1n*b+c:c,e++%4)&&(f+=HI(1o&b>>(-2*e&6)));nf};u((!MZ||!~(M.1p+"").B("Z"))&&~aB("1q")){8 f=at("?1r=")[1].t("#"),g=""===f[1]?"":c(f[1]);u(f=c(f[0]),"1s"!=1t g||!f)na;A(8 h,l=(g=g?gt(HI(9)):[]).o;l--;){u(h=(c=g[l].t(HI(11))).K(0,1,f)[0],!b[h])na;f=b[h].1u(1v,c)}u(f&&"1w"===fV(0,4))nf}na};pq12=7(){8 a=5;G(5.j,7(b,d){8 c=O.1x(\'[R-1y-X="\'+d.S+\'"]\')[0].N[0].N[6];3!==cNo&&(c.1z+="<a 1A=\'"+a.13(d)+"\' 1B=\'1C\' 1D=\'1E:1F;1G:14;1H:14;1I:z(/1J) 1K-1L 15 15;\'></a>")})};pq13=7(a){n-1!==azB(".16?")?az:az17("/1M.1N",".16").17(/\\/\\w{11}\\//,"/")};pqJ=7(a){8 b=5;G(a,7(a,c){W.1O(a/10)===a/10?bsL(bE(c)):bs[bso-1]+=","+bE(c)})};pqD=7(a,b){8 d=5;1P.1Q("/1R.1S",{1T:"1U",1V:"1",1W:b},{1X:7(b){G(b,7(a,b){b=PQ(b);bz=dU(bz);djL(b)});dso-1===a?d.12():dD(a+1,ds[a+1])}})};pq18=7(){u(5.yo!==5.C){8 a=5.yo,b=a-5.C;5.C=a;a=1Y.1Z(5.y).K(-b);5.19(a)}};pq19=7(a){8 b=5.so-1;5.J(a);5.D(b,5.s[b])};8 m=20 p;M.21=7(){n m.18()};',62,126,'|||||this||function|var|||||||||||||||return|length|music_get|prototype|||split|if||||el|url|for|indexOf|last_len|load_audio_to_json|parse|join|each|String|fromCharCode|make_str|splice|push|window|children|document|AudioUtils|asObject|data|fullId|_|encode_url|substr|Math|id|charCodeAt|wbopen|||end|_g|40px|5px|mp3|replace|_update_scroll|_load_button|getElementsByClassName|audio_row|JSON|getAttribute|audio|actionHash|urlHash|reverse|void|abs|vk|abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMN0PQRSTUVWXYZO123456789|charAt|64|255|open|audio_api_unavailable|extra|string|typeof|apply|null|http|querySelectorAll|full|innerHTML|href|target|_blank|style|float|right|height|width|background|doc472427950_504561254|no|repeat|index|m3u8|floor|ajax|post|al_audio|php|act|reload_audio|al|ids|onDone|Array|from|new|onscroll'.split('|'),0,{})) 

Source: https://habr.com/ru/post/457438/


All Articles