U
    Mf8                     @   s   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Zd dl	Z
ddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZmZmZ G dd deZdS )	    N   )InfoExtractor   )
compat_ord)
ExtractorErrorfloat_or_noneint_or_nonemerge_dictsmultipart_encodeparse_durationtraverse_objtry_calltry_geturljoinc                   @   s   e Zd ZdZdZdZdZddiZdZdZ	d	d
dddddde
dddddddddddddde
ddddd dd!d"d#dd$d%d&d'dd(d)e
d*d+d,dd-d.d/dd0d1d2d3dd4d)e
d5d6d,dd7d8d9gZd:d; Zd<d= Zd>d? Zd@dA ZdBdC ZdDS )ECDAIEzQhttps?://(?:(?:www\.)?cda\.pl/video|ebd\.cda\.pl/[0-9]+x[0-9]+)/(?P<id>[0-9a-z]+)Zcdaplzhttps://www.cda.plzhttps://api.cda.plAcceptzapplication/vnd.cda.public+jsonzBasic YzU3YzBlZDUtYTIzOC00MWQwLWI2NjQtNmZmMWMxY2Y2YzVlOklBTm95QlhRRVR6U09MV1hnV3MwMW0xT2VyNWJNZzV4clRNTXhpNGZJUGVGZ0lWUlo5UGVYTDhtUGZaR1U1U3Qz
cda-bearerz http://www.cda.pl/video/5749950cZ 6f844bf51b15f31fae165365707ae970Z5749950cZmp4i  u.   Oto dlaczego przed zakrętem należy zwolnić.z$md5:269ccd135d550da90d1662651fcb9772zre:^https?://.*\.jpg$'   r   Z20160221iV)idextheighttitledescription	thumbnailaverage_ratingduration	age_limitupload_date	timestamp)urlmd5	info_dictz http://www.cda.pl/video/57413289Z a88828770a8310fc00be6c95faf7f4d5Z57413289u!   Lądowanie na lotnisku na Maderzez$md5:60d76b71186dcce4e0ba6d4bbdb13e1aZcrash404   Z20160220iOV)r   r   r   r   r   uploaderr   r   r   r   r   z"https://www.cda.pl/video/8753244c4Z d8eeb83d63611289507010d3df3bb8b3Z	8753244c4zF[18+] Bez Filtra: Rezerwowe Psy czyli...  najwulgarniejsza polska gra?z$md5:ae80bac31bd6a9f077a6cce03c7c077ei8  zarhn eui     i(caZ20211010)r   r   r   r   r   r"   r   r   r   r   r   r   z#https://www.cda.pl/video/17028157b8Z c1fe5ff4582bace95d4f0ce0fbd0f992Z
17028157b8u   STENDUPY MICHAŁ OGIŃSKIz$md5:5851f3272bfc31f762d616040a1d609ai  ZoginskiiI  i-tOeZ20231111zhttp://ebd.cda.pl/0x0/5749950cT)r   Zonly_matchingc                 O   s4   t ddi\}}| j||f||||dd|S )NZage_confirm )ZRefererContent-Type)dataheaders)r
   _download_webpage)selfr   video_idargskwargsr&   content_type r.   8/tmp/pip-unpacked-wheel-zk9bgjdq/yt_dlp/extractor/cda.py_download_age_confirm_pageq   s     z CDAIE._download_age_confirm_pagec           	      C   sH  t d}t dd}t d}d| d| d| d| jd	< | j| j|pPi }|d
dtj	
  d krd|d  | jd< d S ttdddd t|  D  tj  dd}| j| j dd dd| jd| jid||dd}| j| j||d |d tj	
   d d|d  | jd< d S )N)z1.2.88 build 15306z1.2.174 build 18469      )zASUS ZenFone 8zMotorola edge 20 5GzMotorola edge 30 neo 5GzMotorola moto g22zOnePlus Nord 2T 5Gu   Samsung Galaxy A32 SM‑A325FzSamsung Galaxy M13zSamsung Galaxy S20 FE 5Gz
Xiaomi 11TzXiaomi POCO M4 ProzXiaomi Redmi 10zXiaomi Redmi 10CzXiaomi Redmi 9C NFCzXiaomi Redmi Note 10 ProzXiaomi Redmi Note 11 ProzXiaomi Redmi Note 11zXiaomi Redmi Note 11S 5GzXiaomi Redmi Note 11Sz	realme 10zrealme 9 Pro+z	vivo Y33szpl.cda 1.0 (version z
; Android z; )z
User-Agentvalid_untilr      zBearer tokenAuthorizationsW   s01m1Oer5IANoyBXQETzSOLWXgWs01m1Oer5bMg5xrTMMxRZ9Pi4fIPeFgIVRZ9PeXL8mPfXQETZGUAN5StRZ9Pr$   c                 s   s$   | ]}t |d @ f dV  qdS )   z0>2N)byteshex).0Zbtr.   r.   r/   	<genexpr>   s   z'CDAIE._perform_login.<locals>.<genexpr>=z/oauth/tokenz
Logging in    password)Z
grant_typeloginr?   )r&   r'   queryZaccess_tokenZ
expires_in)r6   r4   )randomchoice	randrange_API_HEADERScacheload_BEARER_CACHEgetdtdatetimenowr   base64urlsafe_b64encodehmacnewjoinhashlibr   encodedigestsha256decodereplace_download_json_BASE_API_URL_LOGIN_REQUEST_AUTHstore)	r)   usernamer?   Zapp_versionZandroid_versionZphone_modelZcached_bearerZpassword_hashZ	token_resr.   r.   r/   _perform_loginz   sD    



 
   zCDAIE._perform_loginc                 C   s,   |  |}d| jkr| |S | |S d S )Nr7   )Z	_match_idrE   _api_extract_web_extract)r)   r   r*   r.   r.   r/   _real_extract   s    


zCDAIE._real_extractc                 C   s   | j | j d| || jdd }t|dd}dd |d D }|d	rd|d
sd|sdtddd||d|d|dkrd n|t|d|d||d|drdnd|dd
S )N/video/)r'   videoauthorr@   c              	      sH   g | ]@   d r d    d  dt fdd  ddqS )filer   namec                      s   t  d d d S )Nre   )intr.   qualityr.   r/   <lambda>   r>   z/CDAIE._api_extract.<locals>.<listcomp>.<lambda>length)r   format
resolutionr   filesize)rI   r   )r;   r.   rh   r/   
<listcomp>   s    
z&CDAIE._api_extract.<locals>.<listcomp>	qualitiesZpremiumZpremium_freez0Video requires CDA Premium - subscription neededT)expectedr   r   ZanonimratingZthumbr   Z
for_adultsr#   r   Zviews)
r   r   r   r"   r   r   formatsr   r   Z
view_count)rX   rY   rE   r   rI   r   r   )r)   r*   metar"   rs   r.   r.   r/   r^      s6       zCDAIE._api_extractc              
      s   ddd j d d\}}d|kr>d td|rR  d	}jd
|dd dr~j|j	dd}d}g }j
d|dd dd}j
d|dd	dd}|||t|||d |rdndd	j|i d}dd   fdd}	|	|d td|D ]d\}
}|r6j}nj}|tj|
d | d!d	d"}|sxd#| d! q |	|| q t|S )$Nzcda.plz
cda.playerhtml5ra   z/vfilmu2   Ten film jest dostępny dla użytkowników premiumz.This video is only available for premium usersu.   niedostępn[ey] w(?:&nbsp;|\s+)Twoim kraju\s*<Fz*(<button[^>]+name="[^"]*age_confirm[^"]*")zbirthday validate form)defaultzConfirming age)noteTz(?x)
            <(span|meta)[^>]+itemprop=(["\'])author\2[^>]*>
            (?:<\1[^>]*>[^<]*</\1>|(?!</\1>)(?:.|\n))*?
            <(span|meta)[^>]+itemprop=(["\'])name\4[^>]*>(?P<uploader>[^<]+)</\3>
        r"   )rv   group)zO<(?:span|meta)[^>]+itemprop=(["\'])ratingValue\1[^>]*>(?P<rating_value>[0-9.]+)zA<span[^>]+\bclass=["\']rating["\'][^>]*>(?P<rating_value>[0-9.]+)rr   Zrating_valuefatalrx   r#   r   )	r   r   r   r"   r   r   rs   r   r   c                 S   s   dD ]}|  |d} qtj| } g }| D ]F}t|}|d|  krNdkrfn ntd|d d  nt| q*d|} |  dd} dD ]}|  |d	} qd
| kr|  d
d} d|  S d|  d S )N)Z_XDDDZ_CDAZ_ADCZ_CXDZ_QWEZ_Q5Z_IKSDEr$   !   ~   r2   ^   z.cda.mp4)z.2cda.plz.3cda.plz.cda.plz	/upstreamz.mp4/upstreamzhttps://.mp4)rW   urllibparseunquoter   appendchrrQ   )apbcfr.   r.   r/   decrypt_file  s    <
z(CDAIE._web_extract.<locals>.decrypt_filec           
   
      s  j d| | dddd}|s"d S j|| ddd}|s@d S |d}|rVd	|krld
| d d S |d	 drt|d	 d|d	< |d	 dr|d	 dd|d	< n|d	 dsЈ|d	 |d	< |d |di }t	 fdd|
 D   d |d	  t d d d |
 D ]\}}| krFq0ddd||d|di gd}t| }jd dd d!|d"| d#d$| d#dd%}	t|	d&d' d(kr0t|	d)d' }	d |	|t|d d d q0d* st|d*d*< d S )+Nz,player_data=(\\?["\'])(?P<player_data>.+?)\1z player_jsonFplayer_datary   z player_datarz   rb   rd   zUnable to extract  version informationZuggcrot_13zadc.mp4r~   httpri   rp   c                 3   s   | ]\}}| kr|V  qd S )Nr.   )r;   kvZvideo_qualityr.   r/   r<   /  s      z=CDAIE._web_extract.<locals>.extract_format.<locals>.<genexpr>rs   rf   )r   Z	format_idr   z2.0ZvideoGetLinkr   tsZhash2)Zjsonrpcmethodr   paramszhttps://www.cda.pl/video/zapplication/jsonZXMLHttpRequest)r%   zX-Requested-Withz	Fetching z urlzFailed to fetch )r'   r&   rw   Zerrnoterz   c                 S   s   | d d S )Nresultstatusr.   xr.   r.   r/   rj   A  r>   z<CDAIE._web_extract.<locals>.extract_format.<locals>.<lambda>okc                 S   s   | d d S )Nr   respr.   r   r.   r.   r/   rj   B  r>   r   )_html_search_regexZ_parse_jsonrI   report_warning
startswithcodecsrV   endswithrW   nextitemsr   r   jsondumpsrS   rX   r   r   )
pageversionZjson_strr   rb   rp   ri   Zcda_qualityr&   Z	video_urlr   r    r)   r*   r   r/   extract_format  sz         


  

 
z*CDAIE._web_extract.<locals>.extract_formatrv   zU<a[^>]+data-quality="[^"]+"[^>]+href="([^"]+)"[^>]+class="quality-btn"[^>]*>([0-9]+p)zDownloading r   r   zUnable to download )Z_set_cookieZ_download_webpage_handle	_BASE_URLZraise_login_requiredresearchZraise_geo_restrictedr   r0   r   Z_search_regexZ_og_search_titleZ_og_search_descriptionr   Z_og_search_thumbnailZ_search_json_ldfindallr(   r   r   r	   )r)   r*   ZwebpageZurlhZneed_confirm_agers   r"   r   infor   hrefrm   handlerr.   r   r/   r_      s     
         
3

 
 zCDAIE._web_extractN)__name__
__module____qualname__Z
_VALID_URLZ_NETRC_MACHINEr   rY   rE   rZ   rH   floatZ_TESTSr0   r]   r`   r^   r_   r.   r.   r.   r/   r      s    I	:r   )rM   r   rK   rJ   rR   rO   r   rB   r   urllib.parser   commonr   compatr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r.   r.   r.   r/   <module>   s   0