使用Python获取优酷视频m3u8直连的方法
要获取优酷视频的m3u8直连,可以使用Python的第三方库`you-get`。首先需要安装`you-get`库,然后使用命令行工具运行`you-get`命令。 1. 安装`you-get`库: ```bash pip install you-get ``` 2. 使用`you-get`命令获取优酷视频的m3u8直连: ```bash you-get -o "输出目录" "优酷视频链接" ``` 将`输出目录`替换为你想要保存视频的文件夹路径,将`优酷视频链接`替换为你想要下载的优酷视频链接。
Python脚本代码
importre,requests,time,subprocess,json,base64fromhashlibimportmd5classYouKu:def__init__(self,cookie):self.cookie=cookiedefyouku_sign(self,t,data,token):appKey='24679788'#固定值'''token值在cookie中'''sign=token+'&'+t+'&'+appKey+'&'+datamd=md5()md.update(sign.encode('UTF-8'))sign=md.hexdigest()returnsigndefutid(self):cna=re.compile("cna=(.*?);")_m_h5_tk=re.compile("_m_h5_tk=(.*?)_.*?;")token=_m_h5_tk.findall(self.cookie+";")utid_=cna.findall(self.cookie+";")return{"utid":utid_[0],"token":token[0]}#若直接在首页小窗口上复制的视频网址,是重定向的网址。defredirect(self,url):headers={"referer":"https://www.youku.com/","user-agent":"Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/86.0.4240.198Safari/537.36",}resp=requests.get(url=url,headers=headers)returnresp.urldefpage_parser(self,url):headers={"authority":"v.youku.com","method":"GET","path":url.replace("https://v.youku.com/",""),"scheme":"https","accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9","accept-encoding":"gzip,deflate,br","accept-language":"zh-CN,zh;q=0.9","cache-control":"max-age=0","cookie":self.cookie,"referer":"https://www.youku.com/","sec-fetch-dest":"document","sec-fetch-mode":"navigate","sec-fetch-site":"none","sec-fetch-user":"?1","upgrade-insecure-requests":"1","user-agent":"Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/86.0.4240.198Safari/537.36",}resp=requests.get(url=url,headers=headers)html=resp.content.decode("utf-8")#print(html)videoId=re.compile("videoId:'(.*?)'")showid=re.compile("showid:'(.*?)'")currentEncodeVid=re.compile("currentEncodeVid:'(.*?)'")videoId=videoId.findall(html,re.S|re.M|re.I)current_showid=showid.findall(html,re.S|re.M|re.I)vid=currentEncodeVid.findall(html,re.S|re.M|re.I)return{"current_showid":current_showid[0],"videoId":videoId[0],"vid":vid[0]}defget_emb(self,videoId):emb=base64.b64encode(("%swww.youku.com/"%videoId).encode('utf-8')).decode('utf-8')returnemb#这个函数用来获取元素的第一个值deftakeOne(self,elem):returnfloat(elem[0])defm3u8_url(self,t,params_data,sign):url="https://acs.youku.com/h5/mtop.youku.play.ups.appinfo.get/1.1/"params={"jsv":"2.5.8","appKey":"24679788","t":t,"sign":sign,"api":"mtop.youku.play.ups.appinfo.get","v":"1.1","timeout":"20000","YKPid":"20160317PLF000211","YKLoginRequest":"true","AntiFlood":"true","AntiCreep":"true","type":"jsonp","dataType":"jsonp","callback":"mtopjsonp1","data":params_data,}headers={"Accept":"*/*","Accept-Encoding":"gzip,deflate,br","Accept-Language":"zh-CN,zh;q=0.9","Connection":"keep-alive","Cookie":self.cookie,"Host":"acs.youku.com","Referer":"https://v.youku.com/v_show/id_XNTA1MTYwMzU0OA==.html?spm=a2h0c.8166622.PhoneSokuUgc_3.dscreenshot","Sec-Fetch-Dest":"script","Sec-Fetch-Mode":"no-cors","Sec-Fetch-Site":"same-site","User-Agent":"Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/86.0.4240.198Safari/537.36",}resp=requests.get(url=url,params=params,headers=headers)result=resp.text#print(result)data=json.loads(result[12:-1])#print(data)ret=data["ret"]video_lists=[]ifret==["SUCCESS::调用成功"]:stream=data["data"]["data"]["stream"]title=data["data"]["data"]["video"]["title"]print("解析成功:")forvideoinstream:m3u8_url=video["m3u8_url"]width=video["width"]height=video["height"]size=video["size"]size='{:.1f}'.format(float(size)/1048576)video_lists.append([size,width,height,title,m3u8_url])#print(f">>>{title}分辨率:{width}x{height}视频大小:{size}Mtm3u8播放地址:{m3u8_url}")video_lists.sort(key=self.takeOne)forvideo_listinvideo_lists:print(f">>>{title}分辨率:{video_list[1]}x{video_list[2]}视频大小:{video_list[0]}Mtm3u8播放地址:{video_list[4]}")self.play(video_lists[-1][4])#选择播放列表最后一个视频(经过sort排序后,最后一个即为清晰度最高的一个)elifret==["FAIL_SYS_ILLEGAL_ACCESS::非法请求"]:print("请求参数错误")elifret==["FAIL_SYS_TOKEN_EXOIRED::令牌过期"]:print("Cookie过期")else:print(ret[0])defplay(self,x):text='ffplay-protocol_whitelist"file,http,https,rtp,udp,tcp,tls"-loglevelquiet-i"%s"'%xsubprocess.call(text,shell=True)defstart(self):t=str(int(time.time()*1000))user_info=self.utid()userid=user_info["utid"]url=input("请将优酷视频播放链接粘贴到这:n")url=self.redirect(url)page_info=self.page_parser(url)emb=self.get_emb(page_info["videoId"])params_data=r'''{"steal_params":"{"ccode":"0502","client_ip":"192.168.1.1","utid":"%s","client_ts":%s,"version":"2.1.69","ckey":"DIl58SLFxFNndSV1GFNnMQVYkx1PP5tKe1siZu/86PR1u/Wh1Ptd+WOZsHHWxysSfAOhNJpdVWsdVJNsfJ8Sxd8WKVvNfAS8aS8fAOzYARzPyPc3JvtnPHjTdKfESTdnuTW6ZPvk2pNDh4uFzotgdMEFkzQ5wZVXl2Pf1/Y6hLK0OnCNxBj3+nb0v72gZ6b0td+WOZsHHWxysSo/0y9D2K42SaB8Y/+aD2K42SaB8Y/+ahU+WOZsHcrxysooUeND"}","biz_params":"{"vid":"%s","play_ability":16782592,"current_showid":"%s","preferClarity":99,"extag":"EXT-X-PRIVINF","master_m3u8":1,"media_type":"standard,subtitle","app_ver":"2.1.69","h265":1}","ad_params":"{"vs":"1.0","pver":"2.1.69","sver":"2.0","site":1,"aw":"w","fu":0,"d":"0","bt":"pc","os":"win","osv":"10","dq":"auto","atm":"","partnerid":"null","wintype":"interior","isvert":0,"vip":1,"emb":"%s","p":1,"rst":"mp4","needbf":2,"avs":"1.0"}"}'''%(userid,t[:10],page_info["vid"],page_info["current_showid"],emb)sign=self.youku_sign(t,params_data,user_info["token"])self.m3u8_url(t,params_data,sign)if__name__=='__main__':#首先在这里设置自己的cookie非vip只能解析到免费视频。cookie='__ysuid=21059a310000087e5fcbb3ee0000a58b;__yscnt=1;P_gck=NA%7CMvLpuothPGV815HV%2B4HBtQ%3D%3D%7CNA%7C1622106293483;disrd=26765;UM_distinctid=179ebdf5fdf38-053a25f2c96ee7-3e604809-1fa400-179ebdf5fe0376;cna=rQ1fGTsJrDcCAXO/hcGilGH2;__aysid=1625988129582bId;youku_history_word=%5B%22mv%22%2C%22%25E6%25A2%25A6%25E5%25B9%25BB%25E8%2583%258C%25E6%2599%25AF%25E7%25B4%25A0%25E6%259D%2590%22%2C%22%25E5%2585%2589%25E6%2599%2595%25E6%2595%2588%25E6%259E%259C%22%2C%22%25E5%2587%25AD%25E6%259C%25AC%25E4%25BA%258B%22%5D;P_pck_rm=fCj4xhhC086e9d5dafc44cZBc5UiiyUyR3DRaThifoJ0gOGm8ZOO%2BUMCE0pqY%2BjUMdFwZCWJGNZyfpRDiuFsjU05f1Wxunk5LO6fCSR%2BRxZx6X3lqIEceioFT64UeSgWuwpeRZYq5Xx4ZQBJDZbY1rIy57hFGCr0v0asOU0A3ItzovUbUqLMrwhu8mg%3D_V2;ysestep=1;yseidcount=1;ystep=1;juid=01faf0ro0ll51;xlly_s=1;ctoken=TwV5wIfcJQnCpzKOqQz8ISZd;_m_h5_tk=925b5e7437862a512deb2fedd0f5a385_1626890538888;_m_h5_tk_enc=5b83dbbea7e7b91e3ad88244c709814c;__ayft=1626885496557;__ayscnt=1;P_ck_ctl=707B8AC23F1FDFD594965F78DE614599;isg=BFdXdtc1-1a4AkDpLbeWc0ME5suhnCv-yBmpK6mE4yax2HUasW_8TA6wPnhGMAN2;l=eBOegfIlOee8pmAsBO5aFurza77OmIRbzsPzaNbMiInca6wlGUErbNCBWaiHPdtjgtfj4etPkdi_7d39Sya_WjDDBeYCyHEOAxv9-;tfstk=c1k1BOTkJNb_l2RVQctFgX01VQwdaqS7cCaifb21raThuImaJs4VUzaG4jbv3zEC.;__arpvid=1626885539497WCtEjY-1626885539597;__arycid=dv-3-00;__arcms=dv-3-00;__aypstp=2;__ayspstp=91;modalFrequency={"UUID":"2"};__ayvstp=1;__aysvstp=4'youku=YouKu(cookie)youku.start()
使用须知
设置了解析完成后,立即播放。利用的是 ffmpeg. 自行百度安装一下。 不装应该也可以用,只是播放报错而已!!!