a
    h	                     @   sl   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 ddlmZmZ G dd	 d	eZdS )
    N   )InfoExtractor   )HEADRequest)ExtractorErrorextract_attributesint_or_noneparse_qssmuggle_urlunsmuggle_urlurl_or_noneurlhandle_detect_ext)find_elementtraverse_objc                       s   e Zd ZdZde dgZdddddd	d
dddddidddddddddddddidddddddddd d!ddidgZd"d#dd$dd%d&d'd(d)ddidd*d+dd,d-d.d/d0dd1ddidgZe fd2d3Zd4d5 Z	  Z
S )6
BunnyCdnIEzqhttps?://(?:iframe\.mediadelivery\.net|video\.bunnycdn\.com)/(?:embed|play)/(?P<library_id>\d+)/(?P<id>[\da-f-]+)z<iframe[^>]+src=[\'"](?P<url>z[^\'"]*)[\'"]zRhttps://iframe.mediadelivery.net/embed/113933/e73edec1-e381-4c8b-ae73-717a140e0924z$e73edec1-e381-4c8b-ae73-717a140e0924mp4zmistress morgana (3).mp4 iYdzOre:^https?://.*\.b-cdn\.net/e73edec1-e381-4c8b-ae73-717a140e0924/thumbnail\.jpgg      @Z20230828)idexttitledescription	timestamp	thumbnaildurationupload_dateZskip_downloadT)urlZ	info_dictparamszQhttps://iframe.mediadelivery.net/play/136145/32e34c4b-0d72-437c-9abb-05e67657da34z$32e34c4b-0d72-437c-9abb-05e67657da34idzXre:^https?://.*\.b-cdn\.net/32e34c4b-0d72-437c-9abb-05e67657da34/thumbnail_9172dc16\.jpgg     Z@z$md5:981a3e899a5c78352b21ed8b2f1efd81Z20230804z&Sanela ist Teil der #arbeitsmarktkraft)r   r   r   r   r   r   r   r   zRhttps://iframe.mediadelivery.net/embed/200867/2e8545ec-509d-4571-b855-4cf0235ccd75z$2e8545ec-509d-4571-b855-4cf0235ccd75iXeznetflix part 1g     @Z20240221zOre:^https?://.*\.b-cdn\.net/2e8545ec-509d-4571-b855-4cf0235ccd75/thumbnail\.jpg)r   r   r   r   r   r   r   r   zhttps://conword.io/z$3a5d863e-9cd6-447e-b6ef-e289af50b349u.   Conword bei der Stadt Köln und Stadt DortmundZ20231031g      ?@zLhttps://video.watchuh.com/3a5d863e-9cd6-447e-b6ef-e289af50b349/thumbnail.jpgibAe)r   r   r   r   r   r   r   r   zjhttps://www.stockphotos.com/video/moscow-subway-the-train-is-arriving-at-the-park-kultury-station-10017830z$0b02fa20-4e8c-4140-8f87-f64d820a3386zOre:^https?://.*\.b-cdn\.net/0b02fa20-4e8c-4140-8f87-f64d820a3386/thumbnail\.jpgzAMoscow subway. The train is arriving at the Park Kultury station.Z20240531g      2@iYf)r   r   r   r   r   r   r   r   c                 #   s(   t  ||D ]}t|d|iV  qd S )NReferer)super_extract_embed_urlsr
   )clsr   webpageZ	embed_url	__class__ N/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/bunnycdn.pyr   \   s    zBunnyCdnIE._extract_embed_urlsc                 C   s  t |i \}}| |dd\}}| jd| d| |t|dditt|dddd	}| j|d d
dk }rtdddn|dkrtdddd|i}t| j||||ddpi }|	dpg }	|	dpi }
| j
d|dd d
}t|rF| jt||d|ddd}|rF|jdkrF|	|dd|t|dd
t|dd  | j
d!|d"d d
}| j
d#|d$d d
}| j
d%|d&d d
}tt|d'}tt|d(}i }|r,|r,|r,|r,|r,| j|||d)d* | j||d|d+dd,\}}|D ]}|d-|d. q|	| | j||
d/ d0||||d1i}||	|
d2t|td3dd4hthd5tjhd6thfd7thfd8f|| j||dd9S ):Nr   
library_idz'https://iframe.mediadelivery.net/embed//r   tokenexpires)r(   r)   )headersquery)defaultZ403zZThis video is inaccessible. Setting a Referer header might be required to access the videoT)expectedZ404zThis video does not exist)_headersr   formats	subtitlesz9(?:var|const|let)\s+originalUrl\s*=\s*["\']([^"\']+)["\']zoriginal urlzChecking originalF)i  i  )video_idnoter*   fatalZexpected_status   sourcer   r   zContent-Length)r   Z	format_idZqualityhttp_headersr   filesizez6\.setAttribute\([\'"]src[\'"],\s*[\'"]([^\'"]+)[\'"]\)zsrc urlz%loadUrl\([\'"]([^\'"]+/activate)[\'"]zactivation urlz!loadUrl\([\'"]([^\'"]+/ping)[\'"]zping url)secretr   )Z	contextIdr   zDownloading activation data)r*   r2   Zhls)r*   Zm3u8_idr3   Zbunnycdn)protocolr6   )targetZ_bunnycdn_ping_data)r   r*   r8   
context_id)r   r/   r0   z
main-video)r   htmlzdata-plyr-configr   zdata-poster)r   r   )r3   )r   Z_match_valid_urlgroupZ_download_webpager   r	   Z_html_extract_titler   Z_parse_html5_media_entriesgetZ_search_regexr   Z_request_webpager   statusappendr   r   
get_headerZ#_extract_m3u8_formats_and_subtitlesupdateextendZ_merge_subtitlesr   r   jsonloadsstrZ_search_json_ld)selfr   Zsmuggled_datar1   r&   r!   Z
html_titler*   infor/   r0   original_urlZurlhZsrc_urlZactivation_urlZping_urlr8   r;   Z	ping_dataZfmtssubsfmtr$   r$   r%   _real_extracta   s    






	zBunnyCdnIE._real_extract)__name__
__module____qualname__Z
_VALID_URLZ_EMBED_REGEXZ_TESTSZ_WEBPAGE_TESTSclassmethodr   rL   __classcell__r$   r$   r"   r%   r      s   


+

r   )rD   commonr   Z
networkingr   utilsr   r   r   r	   r
   r   r   r   Zutils.traversalr   r   r   r$   r$   r$   r%   <module>   s
   (
