
    }j$                         d dl Z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mZmZmZ ddlmZmZ  G d de      Zy)	    N   )InfoExtractor   )ExtractorError
clean_htmlextract_attributesfloat_or_noneint_or_nonemerge_dictsparse_iso8601parse_m3u8_attributesparse_resolutionurlencode_postdataurljoin)find_elementtraverse_objc                       e Zd ZdZdZdZdZdgZdZddd	d
dddddddddd	ddddddddgZ	e
d        Ze
d        Ze
d        Zd Zd Zy)ZanIEzanzZ-aNzhttps://www.zan-live.comFJPz@https?://(www\.)?zan-live\.com/[^/?#]+/live/play/\d+/(?P<id>\d+)z.https://www.zan-live.com/en/live/play/1797/663663mp4zThe sample video pageuK   こちらはサンプル動画の再生テストページとなります。z$md5:12ba331396215fe345b9362c56f3da8620220228ipbz:re:https?://storage\.zan-live\.com/image/.+\.(?:jpe?g|png))idexttitle	alt_titledescriptionrelease_daterelease_timestamp	thumbnail)url	info_dictz/https://www.zan-live.com/ja/live/play/6910/42684268uR   縁結びのゆかり様1stイベント 結び、結ばれ、桃源郷ua   縁結びのゆかり様1stイベント 結び、結ばれ、桃源郷 昼公演[アーカイブ]z$md5:f53156a49ce5b45265d07966679ab49420260614iM.jc                 d   t        j                  t        t        j                  |j                                     D ]q  \  }}|j                  d      r|st        |t        hdt        hf      }|s6t        ||      t        | fdf      D ]  }|j                  t        ||              s y )Nz#EXT-X-STREAM-INF:zDISPLAY-NAMEc                 ,    |j                  d      k(  S )Nr"   )get)_v
format_urls     G/root/.hermes/venv/lib/python3.12/site-packages/yt_dlp/extractor/zan.py<lambda>z+ZanIE._fixup_m3u8_formats.<locals>.<lambda>G   s    QUU5\Z7     )	itertoolspairwisemapstrstrip
splitlines
startswithr   r   r   r   updater   )formatsm3u8_docm3u8_url
stream_inf	media_urlresfmtr+   s          @r,   _fixup_m3u8_formatszZanIE._fixup_m3u8_formats8   s    %.%7%7		8..01&
 	2!J	 (()=>iz&':J9K,M NC 95J#G7.  2 

;sC012	2r.   c                    t        | j                  d      d         xs d}|dk  ryt        j                  |      }|dz  |k(  r#t	        |      D cg c]  }||z  ||z  ddf }}nF|dk(  r@d}dgt	        d      D cg c]  }d|ddf
 c}t	        d      D cg c]  }|dddf
 c}}ny|rd|cxk  rt        |      k  sn t        |      }||d | fS c c}w c c}w c c}w )	Nr)   r   )NNr   r         )r   r   r   r   )r
   	partitionmathisqrtrangelen)ma_type	ma_number	divisionsunitiareass         r,   _get_multiangle_layoutzZanIE._get_multiangle_layoutK   s      1 1# 6q 9:?a	>zz)$19	!:?	:JKQa$hT	1a0KEK!^D(-a111aA,1 ).a111aA,1E a9:E
:E
IU:I&&& L
 21s   C>CC"c                 t    |dz  dz  }d| d| d|dz  dd| d| d|dz  dd	|  d| d
|dd| d| d
|ddS )N	      zcrop=trunc((iw*/-r   gz)/2)*2:trunc((ih*z)/2)*2:trunc(iw*+z):trunc(ih*) )xywhrJ   margin_ymargin_xs          r,   _multiangle_cropzZanIE._multiangle_croph   s    a<"$1TF!HqL#3 41TF!HqL#3 4s!D68A, /s!D68A,a	1	
r.   c                 
   | j                  ddg      d   dk(  r| j                  d       |S | j                  ||      \  }}|| j                  d|        |S g }|D ]  }|j	                  d      dk(  rt        |dt        hf      }	t        |d	      D ]i  \  }
\  }}}}|j                  i |d
d| j                  ||||||      ddddgi|d    d|
 |	rt        |	|z  |z  |dz  z
  dz  dz        nd d|
 d       k  |S )Nsplit_anglesfalser   zqMulti-angle formats are available. Use --extractor-args "zan:split_angles=true" to extract separate angle formatszUnsupported multiangle type: vcodecnoneheightr   ffmpeg_args_outz-vfz-c:vlibx264z-c:acopy	format_idz-angler   m3u8)downloader_optionsrg   rc   protocolsource_preference)
_configuration_arg	to_screenrM   report_warningr(   r   r
   	enumerateappendr]   )selfr7   rG   rH   	ma_marginrJ   rL   angle_formatsr=   rc   rK   rW   rX   rY   rZ   s                  r,   _multiangle_formatszZanIE._multiangle_formatst   st   "">G9=a@GKNNLM N11'9Ee="?y IJN 	Cwwx F*!#;-'@AF#,UA#6 <Aq!Q$$ && *!4#8#8Aq!T9#U"I"F,+ %($4#5VA3!?IO *!d*Y]:q@1DFUY &*+& 	, r.   c                 r   | j                  |      }| j                  ||      }t        |t        d      ht        ht
        f      x}r| j                  || j                         | j                  d|d       }| j                  d|d       }| j                  d|d       }t        |||f      s| j                          | j                  | j                   d| d	|d
|it        ||d            }t        |dt        hf      st        d      t        |dt         hf      }	dD ](  \  }
}}t        |	|
t        hf      |ust        |d       t        |	dt        hf       }t#        | j                  d|            }t        |dt$        hfd      }|rx|rv||k  rqt&        j(                  j+                  |t&        j,                  j.                        j1                         j3                  d      }| j5                  d| d       |d|dS | j                  d|d      }| j7                  ||d      \  }}|j8                  }| j;                  ||d      \  }}| j=                  |||       | j                  d |d       x}rPt%        | j                  d!|d             }t?        | j                  d"|d       d      }| jA                  ||||      }t        |t        d#      ht        d$d%      htB        hd&tE        | j                   d'      hf      }| j                  ||d(      xs d)}|t        || jF                  ht        ht
        f      |||| jI                  |      d*t        || jF                  ht        ht
        ft        d+      ht        d,      hft        ht
        tJ        fd-      S ).Nz!p-common_message__headline--error)cls)	countriesz
csrf-token)defaultzvod-pctzlive-player-tokenz
/api/live/z/getLiveStatuszX-Csrf-Token)pcttoken)headersdata	isSuccesszUnexpected errorresult))
isFinishedFz!This video is no longer available)canPlayTzTicket has expiredT)expectedisVodzopen-live-datesrvTimer   z%Y-%m-%d %H:%M:%S %Zz)This livestream is scheduled to start at is_upcoming)r   live_statusr    zlive-url)fatalzDownloading m3u8 information)noter   zmultiangle-typezmultiangle-numberzmultiangle-marginlinkTxtzd-flex align-items-center)rv   htmlhrefrQ   F )r   r   r7   is_liver    r!   zp-eventinfo__detailgroupDetail)r   r   )&	_match_id_download_webpager   r   r   filterraise_geo_restricted_GEO_COUNTRIES_html_search_metaallraise_login_required_download_json	_BASE_URLr   boolr   dictr   r
   dtdatetimefromtimestamptimezoneutc
astimezonestrftimeraise_no_formats_download_webpage_handler"   !_parse_m3u8_formats_and_subtitlesr>   r	   rt   r   r   _og_search_title_og_search_thumbnailany)rq   r"   video_idwebpage	error_msg
csrf_tokenry   rz   statusr~   keyrequirederror_messager   r    srv_time
start_timer9   r8   urlhr7   r)   rG   rH   rr   
detail_urldetails                              r,   _real_extractzZanIE._real_extract   s=   >>#&((h7$WABCj\SY/
  9  %%i4;N;N%O++L'4+P
$$Y$F&&':GT&RJU+,%%'$$~~j
.A8
V&(  %  F[4&$9: !344fx$&89-
 	C(C= FS4&M2(B$]TBB	C #6GdV+<==)$*@*@AQSZ*[\[M(BAN(X8I-I22!2;;??jl88$:;  !!;J<HSW " Y ,%6  ))*gT)J66h%C 7 E$88;;HhPUV
  (H=,,->QU,VV7V#D$:$:#Wd %; %< =I%d&<&<#Wd '= '<EFHI..wIVG!'i()9EF &7dnn5EQ3G+H*I,K L
 ''
HE'JPb %g&&'*v0? @!2226:
 6001J<H!&;<=!m45! < .$ 
 	
r.   N)__name__
__module____qualname__IE_NAMEIE_DESCr   _GEO_BYPASSr   
_VALID_URL_TESTSstaticmethodr>   rM   r]   rt   r   rV   r.   r,   r   r      s    GG*IKVNTJ?,fA&!+V	
 Ai|A&!+V	
F4 2 2$ ' '8 	
 	
#JU
r.   r   )r   r   r/   rC   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r   utils.traversalr   r   r   rV   r.   r,   <module>r      s8       !    9X
M X
r.   