实战背景
爱奇艺的VIP视频只有会员能看,普通用户只能看前6分钟。那么我们怎么免费看VIP视频呢?一个简单的方法,机缘巧合下得知可以通过旋风视频VIP解析网站观看各个视频网站的VIP视频(知道后心疼我以前的会员呀~~~~),在我用的时候发现这个网站崩溃了,提供不了服务,内心再度受到打击,于是就去百度搜索看还有没有视频解析网站
我们可以看到,网上提供了很多的视频解析网站
他们的特点都是需要我们获取视频文件的播放链接,然后提供给他们解析。在这里我尝试了两个网站,一个是全民,一个就是牛巴巴VIP解析了。经比较,全民解析获取的视频画制十分的低,顶多也就是流畅,而牛巴巴解析的视频画制非常好,比得上原网站播放的视频了。
打开牛巴巴视频解析网站
然后我们可以打开爱奇艺视频网站,随便选取一部VIP影片,以《邪不压正》为例
我们可以看到红的方框中的网址链接,复制该链接到牛巴巴视频解析网站中就可以观看了。
与此同时,我们打开开发者工具,在XHR文件中可以看到一个api链接。这个api返回的json数据中有url字段,对应的是一个链接:
打开这个链接发现这就是我们要观看的电影视频的原地址,于是我们就对这个api进行分析
请求方法是post方法
参数有id、type、siteuser、md5、hd、lg等字段
于是可以构造请求
request_url = "http://api.bbbbbb.me/yunjx/api.php"8 j# i, ^/ H, _ ~
headers ={
( s9 B) i! G+ V9 z/ p" q Host: api.bbbbbb.me,4 C6 K& A! @% n. t5 i
Origin: http://api.bbbbbb.me,
' C- k P/ k" t6 k8 j Referer: http://api.bbbbbb.me/yunjx/?url= + aiqiyi_url,
/ H7 o% a9 G; M/ ^/ b- A User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36 [' h8 T# _- \7 h S/ w3 T% H6 K
}
- [) ], j7 {; n data = {
* | I! B3 a: l$ x+ M id: aiqiyi_url,
4 U& |" S' p2 i4 w# X type: auto,
( b. F# I# [; Z& h* v3 U* }. g/ m siteuser: ,
# y/ b; Q1 o3 `, @, a7 J$ o! c; u md5: ab598558d88ab5d6bfb1cf8570afloij,! w6 A$ r! x. x" r# E: s6 K
hd: , * e, ?9 w2 \% H. X! l! V' h
lg: , 4 Y7 e) Z7 ]2 F8 O9 x7 x
}
2 r! c2 k# ?6 d6 S1 a response = requests.post(request_url,headers=headers,data=data)结合之前的python将GUI项目打包成exe文件我们可以制作一个图形化界面实现VIP视频免费在线观看,并将软件打包发行。
最后实现的效果
完整代码如下:
from tkinter import *+ w }$ B! O* K
from selenium import webdriver
7 p9 p( ~9 s: T/ r5 |import requests0 u9 G1 z9 d) e" p- E+ Z% s
import json9 q; ?( \: m% @6 `3 f' y7 s& R0 Z
我不是药神 https://z1.m1907.cn/?jx=https://www.iqiyi.com/v_19rreozmq8.html/ { D, Z1 N+ L
https://www.iqiyi.com/v_19rrfcw5e8.html 9 c, ?! c2 C3 J- j; F+ N$ p) x
http://api.bbbbbb.me/yunjx/?url=https://www.iqiyi.com/v_19rrfcw5e8.html 2 Q: \! r% ?# w( U* f
request_url =http://api.bbbbbb.me/yunjx/api.php6 B0 n- W4 H, P5 c$ P' O
def get_url(request_url, aiqiyi_url):
# j" ]) [! d- b! f8 q$ O9 b headers ={
7 g5 x6 m k7 t Host: api.bbbbbb.me,( {& w& I0 H! f U4 z2 |
Origin: http://api.bbbbbb.me,
4 A9 _- r+ B/ E Referer: http://api.bbbbbb.me/yunjx/?url= + aiqiyi_url,
% w" C4 H7 s% R! } User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.36 r; C+ b W, m- w+ \9 n
}. T. Y1 R8 i( V S
data = {; v, C \+ X4 A# I
id: aiqiyi_url,
: y% b; ?0 q1 w4 L: c1 j/ P, }& ] type: auto,9 l- s6 n, S/ ^( }) b+ n% t1 h, r
siteuser: ,
3 P& b( r& h, ?' }4 \* ?2 [ md5: ab598558d88ab5d6bfb1cf8570afloij,4 V) {0 p0 h# L" y
hd: , % z! o$ s# f4 V/ P. N5 Y0 b7 |1 s! {
lg: , 8 a! r- {7 J; L# @8 _! ~$ [
}& R9 R6 X9 P4 Y
response = requests.post(request_url,headers=headers,data=data)4 g* O# D e" O# {. ^* O& M
res = json.loads(response.content)' N5 C. q3 U& K0 Z# d1 K
print(type(res)) dic
+ e. } \) T8 x, g, s' I video_url = res[url]* ?# m1 E' J, M! Z
ext = res[ext]
: L. T1 b, C3 v/ n if ext == "mp4":
1 Q3 H# I+ S" Q6 c% V return video_url
8 @/ l, O. L$ z1 J5 | else:
. F5 ]: S3 L& A6 _ m3u8视频文件
) M6 p7 V" o# G4 S/ n 备用线路5 https://z1.m1907.cn/api/v/?z=b413af76b43b1a0abc231718862417e2&jx=https://www.iqiyi.com/v_19rreozmq8.html
" q5 X" {' m& H return channel5(api_url="https://z1.m1907.cn/api/v/?z=b413af76b43b1a0abc231718862417e2&jx=", aiqiyi_url=aiqiyi_url)
% W1 x% V% D! F7 x- J$ W7 `* B: w: \ channel4(api_url="http://y.mt2t.com/lines/getdata", aiqiyi_url=aiqiyi_url)
, P9 F7 d8 X c c m5 T: v3 Idef channel4(api_url, aiqiyi_url):
( G4 C A7 j0 K T real_url = aiqiyi_url.split("")[0]4 x+ l: `/ M! W! c
headers = {
, k$ J, N* \! H" @3 y. m Host: y.mt2t.com,
( P$ L& _. U; o3 t7 V% q: ` Origin: http://y.mt2t.com,
) Z, R! ?5 ] Z Referer: http://y.mt2t.com/lines?url=https://www.iqiyi.com/v_19rreozmq8.html,
. Y5 d) o* P6 T, z5 z User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.367 i/ k3 g/ M8 B' c: q9 L8 j. `
}7 L/ T2 k" C4 w* d% o3 _& [0 d: I$ r
data = {
- o( s1 V w% c url: real_url,
% i- L1 d' E5 B! ] type: ,
) P% H$ S) P; G. F# T6 a key: a0b923820dcc509a
% O/ @8 }; F0 t0 c }! }1 R9 l3 ^* T: b
api_url = "http://y.mt2t.com/lines/getdata"
7 D# H' m, R6 D0 `& w$ I) F/ c" e response = requests.post(api_url, headers=headers, data=data)
' U2 ?# h/ h6 R% o+ P l8 }% g- @- A res = json.loads(response.content)
! R+ t; Z% U. R$ Q8 ]6 F video_url = res[0][Url]
7 q7 e/ F$ l6 k$ Y print(res[0][Url])7 ~$ h; s4 N( H0 ]6 Q ^
return video_url5 d u6 {6 G% w1 X- T# h
! G0 W9 u0 h* |6 r# n
def channel5(api_url, aiqiyi_url):& D! t6 W) I6 y( E) k! @
获取m3u8文件URL
. w* C! I4 [. p' _ real_url = aiqiyi_url.split("")[0]8 u" N4 c# [; K0 G5 {4 H: N
headers = {% e8 V( n0 o: M' c
Host: z1.m1907.cn,
5 ]6 C6 P$ ?4 d; S Referer: https://z1.m1907.cn/?jx=+ real_url,5 ^7 }2 g) h& T) ~3 C
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.363 C9 Y0 n. A& ^
}
0 S" H" E& D1 o$ E; ` data = {
, D% Y( _1 w! [2 ? s6 w z: b413af76b43b1a0abc231718862417e2, c9 a( S0 I, X, f) Z1 `. z
jx: real_url) T) J2 L0 b9 A6 D1 i
}
; ?! l: P! X3 a6 |0 l6 M) v
/ }5 @: R7 G% m$ f$ T' N; ~0 T print(real_url)
; l9 {0 Y" Y) e. W! g( ` request_url = api_url + real_url6 a' x6 F) t% T: X2 k, p
response = requests.get(request_url, headers=headers, data=data)
$ q$ G) {6 X! J3 A0 [5 h res = json.loads(response.content)) C e; ?3 _7 R( m3 S* I X; e
video = res[data][0][source][eps][0]
& N8 |: _: \9 m3 B, M8 J video_url = video[url]) P5 h, s3 a8 {% T
return video_url- \0 b, ^4 B. J+ w! ?3 j5 j
def bofang():5 g/ m$ K& o% M0 n4 k
link = e1.get()
1 q* d' \: g$ ]- T8 T2 o online_url = get_url(request_url="http://api.bbbbbb.me/yunjx/api.php", aiqiyi_url=link) v9 Y+ H+ X; w3 O S. u* B
browser = webdriver.Chrome()/ a9 b+ ]3 r5 g( k& w
try:
5 n! v. u6 V+ R# T( k; v print(online_url)
2 V* o4 k4 v6 }* ~4 W- f' a1 Q browser.get(online_url)
5 g. `/ G% b( _5 F/ O except:
9 f6 M4 \9 Z6 |0 a: M6 t8 p "异常"
7 k4 A& D1 g- T# g7 f; Y* |3 Wroot = Tk()
, y: r ?! d/ `* r# E- k% s4 w0 Xroot.title("VIP视频在线观看")
* F% z& O2 m. Je1 = Entry(root)
" P' k6 K Z" A- ~( g6 ]5 B' Ee1.grid(row=0,column=1)* y" }2 p- h4 t( \$ L
button1 = Button(root, text="播放", command=bofang)8 h1 Z( P% y2 ] U g
button1.grid(row=1, column=1)) t, d' E+ W/ e
root.mainloop()需要编程资料可以私信我
————————————————
版权声明:本文为CSDN博主「玄蛰」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weifuliu/article/details/84317424