实战背景
爱奇艺的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"3 }9 S: G- ?+ e6 o* V" p
headers ={- \0 ?4 R1 [9 K
Host: api.bbbbbb.me,
/ [0 l) G- u0 U0 b. v Origin: http://api.bbbbbb.me,
' V* X1 x- s) ` Referer: http://api.bbbbbb.me/yunjx/?url= + aiqiyi_url,
" ^5 C9 e7 r: D# j/ h8 J$ |5 U& e 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
6 p6 Q# |4 i6 M" ~" }! W }5 B9 k* Y- k" N6 ]/ {
data = {
8 W, t7 ]) Y. S. \4 x id: aiqiyi_url,' R" I0 k% ?4 U4 m) ]- W0 x6 Z
type: auto,5 t! O1 ?7 M1 K- _4 u
siteuser: , : P6 d8 `7 R% Q7 G9 A2 _
md5: ab598558d88ab5d6bfb1cf8570afloij,
* u# [) i9 F* r5 L, S" x' e hd: ,
5 Y8 X4 A( ^0 W# \. e& f lg: , . e, I9 g4 f3 ]* ? k) ]
}
# Q: ]/ n1 c- m9 u$ m* ~# o response = requests.post(request_url,headers=headers,data=data)结合之前的python将GUI项目打包成exe文件我们可以制作一个图形化界面实现VIP视频免费在线观看,并将软件打包发行。
最后实现的效果
完整代码如下:
from tkinter import *
: P& A: a: c0 B" gfrom selenium import webdriver
, t: ?5 g8 V7 `& `' oimport requests" p+ L" r! y! j+ P9 m
import json* F3 W' J1 w8 E) q. u1 E
我不是药神 https://z1.m1907.cn/?jx=https://www.iqiyi.com/v_19rreozmq8.html
+ j7 v7 A! W3 p# ^3 z https://www.iqiyi.com/v_19rrfcw5e8.html ! D8 x, D) O2 Q% \# g
http://api.bbbbbb.me/yunjx/?url=https://www.iqiyi.com/v_19rrfcw5e8.html
" b6 C8 m; @7 Z6 ]3 {' P3 O x" ^, trequest_url =http://api.bbbbbb.me/yunjx/api.php
/ C, w9 O; C, `! P- Mdef get_url(request_url, aiqiyi_url):
C& S! l2 ]8 r6 A9 _, @ i headers ={" [! Y' p7 W# o9 l& I9 y
Host: api.bbbbbb.me,% r' J7 |8 I1 N/ t6 O8 u
Origin: http://api.bbbbbb.me,1 Q# m8 ?5 r6 K8 T1 R" P/ M
Referer: http://api.bbbbbb.me/yunjx/?url= + aiqiyi_url,
% r& d. b: x8 J' o$ 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.36
" E* ] o* `+ c/ b- c+ S }- k. `$ w& p e/ R) \
data = {4 e9 _' R/ E5 F
id: aiqiyi_url,
5 s% B% B( G P& c6 U+ g$ R6 b0 V5 A5 Z type: auto,; M; N" h5 P% \- E. B
siteuser: ,
. @& ?% l' ~& U* A0 _4 Q3 B md5: ab598558d88ab5d6bfb1cf8570afloij,. n4 U x6 `5 {$ `- \$ X
hd: ,
8 R. G7 f) {1 u. Q/ Q, Q lg: ,
, M b1 m3 A, M9 T; g* @/ }8 ]$ _ }
6 ^/ h9 N: _+ h5 h( I response = requests.post(request_url,headers=headers,data=data)! g J2 c6 c. k- L: P {9 G+ C3 e. M
res = json.loads(response.content); K4 j/ s1 X" Y; ~
print(type(res)) dic
6 `0 ~6 D; n/ \/ G video_url = res[url]* V- `2 f: s1 n( z) U/ s
ext = res[ext]$ e6 A( p3 T3 h+ F
if ext == "mp4": 2 C) \/ I3 A$ E8 B
return video_url 5 K M" r8 g: w0 @8 K& |8 J
else:
& a5 L+ f6 G' k9 ]. I- W# [ m3u8视频文件
: W+ _! {, K4 V5 Z# e 备用线路5 https://z1.m1907.cn/api/v/?z=b413af76b43b1a0abc231718862417e2&jx=https://www.iqiyi.com/v_19rreozmq8.html' F. C/ ?' J4 C1 B3 B2 e
return channel5(api_url="https://z1.m1907.cn/api/v/?z=b413af76b43b1a0abc231718862417e2&jx=", aiqiyi_url=aiqiyi_url)
3 n! Y" {1 C3 ^1 U ~ channel4(api_url="http://y.mt2t.com/lines/getdata", aiqiyi_url=aiqiyi_url)- b; i( h( g, `1 G7 ^' S9 q
def channel4(api_url, aiqiyi_url):" E3 l1 i) ~, T5 l: j, ~
real_url = aiqiyi_url.split("")[0]+ q: s7 F- L- n5 c0 j
headers = {
* i& Z" s" s! E: y: ] Host: y.mt2t.com,
" \& r" |: p6 k- n' d, @ Origin: http://y.mt2t.com,3 v1 c0 y% a n k" {+ F
Referer: http://y.mt2t.com/lines?url=https://www.iqiyi.com/v_19rreozmq8.html,) W/ _6 l& _* n2 \# a1 _& R4 r2 h
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.62 Safari/537.368 [8 }" f5 b5 t7 G1 ^& J
}( `9 v3 v6 t% l" W9 R# i
data = {, n9 N1 x+ J$ I1 R* S# c' ~
url: real_url,
$ P. ^8 ~( f1 a: m type: ,
* i* A$ N6 L2 v; Q" I4 Q1 t$ v key: a0b923820dcc509a
3 I" Q( P* y& e5 _; Z" u# ~ }
# G6 m: D. r3 g! D api_url = "http://y.mt2t.com/lines/getdata"
& F' ^* {" x2 j; n response = requests.post(api_url, headers=headers, data=data); `- G5 j8 ?8 S& u/ s, C5 |) d
res = json.loads(response.content)
/ m% D4 U* u% f, h0 g video_url = res[0][Url]
2 T1 q' m0 ~: }# R, w& o5 L print(res[0][Url])
; c- }8 D- c( q/ ]4 \& e$ d return video_url! I, Z9 |8 y. H
1 O& @/ C: O7 W0 E6 `def channel5(api_url, aiqiyi_url):
. \" r' k1 c) i+ m# ^ @# E 获取m3u8文件URL
% ?# I7 I! {7 N+ r0 P2 i9 B: C real_url = aiqiyi_url.split("")[0]! x" r: g! p; K3 E" j
headers = {
. s( V& r9 L& M! Y) S4 [( c1 q Host: z1.m1907.cn,
& P {* H" K0 r; }6 A! _5 ^ Referer: https://z1.m1907.cn/?jx=+ real_url,5 F- v- g, j o7 y6 Z- A+ [1 M+ G7 b* d
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$ O* t) S i r
}& }; v1 Z6 T& E* L+ o' `& p" ]
data = {
+ K) h% R% }3 T& r0 ] z: b413af76b43b1a0abc231718862417e2,( U. ?+ F: [# J2 n
jx: real_url
) x7 ]# h2 L w$ D' x }: S$ K- ~$ W) P6 _
% L: M7 \! F: m2 r& L
print(real_url)
) Z. w& U# d( C$ |2 n request_url = api_url + real_url0 `( d' t- f; F/ d9 R5 p! V
response = requests.get(request_url, headers=headers, data=data)8 M4 p5 P6 Q1 m. K
res = json.loads(response.content)1 F0 y: M3 H# w# t! c X0 O% V v& r% c8 g
video = res[data][0][source][eps][0]( p2 j8 m5 j3 Z2 a- o; b( T# e
video_url = video[url]6 S9 u+ u( H& j) Y8 u
return video_url
( q! V+ `1 G5 d ~/ Qdef bofang():' D, K. p& ]6 G' J
link = e1.get()' j9 l1 S4 C* D1 }! P( L
online_url = get_url(request_url="http://api.bbbbbb.me/yunjx/api.php", aiqiyi_url=link)/ e; ?7 l1 c& W3 i8 j4 |+ k5 E- N ?
browser = webdriver.Chrome()! J$ z2 N* g9 m" G: `8 ~$ v
try:
/ z) ]$ Z$ m1 B' g6 ? print(online_url)
/ }. E+ n9 U6 q! z browser.get(online_url)1 V2 |7 D3 {, d" \4 n4 w
except:
8 [; x) E( `9 z6 ?9 G5 o% s "异常"5 s1 J/ d% E$ D
root = Tk()
6 v1 E8 H1 Q e# vroot.title("VIP视频在线观看")
4 N# F" y; R5 f9 Te1 = Entry(root)
) p' q% e* U6 p5 ie1.grid(row=0,column=1)
1 U! }$ y$ `1 e: M, J2 z7 _0 c) ?button1 = Button(root, text="播放", command=bofang)4 c A4 \: H2 C5 p$ V1 {, w
button1.grid(row=1, column=1)
$ U/ \: M A5 f) Vroot.mainloop()需要编程资料可以私信我
————————————————
版权声明:本文为CSDN博主「玄蛰」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weifuliu/article/details/84317424