a
    h?%                     @   sx   d dl Z d dl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 G dd deZG dd	 d	eZG d
d deZdS )    N   )InfoExtractor   )ExtractorErrordetermine_extextract_attributesint_or_noneparse_qssmuggle_urlunescapeHTMLunsmuggle_urlc                   @   sP   e Zd ZdZdZedd ZedddZdd	 Z	dd
dZ
dd Zdd ZdS )GlomexBaseIEzhttps://player.glomex.com/z:https://integration-cloudfront-eu-west-1.mes.glomex.cloud/c                 C   s   |d u r| S t | d|iS )Norigin)r
   )url
origin_url r   L/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/yt_dlp/extractor/glomex.py_smuggle_origin_url   s    z GlomexBaseIE._smuggle_origin_urlNc                 C   s*   d|p
| j i}t||d\}}||d fS )Nr   )default)_DEFAULT_ORIGIN_URLr   )clsr   Zfallback_origin_urldefaultsZunsmuggled_urldatar   r   r   _unsmuggle_origin_url   s    z"GlomexBaseIE._unsmuggle_origin_urlc                 C   s(   ddddd}| dd }||dS )	NvideoZplaylistzrelated videos playlistzcurated playlist)vplZrlZcl-r   zunknown type)splitget)selfvideo_idZ_VIDEOID_TYPESprefixr   r   r   _get_videoid_type!   s    zGlomexBaseIE._get_videoid_typec                 C   sB   |||p| j d}| |}| j| j|d| dd| d|dS )N)integration_idplaylist_idcurrent_urlzDownloading z JSONzUnable to download )query)r   r#   Z_download_json_API_URL)r    r!   integrationr&   r'   Zvideo_id_typer   r   r   _download_api_data+   s    

zGlomexBaseIE._download_api_datac                    s\     ||}|d }|s(td  fdd|D }t|dkrP|d S  |S )Nvideoszno videos found for c                    s   g | ]}  |qS r   )_extract_api_data).0r   r    r!   r   r   
<listcomp>=       z?GlomexBaseIE._download_and_extract_api_data.<locals>.<listcomp>r   r   )r*   r   lenZplaylist_result)r    r!   r)   r&   Zapi_datar+   r   r.   r   _download_and_extract_api_data8   s    z+GlomexBaseIE._download_and_extract_api_datac              	   C   s"  | ddkr| j|d d g i  }}|d  D ]Z\}}t|}|dkr~| j||d|dd	\}}	|| | j|	|d
 q4|||d q4| dr|D ]}
|d |
d< q| dpg | dpi g }dd |D }| | | dp|| d| d|t	| d| d||dS )NZ
error_codeZcontentGeoblockedZgeo_locations)Z	countriessourcem3u8mp4F)Zm3u8_idfatal)target)r   	format_idlanguageimagesimagec                 S   s4   g | ],}| d r| d|d   ddddqS )r   idz/profile:player-960x540i  i  )r<   r   widthheight)r   )r-   r;   r   r   r   r/   W   s   z2GlomexBaseIE._extract_api_data.<locals>.<listcomp>Zclip_idtitledescriptionZclip_durationZ
created_at)r<   r?   r@   
thumbnailsduration	timestampformatsZ	subtitles)
r   Zraise_geo_restricteditemsr   Z#_extract_m3u8_formats_and_subtitlesextendZ_merge_subtitlesappendZ_remove_duplicate_formatsr   )r    r   r!   rD   subsr8   Z
format_urlextZformats_Zsubs_fmtr:   rA   r   r   r   r,   @   sB    





zGlomexBaseIE._extract_api_data)N)N)__name__
__module____qualname__r   r(   staticmethodr   classmethodr   r#   r*   r2   r,   r   r   r   r   r      s   


r   c                
   @   sH   e Zd ZdZdZdZdZddddd	d
ddddddidgZdd ZdS )GlomexIEZglomexzGlomex videosz1https?://video\.glomex\.com/[^/]+/(?P<id>v-[^-]+)Z19syy24xjn1oqlpczehttps://video.glomex.com/sport/v-cb24uwg77hgh-nach-2-0-sieg-guardiola-mit-mancity-vor-naechstem-titelzv-cb24uwg77hghr5   u8   Nach 2:0-Sieg: Guardiola mit ManCity vor nächstem Titelz$md5:1ea6b6caff1443fcbbba159e432eedb8is  +re:https?://i[a-z0-9]thumbs\.glomex\.com/.+i颍`Z20210501r<   rI   r?   r@   rB   	thumbnailrC   upload_dateskip_downloadr4   r   	info_dictparamsc                 C   s(   |  |}| t|| j|t |S )N)	_match_idZ
url_resultGlomexEmbedIEbuild_player_url_INTEGRATION_IDZie_key)r    r   r!   r   r   r   _real_extract   s
    
zGlomexIE._real_extractN)	rK   rL   rM   IE_NAMEIE_DESC
_VALID_URLr\   _TESTSr]   r   r   r   r   rP   k   s"   
rP   c                
   @   s   e Zd ZdZdZdZeeddZ	de	 dZ
dd	d
dddddddddiddddidddddiddgZddd
d d!d"dd#d$d%ddidgZed-d'd(Zed)d* Zd+d, Zd&S ).rZ   zglomex:embedzGlomex embedded videosz4//player.glomex.com/integration/1/iframe-player.htmlz/1/z/[^/]/zhttps?:z$\?([^#]+&)?playlistId=(?P<id>[^#&]+)zvhttps://player.glomex.com/integration/1/iframe-player.html?integrationId=4059a013k56vb2yd&playlistId=v-cfa6lye0dkdd-sfzv-cfa6lye0dkdd-sfr5   uu   Φώφη Γεννηματά: Ο επικήδειος λόγος του 17χρονου γιου της, ΓιώργουrQ   iCyai Z20211027z$md5:e741185fc309310ff5d0c789b437be66)r<   rI   r?   rS   rC   rB   rT   r@   rU   r4   rV   zhttps://player.glomex.com/integration/1/iframe-player.html?origin=fullpage&integrationId=19syy24xjn1oqlpc&playlistId=rl-vcb49w1fb592p&playlistIndex=0r<   zrl-vcb49w1fb592pd   )r   rW   Zplaylist_countzthttps://player.glomex.com/integration/1/iframe-player.html?playlistId=cl-bgqaata6aw8x&integrationId=19syy24xjn1oqlpczcl-bgqaata6aw8xr   )r   rW   Zplaylist_mincountzwhttps://www.skai.gr/news/world/iatrikos-syllogos-tourkias-to-turkovac-aplo-dialyma-erntogan-eiste-apateones-kai-pseyteszv-ch2nkhcirwc9-sfu   Ιατρικός Σύλλογος Τουρκίας: Το Turkovac είναι ένα απλό διάλυμα –Ερντογάν: Είστε απατεώνες και ψεύτεςz$md5:8b517a61d577efe7e36fde72fd535995i i[-aZ20220111rR   Nc                 C   s,   t j||d}| d| j d| |S )N)
playlistIdintegrationIdzhttps:?)urllibparse	urlencoder   _BASE_PLAYER_URL)r   r!   r)   r   Zquery_stringr   r   r   r[      s
    zGlomexEmbedIE.build_player_urlc                 c   s  d}d| d| j  d}t||D ]*}t|d}| |r$| ||V  q$d| d}t||D ]>}t|d}|d	rh|d
rh| 	|d
 |d	 |V  qhd| d}td|D ]H}|d}t
|d |}	|	sqt
|d |}
|
r| 	|
|	|V  qd S )Nz["\']z((?x)
            <iframe[^>]+?src=(?P<q>z&)(?P<url>
                (?:https?:)?z&\?(?:(?!(?P=q)).)+
            )(?P=q)r   zX(?x)
            <glomex-player [^>]+?>|
            <div[^>]* data-glomex-player=(?P<q>z)true(?P=q)[^>]*>r   zdata-integration-idzdata-playlist-idzN(?x)
            (?P<is_js>dataset\.)?%s\s*(?(is_js)=|:)\s*
            (?P<q>z!)(?P<id>(?:(?!(?P=q)).)+)(?P=q)\sz(?x)<script[^<]*>.+?</script>rd   rc   )_BASE_PLAYER_URL_RErefinditerr   groupZsuitabler   r   r   r[   search)r   r   ZwebpageZquot_reregexZmobjZ	embed_urlattrsscriptr$   r%   r   r   r   _extract_embed_urls   s8    

z!GlomexEmbedIE._extract_embed_urlsc                 C   sL   |  |\}}| |}t|dd gd }|s>tddd| |||S )Nrd   r   zNo integrationId in URLT)expected)r   rY   r	   r   r   r2   )r    r   r   r%   r)   r   r   r   r]      s    
zGlomexEmbedIE._real_extract)N)rK   rL   rM   r^   r_   ri   rk   escapereplacerj   r`   ra   Z_WEBPAGE_TESTSrO   r[   rr   r]   r   r   r   r   rZ      sZ   


"rZ   )rk   urllib.parserf   commonr   utilsr   r   r   r   r	   r
   r   r   r   rP   rZ   r   r   r   r   <module>   s   (Z