U
    g                     @   sP   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
 G dd deZdS )	    N   )InfoExtractor   )	HTTPError)ExtractorErrorGeoRestrictedErrorfloat_or_nonetraverse_objtry_callc                   @   sB   e Zd ZdZdddddddd	d
dddgddgZdZdd ZdS )OnDemandChinaEpisodeIEzThttps?://www\.ondemandchina\.com/\w+/watch/(?P<series>[\w-]+)/(?P<id>ep-(?P<ep>\d+))zEhttps://www.ondemandchina.com/en/watch/together-against-covid-19/ep-1Z264394Zmp4g(\q@zEP 1 The Callingu   第1集 令出如山zZhttps://d2y2efdi5wgkcl.cloudfront.net/fit-in/256x256/media-io/2020/9/11/image.d9816e81.jpgu<   疫情严峻，党政军民学、东西南北中协同应考zSocial HumanitiesZDocumentaryZMedicalZSocial)idextdurationtitle	alt_title	thumbnaildescriptiontags)urlZ	info_dicta  
        query Episode($programSlug: String!, $episodeNumber: Int!) {
            episode(
                programSlug: $programSlug
                episodeNumber: $episodeNumber
                kind: "series"
                part: null
            ) {
                id
                title
                titleEn
                titleKo
                titleZhHans
                titleZhHant
                synopsis
                synopsisEn
                synopsisKo
                synopsisZhHans
                synopsisZhHant
                videoDuration
                images {
                    thumbnail
                }
            }
        }c                    s    |ddd\}}} || jd|dditd j|t|dd	 d
d d }z& jd|d  d|dddd}W nN t	k
r } z0t
|jtrƈ |jj |d }t|W 5 d }~X Y nX g i  }	}
t|dD ]\}|ddkr0 |d|\}}|	|  j||
d q d|d | qt|d t|ddt|dp| ddgt|dd p d!d"gp t|d#d$d%t|d&d'd(d)d*pԈ d+d,d-g|	|
t fd.d/d0	S )1NZseriesr   epz'https://odc-graphql.odkmedia.io/graphqlzContent-typezapplication/jsonZEpisode)ZprogramSlugZepisodeNumber)ZoperationNamequery	variables)headersdatar   Zepisodez(https://odkmedia.io/odc/api/v2/playback// Zodc)Authorizationzservice-name)r   Zdetail)sources.typeZhlsr   )targetzUnsupported format ZvideoDurationi  )Zimagesr   zog:imageztwitter:imager   ZtitleEnzog:titleztwitter:titleZtitleKoZtitleZhHansZtitleZhHantZ
synopsisEnZ
synopsisKoZsynopsisZhHansZsynopsisZhHantZ	synopisiszog:descriptionztwitter:descriptionr   c                      s     ddS )Nkeywordsz, )_html_search_metasplit selfZwebpager#   =/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/odkmedia.py<lambda>h       z6OnDemandChinaEpisodeIE._real_extract.<locals>.<lambda>)	r   r   r   r   r   r   formats	subtitlesr   )Z_match_valid_urlgroupZ_download_webpageZ_download_jsonjsondumps_QUERYintencoder   
isinstancecauser   Z_parse_jsonresponsereadr   r	   getZ#_extract_m3u8_formats_and_subtitlesextendZ_merge_subtitlesZreport_warningstrr   r!   Z_html_extract_titler
   )r%   r   Zprogram_slugZ
display_idZ	ep_numberZ
video_infoZsource_jsoneZ
error_datar)   r*   sourceZfmtssubsr#   r$   r&   _real_extract8   sr     


 



     z$OnDemandChinaEpisodeIE._real_extractN)__name__
__module____qualname__Z
_VALID_URLZ_TESTSr.   r;   r#   r#   r#   r&   r      s   
r   )r,   commonr   Znetworking.exceptionsr   utilsr   r   r   r	   r
   r   r#   r#   r#   r&   <module>   s   	