a
    h                     @   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                
   @   s>   e Zd ZdZdddddddd	g d
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 nP t	y } z8t
|jtrĈ |jj |d }t|W Y d }~n
d }~0 0 g i  }	}
t|dD ]\}|ddkr2 |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Ԉ g d+|	|
t fd,d-d.	S )/NZ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	synopisis)zog:descriptionztwitter:descriptionr   c                      s     ddS )Nkeywordsz, )_html_search_metasplit selfZwebpager#   N/mnt/pikpak/tmp/myenv/lib/python3.9/site-packages/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   sd    






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   	