
    uki                     b    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 ddlmZ  G d de      Zy)	   )InfoExtractor   )	HTTPError)ExtractorErrorUserNotLiveint_or_nonejoin_nonemptyparse_iso8601str_or_noneurl_or_none)traverse_objc                   H    e Zd ZdZdZdZdddddd	ed
ddd	dddddgZd Zy)FlexTVIE	ttingliveu   띵라이브 (formerly FlexTV)zNhttps?://(?:www\.)?(?:ttinglive\.com|flextv\.co\.kr)/channels/(?P<id>\d+)/livez-https://www.flextv.co.kr/channels/231638/live231638mp4u   re:^214하나만\.\.\. zre:^https?://.+\.jpgzre:\d{8}is_liveu   Hi별244396)	idexttitle	thumbnailupload_date	timestamplive_statuschannel
channel_idzThe channel is offline)url	info_dictskipz*https://www.flextv.co.kr/channels/746/liveT)r   only_matchingc                 N   | j                  |      }	 | j                  d| d|ddi      }g }t        |dd	t        hf      D ]  }|j                  d
      dk(  rCt        |j                  d            r)|j                  | j                  |d   |dddd             dD ]s  }t        |d|dd f      D ]]  }|j                  t        ||j                  d      d      |d   t!        |j                  d            |dk(  rdnd|dk(  rdndd       _ u  ||ddt        |ddt"        hfdd t$        hfd!t        hfd"d#t"        hfd"d$t&        hfd%      S # t        $ rE}t        |j                  t
              r%|j                  j                  dk(  rt        |       d }~ww xY w)&Nz'https://api.ttinglive.com/api/channels/z/streamoptionall)queryi  )video_idsources.formativsr   r   TF)livefatalm3u8_id)hlsflv	urlDetail
resolutionc                     t        |d         S )Nr   )r   )_vs     R/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/yt_dlp/extractor/flextv.py<lambda>z(FlexTVIE._real_extract.<locals>.<lambda>9   s    [YZ[`YaMb     
suffixName )delimr-   r.   m3u8_nativehttp)	format_idr   heightr   protocol)r   formatsr   streamr   	createdAtthumbUrlownernamer   )r   r   r   r   r   )	_match_id_download_jsonr   
isinstancecauser   statusr   r   dictgetr   extend_extract_m3u8_formatsappendr	   r   strr
   r   )	selfr   r   stream_dataer?   r@   format_typedatas	            r4   _real_extractzFlexTVIE._real_extract&   s   ^^C(
	--9*WM8U"3 . 5K ";C$0HI 	Fzz(#u,VZZ=N1Ot995M:u4uV[  :  ] ^- 	(#[,@b2d e DNN%2;@V^`%a#E{"-dhh|.D"E(3u(<u%5@E5IMv$ 			  
 ;"GcU3&m_E(;-8#VcU3&{m<) 	
 	
+  	!''9-!''..C2G!:66	s   E 	F$A FF$N)	__name__
__module____qualname__IE_NAMEIE_DESC
_VALID_URLint_TESTSrU    r6   r4   r   r      sW    G.GbJ>/0&$"

 ) <F&'
r6   r   N)commonr   networking.exceptionsr   utilsr   r   r   r	   r
   r   r   utils.traversalr   r   r^   r6   r4   <module>rc      s+    ! -   +>
} >
r6   