o
    i,!                     @   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d"d#dd$dd%d&d'd(d)ddidd*dd+gZd,d-dd.dd/d0d1d2d3ddidd4d5dd6d7d8d9d:dd;ddidgZe fd<d=Zd>d? Z	  Z
S )@
BunnyCdnIEz|https?://(?:(?:iframe|player)\.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      @20230828)idexttitledescription	timestamp	thumbnaildurationupload_dateskip_downloadT)url	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:11452bcb31f379ee3eaf1234d3264e44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     @20240221zOre:^https?://.*\.b-cdn\.net/2e8545ec-509d-4571-b855-4cf0235ccd75/thumbnail\.jpg)r   r   r   r   r   r   r   r   zRhttps://iframe.mediadelivery.net/embed/289162/6372f5a3-68df-4ef7-a115-e1110186c477z$6372f5a3-68df-4ef7-a115-e1110186c477z012-Creating Small Asset Blockouts -Timelapse.mp4g     pp@i@f20240824zOre:^https?://.*\.b-cdn\.net/6372f5a3-68df-4ef7-a115-e1110186c477/thumbnail\.jpg)r   r   r   r   r   r   r   r   zRhttps://player.mediadelivery.net/embed/519128/875880a9-bcc2-4038-9e05-e5024bba9b70)r   only_matchingzhttps://conword.io/z$3a5d863e-9cd6-447e-b6ef-e289af50b349u.   Conword bei der Stadt Köln und Stadt Dortmund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.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   webpage	embed_url	__class__ M/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/bunnycdn.pyr(   m   s   zBunnyCdnIE._extract_embed_urlsc                 C   s|  t |i \}}| |dd\}}| jd| d| |d|dp#ditt|ddd	d
}| j|d ddk }rAtddd|dkrKtdddd|i}t| j	||||ddp\i }|dpcg }	|dpji }
| j
d|dd d}t|r| jt||d|ddd}|r|jdkr|	|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||
d0 d1||||d2i}||	|
d3t|td4dd5hthd6tjhd7thfd8thfd9f|| j||dd:S );Nr   
library_idz'https://iframe.mediadelivery.net/embed//r&   z!https://iframe.mediadelivery.net/tokenexpires)r2   r3   )headersquery)default403zZThis video is inaccessible. Setting a Referer header might be required to access the videoT)expected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noter4   fatalexpected_status   sourcer   r   zContent-Length)r   	format_idqualityhttp_headersr   filesizez6\.setAttribute\([\'"]src[\'"],\s*[\'"]([^\'"]+)[\'"]\)zsrc urlz%loadUrl\([\'"]([^\'"]+/activate)[\'"]zactivation urlz!loadUrl\([\'"]([^\'"]+/ping)[\'"]zping url)secretr   )	contextIdr   zDownloading activation data)r4   r>   hls)r4   m3u8_idr?   bunnycdn)protocolrE   )target_bunnycdn_ping_data)r   r4   rG   
context_id)r   r;   r<   z
main-video)r   htmlzdata-plyr-configr   zdata-poster)r   r   )r?   )r   _match_valid_urlgroup_download_webpagegetr   r	   _html_extract_titler   _parse_html5_media_entries_search_regexr   _request_webpager   statusappendr   r   
get_header#_extract_m3u8_formats_and_subtitlesupdateextend_merge_subtitlesr   r   jsonloadsstr_search_json_ld)selfr   smuggled_datar=   r0   r*   
html_titler4   infor;   r<   original_urlurlhsrc_urlactivation_urlping_urlrG   rO   	ping_datafmtssubsfmtr.   r.   r/   _real_extractr   s   






	zBunnyCdnIE._real_extract)__name__
__module____qualname__
_VALID_URL_EMBED_REGEX_TESTS_WEBPAGE_TESTSclassmethodr(   rq   __classcell__r.   r.   r,   r/   r      s    



<

r   )r`   commonr   
networkingr   utilsr   r   r   r	   r
   r   r   r   utils.traversalr   r   r   r.   r.   r.   r/   <module>   s    (
