
    h1                         d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZm	Z	 d dl
mZ d dlmZmZ d dlmZ d dlmZmZ  G d de      Zy)	    N)	urlencodequote)Spider)AES
PKCS1_v1_5)RSA)padunpadc                        e Zd Z fdZd ZddZd Zd Zd ZddZ	de
d	e
fd
Zde
d	e
fdZde
defdZde
defdZd Zd Zd Zd ZddZd Zd Zd Z xZS )r   c                     t         |           d| _        d| _        d| _        d| _        d| _        d| _        d| _        y )Nzhttps://api-h5.uvod.tvzhttps://www.uvod.tv s   abcdefghijklmnopa  -----BEGIN PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJ4FBai1Y6my4+fc
8AD5tyYzxgN8Q7M/PuFv+8i1Xje8ElXYVwzvYd1y/cNxwgW4RX0tDy9ya562V33x
6SyNr29DU6XytOeOlOkxt3gd5169K4iFaJ0l0wA4koMTcCAYVxC9B4+zzS5djYmF
MuRGfYgKYNH99vfY7BZjdAY68ty5AgMBAAECgYB1rbvHJj5wVF7Rf4Hk2BMDCi9+
zP4F8SW88Y6KrDbcPt1QvOonIea56jb9ZCxf4hkt3W6foRBwg86oZo2FtoZcpCJ+
rFqUM2/wyV4CuzlL0+rNNSq7bga7d7UVld4hQYOCffSMifyF5rCFNH1py/4Dvswm
pi5qljf+dPLSlxXl2QJBAMzPJ/QPAwcf5K5nngQtbZCD3nqDFpRixXH4aUAIZcDz
S1RNsHrT61mEwZ/thQC2BUJTQNpGOfgh5Ecd1MnURwsCQQDFhAFfmvK7svkygoKX
t55ARNZy9nmme0StMOfdb4Q2UdJjfw8+zQNtKFOM7VhB7ijHcfFuGsE7UeXBe20n
g/XLAkEAv9SoT2hgJaQxxUk4MCF8pgddstJlq8Z3uTA7JMa4x+kZfXTm/6TOo6I8
2VbXZLsYYe8op0lvsoHMFvBSBljV0QJBAKhxyoYRa98dZB5qZRskciaXTlge0WJk
kA4vvh3/o757izRlQMgrKTfng1GVfIZFqKtnBiIDWTXQw2N9cnqXtH8CQAx+CD5t
l1iT0cMdjvlMg2two3SnpOjpo7gALgumIDHAmsVWhocLtcrnJI032VQSUkNnLq9z
EIfmHDz0TPTNHBQ=
-----END PRIVATE KEY-----
a  -----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCeBQWotWOpsuPn3PAA+bcmM8YD
fEOzPz7hb/vItV43vBJV2FcM72Hdcv3DccIFuEV9LQ8vcmuetld98eksja9vQ1Ol
8rTnjpTpMbd4HedevSuIhWidJdMAOJKDE3AgGFcQvQePs80uXY2JhTLkRn2ICmDR
/fb32OwWY3QGOvLcuQIDAQAB
-----END PUBLIC KEY-----
)	super__init__base_urlweb_urltoken_iv_client_private_client_public_server_public)self	__class__s    $/storage/emulated/0/lz/py/sy/UVod.pyr   zSpider.__init__
   sP    0AV$,egX\Xb  uHimiq "    c                      y)NUVOD r   s    r   getNamezSpider.getName-   s    fr   c                 z   t        |t              r4|j                         j                  d      rt	        j
                  |      nt        |t              r|ni }|j                  d| j                        | _	        |j                  d| j                        | _
        | j                  d      S # t        $ r i }Y `w xY w)N{r   r   F)
isinstancestrstrip
startswithjsonloadsdict	Exceptiongetr   r   homeContent)r   extendcfgs      r   initzSpider.init/   s    )3FC)@V\\^E^E^_bEc4::f%s}  E  GK  tLio  RTS
DMM:QXZ^ZdZdIeDJ&& "#"s   AB, ,B:9B:c                 4    rt        fddD              S dS )Nc              3   B   K   | ]  }|j                         v   y wN)lower).0xurls     r   	<genexpr>z'Spider.isVideoFormat.<locals>.<genexpr>5   s     ,YGX!Q#))+-=GXs   )z.m3u8z.mp4F)any)r   r5   s    `r   isVideoFormatzSpider.isVideoFormat5   s    ]`,YGX,Y)Y"kfk"kr   c                      y)NFr   r   s    r   manualVideoCheckzSpider.manualVideoCheck6   s    ur   c                      y r1   r   r   s    r   destroyzSpider.destroy7   s    tr   c                     t         j                  t         j                  z   dj                  fdt	        |      D              S )Nr   c              3   H   K   | ]  }t        j                          y wr1   )randomchoice)r3   _charss     r   r6   z%Spider._random_key.<locals>.<genexpr>;   s     >Xv}}U+Xs   ")stringascii_lettersdigitsjoinrange)r   nrB   s     @r   _random_keyzSpider._random_key9   s0    $$v}}4ww>U1X>>>r   
plain_textreturnc           	      2   | j                  d      j                  d      }t        j                  |t        j                  | j
                        }t        j                  |j                  t        |j                  d      t        j                                    j                  d      }t        j                  | j                        }t        j                  |      }t        j                  |j                  |            j                  d      }| d| S )N    utf-8iv.)rI   encoder   newMODE_CBCr   base64	b64encodeencryptr	   
block_sizedecoder   
import_keyr   r   )r   rJ   aes_keycipherct_b64rsa_pub
rsa_cipherrsa_b64s           r   _encryptzSpider._encrypt=   s    ""2&--g6#,,488<!!&..Z5F5Fw5OQTQ_Q_1`"abiijqr..!4!45JNNSZD[z"":#5#5g#>?FFwO7)$$r   enc_textc                    	 |j                  d      }|\  }}t        j                  | j                        }t	        j
                  |      j                  t        j                  |      d       }t        j
                  |t        j                  | j                        }t        |j                  t        j                  |            t        j                        }|j                  dd      S # t        $ r |cY S w xY w)NrQ   rO   rN   ignore)splitr   rZ   r   r   rS   decryptrU   	b64decoder   rT   r   r
   rX   rY   r)   )	r   rb   partsr]   r`   rsa_privr[   r\   pts	            r   _decryptzSpider._decryptE   s    	*NN3'E5~~d&:&:;H nnX.66v7G7G7PRVWGWWWclltxx@Fv~~f&6&6v&>?PB99Wh//)/)s   C*C- -C;:C;pathpayloadc           	          t        t        t        j                         dz              }| j                  xs d}|dk(  r|j	                  dd      }d| d| }n[|dk(  r|j	                  d	      }|r.t        t        |      d
      j                         }d| d| }n|j	                  dd      }|j	                  dd      }	|j	                  dd      }d| d|	 d| d| }n|dk(  rd|j	                  dd       d| }n|dk(  rE|j	                  dd      }
|j	                  dd      }|j	                  dd      }d|
 d| d| d| }nh|xs i j                         D ci c]  \  }}|dvs|| }}}t        t        |j                               d !      j                         }| d| d| }t        j                  |j                  d"            j                         }d#|||| j                  | j                  d$z   d%d&d'S c c}}w )(Ni  r   /video/latestparent_category_ide   z-parent_category_id=-/video/listkeyword)safez	-keyword=z2&need_fragment=1&page=1&pagesize=42&sort_type=asc-page   pagesize*   z-page=z
&pagesize=z&parent_category_id=z&sort_type=asc-/video/infoz-id=id/video/sourcequalityvideo_fragment_idvideo_idz	-quality=z&video_fragment_id=z
&video_id=)r   0r   FNT)doseqrN   zapplication/json/z*/*oMozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36)zContent-TypezX-TOKENzX-TIMESTAMPzX-SIGNATUREOriginRefererAccept
User-Agent)r#   inttimer   r*   r   r2   itemsr   sortedhashlibmd5rR   	hexdigestr   )r   rl   rm   tsr   	parent_idtextrt   rv   rx   r}   fragment_idr   kvfilteredquerysigs                     r   _build_headerszSpider._build_headersO   s   TYY[4'()4::3C5?"$8#>II]^g]hhijlimGn]"kk),G%G2">"D"D"FQZ[bZc  dV  WY  VZ  P[ VQ/$GKK
TV<Welepep  rF  HJ  fKYb  V\  ]a  \b  bl  mu  lv  vJ  KT  JU  Ud  eg  dh  Ti  MQ]"T'++dB2G1H"+ND_$Ir0JgZaZeZefy{}Z~K  LS  LW  LW  Xb  df  Lg  AI  r{  |C  {D  DW  Xc  Wd  dn  ow  nx  xy  z|  y}  p~  im,3Mr+@+@+Bi+B41aaOhFh!Q$+Bhis|  ~D  EM  ES  ES  EU  ~V  ^b  tc  ti  ti  tkkp  w|  v}  }~  D  ~E  EF  GI  FJ  tK  mqkk$++g./99; 2uUWhkw{  xD  xD  QU  Q]  Q]  `c  Qc  ot  Du  v  	v js   %H
2H
c                 h   | j                   j                  d      |z   }	 | j                  t        j                  |d            }| j                  ||      }| j                  |||d      }|j                  dk7  s|j                  sy |j                  j                         }d }| j                  |      }	t        j                  |	      }t        |t              r%|j                  d      dk(  r|j                  d	      S y #  t        j                  |      }n#  Y nxY wY WxY w# t        $ r Y y w xY w)
Nr   F)ensure_ascii   )dataheaderstimeout   errorr   r   )r   rstripra   r&   dumpsr   poststatus_coder   r$   rk   r'   r"   r(   r*   r)   )
r   rl   rm   r5   bodyr   rsptxtobjdecs
             r   	_post_apizSpider._post_api]   s    mm""3'$.	&==G%!HIDUYUhUhimovUw7))CdGR)HC#%SXXd((.."C$C}}S)C3 #t$)9Q)>swwv@V	::c?S %%sH   A(D% 	D% %&D 4D% D"DD"DD" D% %	D10D1c           	      0   | j                  di       }t        |t              r(|j                  d      xs |j                  d      xs g n|xs g }g }|D ]  }|j                  d      xs$ |j                  d      xs |j                  d      }|j                  d      xs$ |j                  d      xs |j                  d	      }|st|sw|j	                  t        |      t        |      d
        |sddd
ddd
ddd
ddd
ddd
ddd
ddd
g}d|iS )Nz/video/categorylistcategoryr{   category_idvaluenamelabeltitle)	type_nametype_idu   电影100u	   电视剧101u   综艺102u   动漫103u   体育104u	   纪录片105u   粤台专区106class)r   r"   r(   r*   appendr#   )r   filterr   lstclassesitcidr   s           r   r+   zSpider.homeContentl   s   ~~/4pz{  BF  qGTXXf=M=kQUQYQYZdQe=kik  NR  NX  VXc  eg  [bB&&,J"&&"7J266'?CSUSYSYZ`Sa  THegekeklset  THxzx~x~  @G  yHDtW^^#d)PSTWPX,YZ  e#L\gtyNz  KS  `e  }f  v~  KP  hQ  ai  v{  S|  LW  di  ~j  zH  UZ  l[  #\!!r   c           	         | j                  dddi      }t        |t              rO|j                  d      xs; |j                  d      xs( |j                  d      xs |j                  d      xs g }nt        |t              r|}ng }g }|D ]  }|j                  d      xs$ |j                  d	      xs |j                  d
      }|s=|j                  t        |      |j                  d      xs |j                  d      xs d|j                  d      xs( |j                  d      xs |j                  d      xs d|j                  d      xs |j                  d      xs dd        d|iS )Nro   rp   rq   video_latest_listr   rowsr   r{   r   videoIdr   r   r   postercoverpicscoreremarksvod_idvod_namevod_picvod_remarks)r   r"   r(   r*   r   r   r#   )r   r   r   videosr   vids         r   homeVideoContentzSpider.homeVideoContentt   s   ~~o0Dc/JKdD!2E)F  *J$((SYJZ  *J^b^f^fgm^n  *Jrvrzrz  |C  sD  *J  HJ3d#4ScA%%+Fz!2FaeeI6FCFMMSX155>ChUVUZUZ[aUbChfhuvuzuz  |D  vE  vm  IJ  IN  IN  OV  IW  vm  [\  [`  [`  af  [g  vm  km  ~  ~C  ~C  DK  ~L  ~f  PQ  PU  PU  V_  P`  ~f  df  #g  h  r   c                    t        |      j                         rt        |      nd}t        |      d d d d d dd |dddd}t        |t              r!dD ]  }|j                  |      s||   ||<    | j                  d|      }t        |t              ra|j                  d      xs; |j                  d	      xs( |j                  d
      xs |j                  d      xs g }	|j                  dd      }
nt        |t              r|}	d}
ng d}
}	g }|	D ]  }|j                  d      xs$ |j                  d      xs |j                  d      }|s=|j                  t        |      |j                  d      xs |j                  d      xs d|j                  d      xs( |j                  d      xs |j                  d      xs d|j                  d      xs dd        ||dd|
dS )Nrw   r   ry   asc)rp   r   languageyearregionstatert   paidrv   rx   
sort_field	sort_type)r   r   r   r   rt   rs   
video_listr   r   r   totali?B r   r{   r   r   r   r   r   r   r   r   r   i'     )r   rv   	pagecountlimitr   )	r#   isdigitr   r"   r(   r*   r   r   r   )r   tidpgr   r,   rv   rm   r   r   r   r   r   r   s                r   categoryContentzSpider.categoryContent   s   b'//+s2w),S$TXbfrv  BF  SU  _c  mq  A  QS  bg  hfd#J::a=vay'!* K~~mW5dD!,)?  *C488FCS  *CW[W_W_`fWg  *Ckokskst{k|  *C  AC3  MQ  MU  MU  V]  _e  Mf  EJd#4Sq5cA%%+Fz!2FaeeI6FCFMMSX155>ChUVUZUZ[aUbChfhuvuzuz  |D  vE  vm  IJ  IN  IN  OV  IW  vm  [\  [`  [`  af  [g  vm  km  ~  ~C  ~C  DK  ~L  ~R  PR  #S  T  4"W\]]r   c                    |d   }| j                  dd|i      xs i }t        |t              r|j                  di       ni }t        |t              r|j                  dg       ng }g }|ro|D ]j  }|j                  dd      }|j                  dd      }	|j                  d	g       }
|	s<|
s?|
rt	        |
      nd
}|j                  | d| d|	 d| d       l |s|j                  d|        t        |      |j                  d      xs |j                  d      xs d|j                  d      xs( |j                  d      xs |j                  d      xs d|j                  d      xs d|j                  d      xs d|j                  d      xs |j                  d      xs dddj                  |      dz   d}d|giS )Nr   rz   r{   videovideo_fragment_listsymbolu   播放r   	qualities   $|z|[]u   播放$r   r   r   r   r   r   durationdescriptiondescu   优汁🍑源#z$$$)r   r   r   vod_yearr   vod_contentvod_play_fromvod_play_urlr   )r   r"   r(   r*   maxr   r#   rF   )r   idsr   r   
video_info	fragments	play_urlsfragmentr   r   r   max_qualityvods                r   detailContentzSpider.detailContent   s
   !fT^^MD#;GM2du  AE  GK  vL\`\d\delnp\q  RTz  IS  TX  Z^  I_  bf  bj  bj  k@  BD  bE  eg  V_  uw  ir%||Hh7x||TXZ\G]kskwkw  yD  FH  lI_h94=#i.1K$$vQse1[MK=PQ%RS & )**WSE?;Sz~~g/F/f*..Y_J`/fdfs}  tB  tB  CK  tL  tF  PZ  P^  P^  _f  Pg  tF  ku  ky  ky  z  k@  tF  DF  T^  Tb  Tb  ci  Tj  Tp  np  AK  AO  AO  PZ  A[  Aa  _a  r|  r@  r@  AN  rO  ro  S]  Sa  Sa  bh  Si  ro  mo  BQ  cf  ck  ck  lu  cv  y~  c~  r   c                 *   t        |      j                         rt        |      nd}d d d d d d |d |ddddd}| j                  d|      }t	        |t
              rO|j                  d      xs; |j                  d      xs( |j                  d	      xs |j                  d
      xs g }nt	        |t              r|}ng }g }|D ]  }	|	j                  d      xs$ |	j                  d      xs |	j                  d      }
|
s=|j                  t        |
      |	j                  d      xs |	j                  d      xs d|	j                  d      xs( |	j                  d      xs |	j                  d      xs d|	j                  d      xs dd        d|iS )Nrw   ry   r   r   )rp   r   r   r   r   r   rt   r   rv   rx   r   r   need_fragmentrs   r   r   r   r   r{   r   r   r   r   r   r   r   r   r   )	r#   r   r   r   r"   r(   r*   r   r   )r   keyquickr   rv   rm   r   r   r   r   r   s              r   searchContentzSpider.searchContent   s   b'//+s2w)-dPT^bnr  ~B  OR  \`  jn  |~  NP  _d  wx  y~~mW5dD!,)?  *C488FCS  *CW[W_W_`fWg  *Ckokskst{k|  *C  AC3d#4ScA%%+Fz!2FaeeI6FCFMMSX155>ChUVUZUZ[aUbChfhuvuzuz  |D  vE  vm  IJ  IN  IN  OV  IW  vm  [\  [`  [`  af  [g  vm  km  ~  ~C  ~C  DK  ~L  ~R  PR  #S  T  r   c                    |sy t        |t              r%|j                         }| j                  |      r|S d S t        |t        t
        f      r>t        |t              r|j                         n|D ]  }| j                  |      }|s|c S  y r1   )r"   r#   r$   r8   r(   r   values_extract_first_media)r   r   sr   rs        r   r  zSpider._extract_first_media   s}    4c3SYY[d>P>PQR>S2]Y]2]cD$<(&0d&;cjjlD--a0Qh E r   c                 D   |j                  d      }|d   }t        |      dk\  r|d   }|d   j                  d      j                  dd      }|j                  d	      D cg c]#  }|j                         s|j                         % }	}|	r|	d   nd
}
|t	        |      j                         rt        |      n|t	        |
      j                         rt        |
      n|
d d}n|ddd d}| j                  d|      xs i }|j                  di       j                  dd      xsN |j                  d      xs; |j                  d      xs( |j                  d      xs | j                  |      xs d}|sd|dS d| j                  dz   | j                  d}d||dS c c}w )Nr   r      rw      z[] r   ,4)r   r~   r}   seekr   r|   r   r5   playUrlplay_url)parser5   r   r   )r   r   r   )r  r5   header)re   lenr$   replacer#   r   r   r   r*   r  r   )r   flagr{   vipFlagsrh   r   r   qualities_strqr   r}   rm   r   r5   r   s                  r   playerContentzSpider.playerContent   sm   %(xu:?(KE!HNN44H4P4PQTVX4YM  |I  |O  |O  PS  |T  hb  |Tvw  XY  X_  X_  Xahihohohq  |T[d  hb  ~G  nw  xy  nz  MP  dk#+VYZeVfVnVnVp#kBR  wB  _b  cj  _k  _s  _s  _u  OR  SZ  O[  {B  LP  QG%-ARS]abg~~ow7=2xx$((3  _txx  _$((S\J]  _aeaiaijtau  _y}  zS  zS  TX  zY  _  ]_Qr22 "S  `d  `l  `l  or  `r  ~B  ~J  ~J  K3':: hbs   !F7Fc                      y r1   r   )r   params     r   
localProxyzSpider.localProxy   s    r   )r   )rM   )1)__name__
__module____qualname__r   r   r.   r8   r:   r<   rI   r#   ra   rk   r(   r   r   r+   r   r   r   r  r  r  r  __classcell__)r   s   @r   r   r   	   s    !F %' l,?%3 %3 %* * *v3 v v&c &D &"	 ^  
; -r   r   )sysr&   r   rU   r?   rC   r   urllib.parser   r   base.spiderr   Crypto.Cipherr   r   Crypto.PublicKeyr   Crypto.Util.Paddingr	   r
   r   r   r   <module>r*     s.    1 1 1 1 (  (   )u-V u-r   