Bagaimana semuanya dimulai ...
Seperti biasa, tergantung pada VKontakte, saya memutuskan untuk mengunduh beberapa rekaman audio baru ke komputer. Tapi saya kecewa: rekaman audio kembali dalam beberapa format aneh: m3u8. Format ini bahkan tidak memainkan plyer media vlc, dan saya mulai berpikir apa yang harus dilakukan ...
Apa yang sebenarnya dilakukan?
Googling seperti apa .m3u8 format itu, saya menyadari bahwa ini adalah audio dalam format
.m3u . Oke, unduh file .m3u8 ini, buka dengan editor teks dan lihat sesuatu seperti ini:
Teks#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
Lebih jauh kita mengerti itu
9df2NqJzcmZj0.ts?extra=0F4d1n-wWV6igsS5Ji7x6gYIbtU_aRzsiByqvrumv4W1iznLLoiC552LnsmyKeuuOtw70WTqfYdDCir-nmlL3VlLR9i2Y6IPOudQxWPbZjlslXE7prmIvdLyoLxb3A9NFnHo2KR5NStPg1sk6ZVXrYBh
- jalur ke rekaman audio. Artinya, Anda perlu mengganti host untuk setiap jalur, dan kemungkinan besar audio ini akan dapat diputar. Setelah dengan cepat melemparkan beberapa baris kode pada python, kami menerapkan ini:
Kode 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()
dan kami mendapatkan file .m3u yang sudah dapat diputar.
TAPI! Masalahnya adalah:
- File ini hanya dapat diputar sementara tautan ke celah audio valid.
- Anda juga dapat mengonversi file hanya selama tautannya valid
- Anda hanya dapat mengonversi file di komputer tempat ia diterima. tautan diikat ke alamat ip komputer.
Setelah mengerti semua ini, saya memutuskan untuk menulis sebuah program di client js sehingga bisa dieksekusi di baris perintah. Inilah yang saya dapatkan:
Programnya 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_){
Hasilnya kira-kira seperti ini:

Selanjutnya, setelah mengunduh semua audio dalam satu folder, saya menulis kode python berikut untuk mengubah semua audio .m3u8 menjadi
.ts :
Kode 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, !")
Pada prinsipnya, Anda dapat mencoba menggabungkan kutipan .ts pada js dan kemudian mengunduh seluruh file, tetapi saya tidak berhasil (
PS yang berhasil - tulis di komentar
PPS Saya lupa mengatakan bahwa Yandex.browser masih mengembalikan tautan ke .mp3)
Perbarui:
Seperti yang dicatat dengan benar
nokimaro Anda dapat langsung mengunduh mp3:
kode 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_){
kode terkompresi:
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,{}))