parent
131d0bd9d3
commit
b5df5ee25e
@ -0,0 +1,101 @@
|
||||
#!/usr/bin/python3
|
||||
# -*- coding: utf-8 -*-
|
||||
# @Author : Doubebly
|
||||
# @Time : 2025/12/19 21:27
|
||||
# @file : 小红影视.min
|
||||
|
||||
k='zh-CN,zh;q=0.9'
|
||||
j='gzip, deflate, br, zstd'
|
||||
i='same-origin'
|
||||
h='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36'
|
||||
g='"Windows"'
|
||||
f='"Chromium";v="142", "Google Chrome";v="142", "Not_A Brand";v="99"'
|
||||
e='accept-language'
|
||||
d='sec-fetch-dest'
|
||||
c='sec-fetch-mode'
|
||||
b='sec-fetch-site'
|
||||
a='sec-ch-ua-platform'
|
||||
Z='sec-ch-ua-mobile'
|
||||
Y='sec-ch-ua'
|
||||
X='href'
|
||||
W='type'
|
||||
V='class'
|
||||
U='origin'
|
||||
T='User-Agent'
|
||||
P='vod_pic'
|
||||
O='1'
|
||||
N='referer'
|
||||
M='https://www.xiaohys.com'
|
||||
K='vod_remarks'
|
||||
J='vod_name'
|
||||
I='vod_id'
|
||||
H='type_name'
|
||||
G='jx'
|
||||
C='url'
|
||||
F='parse'
|
||||
E=print
|
||||
D=Exception
|
||||
B='list'
|
||||
A=''
|
||||
import base64 as l,hashlib as m,json as Q,re,sys,time,requests as R
|
||||
from pyquery import PyQuery as S
|
||||
from Crypto.Cipher import AES as L
|
||||
from Crypto.Util.Padding import unpad
|
||||
sys.path.append('..')
|
||||
from base.spider import Spider as n
|
||||
class Spider(n):
|
||||
def __init__(A):B='https://www.xiaohys.com/';super().__init__();A.debug=False;A.name='小红影视';A.error_play_url='https://kjjsaas-sh.oss-cn-shanghai.aliyuncs.com/u/3401405881/20240818-936952-fc31b16575e80a7562cdb1f81a39c6b0.mp4';A.home_url=M;A.headers={T:'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36',U:B,N:B};A.session=R.session()
|
||||
def getName(A):return A.name
|
||||
def init(A,extend='{}'):A.extend=extend
|
||||
def homeContent(D,filter):A='type_id';C={V:[{A:O,H:'电影'},{A:'2',H:'剧集'},{A:'3',H:'综艺'},{A:'4',H:'动漫'}],'filters':{},B:[],F:0,G:0};return C
|
||||
def categoryContent(H,cid,page,filter,ext):
|
||||
L={B:[],F:0,G:0};N=H.home_url+'/index.php/api/vod'
|
||||
try:
|
||||
M=int(time.time());O=m.md5(f"DS{M}DCC147D11943AF75".encode()).hexdigest();Q={W:cid,V:A,'area':A,'lang':A,'version':A,'state':A,'letter':A,'page':page,'time':str(M),'key':O};R=H.session.post(N,data=Q,headers=H.headers,timeout=5)
|
||||
for C in R.json()[B]:L[B].append({I:str(C[I]),J:C[J],P:C[P],K:C[K]})
|
||||
except D as S:E(S)
|
||||
return L
|
||||
def detailContent(M,did):
|
||||
a='$$$';Z='vod_play_url';Q=' :';P='span';L='div.detail-info div.slide-info';R={B:[],F:0,G:0};T=did[0];N=M.home_url+f"/detail/{T}/"
|
||||
try:
|
||||
b=M.session.get(N,headers=M.headers,timeout=5);C=S(b.text.encode());O=C(L).eq(0);U={H:O(P).eq(2).text(),I:T,J:C('div.detail-info h1').text(),K:C(L).eq(1).text().split(Q)[-1],'vod_year':O(P).eq(0).text(),'vod_area':O(P).eq(1).text(),'vod_actor':C(L).eq(3).text().split(Q)[-1],'vod_director':C(L).eq(2).text().split(Q)[-1],'vod_content':C('#height_limit').text(),'vod_play_from':a.join([A.text()for A in C('div.swiper-wrapper a').items()]),Z:A};V=[]
|
||||
for c in C('ul.anthology-list-play').items():
|
||||
W=[]
|
||||
for Y in c('li').items():d=Y('a').text().strip();N=Y('a').attr(X);W.append(f"{d}${N}")
|
||||
V.append('#'.join(W))
|
||||
U[Z]=a.join(V);R[B].append(U)
|
||||
except D as e:E(e)
|
||||
return R
|
||||
def searchContent(C,key,quick,page=O):
|
||||
L='div.thumb-content div.thumb-txt a';H={B:[],F:0,G:0};M=C.home_url+f"/search{key}/page/{page}/"
|
||||
try:
|
||||
N=C.session.get(M,headers=C.headers,timeout=5);O=S(N.text.encode())
|
||||
for A in O('div.public-list-box.search-box').items():H[B].append({I:A(L).attr(X).split('/')[-2],J:A(L).text(),P:A('img.gen-movie-img').attr('data-src'),K:A('span.public-list-prb').text()})
|
||||
except D as Q:E(Q)
|
||||
return H
|
||||
def playerContent(H,flag,pid,vipFlags):
|
||||
K='http';B={C:H.error_play_url,F:0,G:0,'header':{}};L=H.home_url+pid
|
||||
try:
|
||||
P={Y:f,Z:'?0',a:g,'upgrade-insecure-requests':O,'user-agent':h,'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.7',b:i,c:'navigate','sec-fetch-user':'?1',d:'document',N:M,'accept-encoding':j,e:k,'priority':'u=0, i'};R=H.session.get(L,headers=P,timeout=5);I=re.search('player_aaaa=(.*?)</script>',R.text)
|
||||
if I:
|
||||
S=Q.loads(I.group(1));A=S[C]
|
||||
if A.startswith('Ace_'):
|
||||
J=H.parse_url(A)
|
||||
if J:B[C]=J
|
||||
if A.startswith(K)and'.m3u8'in A:B[C]=A
|
||||
if A.startswith(K)and'.html'in A:B[C]='https://jx.hls.one/?url='+A;B[F]=1
|
||||
except D as T:E(T)
|
||||
return B
|
||||
def localProxy(A,params):0
|
||||
def log(A,msg):
|
||||
if A.debug:
|
||||
try:R.post('http://192.168.31.13:5000/log',data=msg,timeout=1)
|
||||
except D as B:E(B)
|
||||
def parse_url(F,uri):
|
||||
G=None
|
||||
try:
|
||||
H={C:uri,W:A,'name':A};I={T:h,'Accept':'application/json, text/javascript, */*; q=0.01','Accept-Encoding':j,a:g,'x-requested-with':'XMLHttpRequest',Y:f,Z:'?0',U:M,b:i,c:'cors',d:'empty',N:'https://www.xiaohys.com/static/player/artplayer.html',e:k};J=F.session.post(F.home_url+'/static/player/artplayer/api.php?ac=getdate',data=H,headers=I,timeout=5);B=J.json()
|
||||
if B['code']==200:K='d978a93ffb4d3a00';O=B['iv'];P=B['data'];R=L.new(K.encode(),L.MODE_CBC,O.encode());S=unpad(R.decrypt(l.b64decode(P)),L.block_size).decode();V=Q.loads(S);G=V['videoUrl']
|
||||
except D as X:E(X)
|
||||
return G
|
||||
if __name__=='__main__':0
|
||||
Loading…
Reference in new issue