
    ĞiM                     *   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z
d dlZddlmZ ddlmZ ddlmZm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
e          Z G d de          Z G d de          Z  G d de          Z!dS )    N   )InfoExtractor   )aes_ecb_decrypt)RequestHandlerResponse)TransportError)ExtractorErrorOnDemandPagedListdecode_base_nint_or_nonetime_secondstraverse_obj
update_urlupdate_url_queryc                   D     e Zd ZdZdZdZdZdZdZd fdZ	d	 Z
d
 Z xZS )AbemaLicenseRH)zabematv-licenseNabematv_license:123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyzs@   3AF0298C219469522A313570E8583005A642E73EDD58E3EA2FB7339D3DF1597Eie	AbemaTVIEc                H     t                      j        di | || _        d S )N )super__init__r   )selfr   kwargs	__class__s      ]C:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/extractor/abematv.pyr   zAbemaLicenseRH.__init__&   s+    ""6"""    c           
         |j         }t          j                            |          j        }	 |                     |          }n`# t          $ r}t          |j                  |d }~wt          t          t          f$ r#}t          t          |                    |d }~ww xY wt          t          j        |          |dt!          t#          |                    i          S )N)causezContent-Lengthheaders)urlurllibparseurlparsenetloc_get_videokey_from_ticketr
   r	   r"   
IndexErrorKeyError	TypeErrorreprr   ioBytesIOstrlen)r   requestr%   ticketresponse_dataes         r   _sendzAbemaLicenseRH._send*   s    k&&s++2	7 ::6BBMM 	7 	7 	7 qw///Q6Hi0 	7 	7 	7 tAww///Q6	7 J}%%s%s3}+=+='>'>?A A A 	As#   A 
B A##B =BB c                    | j                             dd          }| j                             |          }| j                             dd |rdndd|it	          j        d|d                                          d	d
i          }t          |d         | j                  }t          |
                    dd                    }t          j        t          j        | j                  |d         | j         j        z                                   t"          j                  }t          |                                          }t)          t+          ||                    S )NverboseF)to_showz$https://license.abema.io/abematv-hlszRequesting playback licenseta)kvltContent-Typeapplication/json)notequerydatar$   k)table   bigcid	digestmod)r   	get_param_get_media_token_download_jsonjsondumpsencoder   	_STRTABLElistto_byteshmacnewbinascii	unhexlify_HKEY
_DEVICE_IDhashlibsha256digestbytesr   )	r   r4   r:   media_tokenlicense_responseresencvideokeyhenckeys	            r   r*   z(AbemaLicenseRH._get_videokey_from_ticket9   sN   '##Iu55g..w.??7112D`g?r?\?\mr$    vxx 2 2 	 	 ,S1HHH3<<E2233Htz**e$tw'99AACCn& & & ahhjj!!_[&99:::r    )r   r   )__name__
__module____qualname___SUPPORTED_URL_SCHEMES_SUPPORTED_PROXY_SCHEMES_SUPPORTED_FEATURESRH_NAMErQ   rX   r   r7   r*   __classcell__)r   s   @r   r   r      s        1#GLIOE     A A A; ; ; ; ; ; ;r    r   c                   Z    e Zd ZdZdZdZdZdZed             Z	d Z
ddZd	 ZddZd ZdS )AbemaTVBaseIEabematvNs   v+Gjs=25Aw5erR!J8ZuvRrCx*rGswhB&qdHd_SYerEWdU&a?3DzN9BRbp5KwY4hEmcj5#fykMjJ=AuWz5GSMY-d@H7DMEh3M@9n2G552Us$$k9cD=3TxwWe86!x#Zyhec                 6    |                                 }t          t                      dz  dz   dz            }t          j        |          }t          |                                           }d  fdfd}fd}  j                    ||j                    ||            ||j        dz              ||            ||j	        dz             t          j                                      d                              d          S )	Ni  r   c                     t          j        j        t          j                  }|                    |            |                                d S )NrI   )rT   rU   
_SECRETKEYrZ   r[   updater\   )noncerb   clstmps     r   mix_oncez-AbemaTVBaseIE._generate_aks.<locals>.mix_onceg   s;    7>BBBAHHUOOO((**CCCr    c                 B    t          |           D ]}            d S N)range)count_rv   ru   s     r   mix_tmpz,AbemaTVBaseIE._generate_aks.<locals>.mix_tmpm   s1    5\\   r    c                 n     t          j                                      d          | z              d S )N   =)base64urlsafe_b64encoderstrip)rs   rv   ru   s    r   	mix_twistz.AbemaTVBaseIE._generate_aks.<locals>.mix_twistr   s7    HV-c2299$??%GHHHHHr       r~   zutf-8)rP   intr   timegmtimer1   rq   tm_montm_mdaytm_hourr   r   r   decode)	rt   deviceidts_1hourtime_structts_1hour_strr|   r   rv   ru   s	   `      @@r   _generate_akszAbemaTVBaseIE._generate_aks]   sc   ??$$$.2d:;;k(++8}}++--	 	 	 	 	 		 	 	 	 	 	
	I 	I 	I 	I 	I 	I 	   "###	(#a'(((	,#a'(((',,33D99@@IIIr    c           
      b   | j         r| j         S | j        j                            t	          | d                      |                                 \  }}|o!| j                            | j        |d          }|o|	                    d          t          _         t          j         rg	 |	                    d          t          _        |                     d           d S # t          $ r#}|                     d| d           Y d }~nd }~ww xY wt          t!          j                              t          _        |                     | j                  }|                     d	d d
t)          j        | j        |d                                          ddi          }|d         t          _         | j         S )N)r   logger
2024.01.19min_ver	usertoken	device_idTz?Failed to login with cached user token; obtaining a fresh one ()zhttps://api.abema.io/v1/usersAuthorizing)deviceIdapplicationKeySecretr?   r@   rA   rC   r$   token)
_USERTOKEN_downloader_request_directoradd_handlerr   _get_login_infocacheload_NETRC_MACHINEgetrm   rY   rL   r
   report_warningr1   uuiduuid4r   rM   rN   rO   rP   )r   usernamer{   
auth_cacher6   aks	user_datas          r   _get_device_tokenzAbemaTVBaseIE._get_device_token   s   ? 	#?"*66~VZ7[7[7[\\\**,,!f$*//$2ExYe/"f"f
#-#M*..2M2M # 	ll+5>>++F+F(%%d+++! l l l##$jfg$j$j$jkkkkkkkkl $'tz||#4#4   11''+T O(+    vxx 2 (  	 $-W#5 s   &4C 
D	&DD	FTc                     |s| j         r| j         S |                     dd |rdnddddddd	d
dd|                                  i          d         t          _         | j         S )Nz#https://api.abema.io/v1/media/tokenzFetching media tokenFandroidz6.0.1ja_JPz
Asia/Tokyoztv.abemaz3.27.1)osName	osVersionosLang
osTimezoneappId
appVersionAuthorizationbearer )rA   rB   r$   r   )_MEDIATOKENrM   r   rm   )r   
invalidater:   s      r   rL   zAbemaTVBaseIE._get_media_token   s     	$d. 	$##$($7$714X_>j>T>Tej#$!*#&   !E4+A+A+C+C!E!E %8 % % %! r    c                 f   |                                   | j                            | j        |d          r+|                                 r|                     d           d S d|v rd\  }}nd\  }}|                     d| d dt          j        ||d	|i          	                                d
|                                   dddd          }|d         t          _        |                     d           t          j        t          j        d}| j                            | j        ||           d S )Nr   r   zSkipping logging in@)z
user/emailemail)oneTimePassworduserIdzhttps://api.abema.io/v1/auth/z
Logging inpasswordr   zhttps://abema.tvzhttps://abema.tv/r@   )r   OriginRefererr?   r   r   T)r   r   )r   r   r   r   rL   write_debugrM   rN   rO   rP   rm   r   rY   store)r   r   r   epmethodlogin_responser   s          r   _perform_loginzAbemaTVBaseIE._perform_login   sZ      :??4.,?OO 	TXTiTiTkTk 	2333F(??.JB4JB,,0B00$\H   vxx!E4+A+A+C+C!E!E,. 2	" " - 
 
 $2'#: d###&1&1
 

 	
,h
CCCCCr    Downloading JSON metadatac           
      n    |                      d| ||pi |dd|                                  i          S )Nzhttps://api.abema.io/r   r   )rB   rA   r$   )rM   r   )r   endpointvideo_idrB   rA   s        r   	_call_apizAbemaTVBaseIE._call_api   sT    "".H..!E4+A+A+C+C!E!E #   	r    c                     t          j        d|          D ]X}|                     |                    d          |d          }t	          |d          dk    rBt	          |d          }|r|c S Yg S )Nzd(?is)</span></li></ul><script[^>]+type=(["\']?)application/ld\+json\1[^>]*>(?P<json_ld>.+?)</script>json_ldFfatalz@typeBreadcrumbList)itemListElement.name)refinditer_parse_jsongroupr   )r   webpager   jldjsonlditemss         r   _extract_breadcrumb_listz&AbemaTVBaseIE._extract_breadcrumb_list   s    ;w  	 	C %%cii	&:&:HE%RRFFG,,0@@@ )IJJE 	r    )FT)Nr   )rd   re   rf   r   r   rY   r   rq   classmethodr   r   rL   r   r   r   r   r    r   rm   rm   T   s        NJJK UJJ J [JB  B       &D D D>   
 
 
 
 
r    rm   c            
       ~    e Zd 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ddddddddd
ddddddddgZdZd ZdS ) r   zWhttps?://abema\.tv/(?P<type>now-on-air|video/episode|channels/.+?/slots)/(?P<id>[^?/]+)z+https://abema.tv/video/episode/194-25_s2_p1z194-25_s2_p1u>   第1話 「チーズケーキ」　「モーニング再び」u   異世界食堂２u   シーズン2r   r   )idtitleseriesseasonseason_numberepisodeepisode_numberexpired)r%   	info_dictskipz:https://abema.tv/channels/anime-live2/slots/E8tvAnMJ7a9a5dE8tvAnMJ7a9a5duF   ゆるキャン△ SEASON２ 全話一挙【無料ビデオ72時間】u   ゆるキャン△ SEASON２z$md5:9c5a3172ae763278f9303922f0ea5b17)r   r   r   r   r   r   descriptionz2https://abema.tv/video/episode/87-877_s1282_p31047u   第5話『光射す』z$md5:56d4fc1b4f7769ded5f923c55bb4695dzre:https://hayabusa\.io/.+u   相棒)r   r   r   	thumbnailr   r   z'https://abema.tv/now-on-air/abema-animezabema-animez$md5:55f2e61f46a17e9230802d7bcc913d5fT)r   r   is_livezeNot supported until yt-dlp implements native live downloader OR AbemaTV can start a local HTTP serverNc           
      	   |                      |                              dd          \  }}dd|                                 z   i}|                    d          d         }|                     ||          }|                     d|d|	          }|                     ||i 	          }|                     d
|dd 	          }|s`d }	t          j        d|          D ]1}
| 	                    |
                    d          |d          }	|	r n2|	r|	
                    d          }|s|dk    r| j        s|                     d||          | _        t          d          }| j        
                    dg           D ]>}|
                    d          |k    r|d         |k    r||d         k     r
|d         } n?|                     ||          }|r |d         |d<   |d         |d<   |s|d         }|                     d|dd d           }|s.|                     d!|          }|rt          j        d"d#|          }t          j        d$|          }|r|t'          |                    d          t)          d%          	          }t'          |                    d&          t)          d%          	          }|d'k     r|nd |d(<   |d)k     r|nd |d*<   d+\  }}d,}|dk    rpd-}d.}|d/k    rt+          |d0d1i          }|                     ||          }|d2         D ]}||d         k    r|d3         d4         } nt-          d5| d6d-7          n|dk    r|                     d8| |d9|:          }t/          |d;d<t0          hf          s|                     d=           d>}|                    t/          |d?d@dAdBdC                     |st/          |dD          }|st/          |dE          }dF| dG}na|dk    rL|                     dH| |d9|:          }t/          |dId	          s|                     d=           d>}dJ| dG}nt-          dK          |r*|                     dL           |                     dM           |                     ||dN|O          }|                    ||||||dP           t9          |                     |dQ	          d R          x}rdS|ig|dT<   |S )UNr   typer   zBearer /z&<link\s+rel="canonical"\s*href="(.+?)"zcanonical URL)defaultz8<span\s*class=".+?EpisodeTitleBlock__title">(.+?)</span>r   z(?is)<span\s*class="com-m-Thumbnail__image">(?:</span>)?<script[^>]+type=(["\']?)application/ld\+json\1[^>]*>(?P<json_ld>.+?)</script>r   Fr   captionz
now-on-airz5https://api.abema.io/v1/timetable/dataSet?debug=falser#   	   )hoursslots	channelIdstartAtendAtr   r   )z\<p\s+class="com-video-EpisodeDetailsBlock__content"><span\s+class=".+?">(.+?)</span></p><divz8<span\s+class=".+?SlotSummary.+?">(.+?)</span></div><divr   r   )r   r   )r   zog:descriptionztwitter:descriptionu   (?sx)
                    ^(.+?)(?:
                        アニメの動画を無料で見るならABEMA！| # anime
                        等、.+ # applies for most of categories
                    )?
                z\1zs(\d+)_p(\d+)$infr   d   r   i  r   )FNpublicTz https://api.abema.io/v1/channelsznews-globaldivision1channelsplaybackhlszCannot find on-air z	 channel.)expectedz'https://api.abema.io/v1/video/programs/zChecking playability)rA   r$   labelfreezThis is a premium-only streampremium_only)r   r   )r   r   )r   sequence)r   number)r   r   r   r   )r   r   )r   contentz*https://vod-abematv.akamaized.net/program/z/playlist.m3u8z$https://api.abema.io/v1/media/slots/)slotflagstimeshiftFreez'https://vod-abematv.akamaized.net/slot/UnreachablezwThis is a livestream; yt-dlp doesn't support downloading natively, but FFmpeg cannot handle m3u8 manifests from AbemaTVzePlease consider using Streamlink to download these streams (https://github.com/streamlink/streamlink)mp4)extlive)r   r   r   formatsr   availability )rB   r%   
thumbnails)_match_valid_urlr   r   split_download_webpage_search_regex_search_json_ldr   r   r   r   
_TIMETABLErM   r   r   _html_search_regex_html_search_metasubsearchr   floatr   r
   r   boolr   rr   _extract_m3u8_formatsr   _og_search_thumbnail)r   r%   r   
video_typer$   r   canonical_urlinfor   r   r   nowr
  
breadcrumbr   og_descmobjseriepisr   m3u8_urlr  channel_urlonair_channelschapi_responser  r   s                               r   _real_extractzAbemaTVIE._real_extract  s     $44S99??fMM*Y)?)?)A)AA
  %%c**2.
((h77**5w +   ##GXr#BB""GRYcg # i i 		.F{ ^    ))#))I*>*>PU)VV E .

9-- 	|33? %"&"5"5KX# #6 #% #% Q'''C++GR88  88K((H44	?c))cDM.A.A MEE 227HEE
 	( (^DN(nDO (Y--J]D . ; ;  		%,,H'S SG % f &
 G% % y*M:: 	Ctzz!}}eEllCCCDtzz!}}eEllCCCD,03JJDDDD! .2D[[TTdD!"'%%G<K=((.{Z<MNN!00hGGN$Z0 _ _r$x''!*~e4HE ( %%N8%N%N%NY]^^^^  9$$..D(DDh+ / ! !L  w.GHH .##$CDDD-KK\-,!7"7	4 4       I$\3GHH Q*<9OPP\H\\\HH7""..AxAA8+ / ! !L  .PZ_``` .##$CDDD-YYYYHH /// 	I  !Z  [  [  [  !H  I  I  I,,hE - 9 9 	&(
 
 	 	 	 #4#<#<Wb#<#Q#QY]^^^^9 	6#()"4!5Dr    )rd   re   rf   
_VALID_URL_TESTSr  r1  r   r    r   r   r      s        kJ< U*%W
 
   L"]4_A
 
   D"-A6/
 
   9 B
 
 x
 
G-F\ JP P P P Pr    r   c                   t    e Zd Zd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ddddddgZd Zd Zd ZdS )AbemaTVTitleIEzVhttps?://abema\.tv/video/title/(?P<id>[^?/#]+)/?(?:\?(?:[^#]+&)?s=(?P<season>[^&#]+))?   z$https://abema.tv/video/title/90-1887z90-1887u   シャッフルアイランドz$md5:61b2425308f41a5282a926edda66f178)r   r   r   r   )r%   r   playlist_mincountz$https://abema.tv/video/title/193-132z193-132u:   真心が届く~僕とスターのオフィス・ラブ!?~z$md5:9b59493d1f3a792bafbc7319258e7af8rF   z+https://abema.tv/video/title/25-1nzan-whrxez25-1nzan-whrxeu$   ソードアート・オンラインz$md5:c094904052322e6978495532bdbf06e6z@https://abema.tv/video/title/26-2mzbynr-cph?s=26-2mzbynr-cph_s40u   〈物語〉シリーズz26-2mzbynr-cphz$md5:e67873de1c88f360af1f0a4b84847a52)r   r   r   ;   )r%   r   playlist_countc              #       K   |t          | j        z            dt           j                  d}|r||d<                        d| d|d|dz    |          } fd	t          |d
          D             E d {V  d S )Nseq)seriesVersionoffsetorderlimitseasonIdv1/video/series/z	/programszDownloading page r   )rA   rB   c              3   H   K   | ]}                     d |           V  dS )zhttps://abema.tv/video/episode/N)
url_result).0xr   s     r   	<genexpr>z-AbemaTVTitleIE._fetch_page.<locals>.<genexpr>  sT       F F OOAaAABBF F F F F Fr    )programs.r   )r1   
_PAGE_SIZEr   r   )r   playlist_idseries_version	season_idpagerB   rG  s   `      r   _fetch_pagezAbemaTVTitleIE._fetch_page  s      +$011))	
 
  	* )E*>>5{555{/TAX// "  F F F F!(,CDDF F F 	F 	F 	F 	F 	F 	F 	F 	F 	Fr    c                 `    t          t          j        | j        |||          | j                  S rx   )r   	functoolspartialrM  rH  )r   rI  rJ  rK  s       r   _entrieszAbemaTVTitleIE._entries  s0     d.^YWWO  	r    c                 @   |                      |                              dd          \  }}|                     d| |          }|                     |                     ||d         |          ||                    d          |                    d                    S )Nr   r   rA  versionr   r	  )rI  playlist_titleplaylist_description)r  r   r   playlist_resultrQ  r   )r   r%   rI  rK  series_infos        r   r1  zAbemaTVTitleIE._real_extract  s    !%!6!6s!;!;!A!A$!Q!QYnn%E%E%E{SS##MM+{9'=yIIWb&??733!,!;!; $ = = 	=r    N)	rd   re   rf   r2  rH  r3  rM  rQ  r1  r   r    r   r5  r5    s        jJJ 65A
 

   6QA
 

    =";A
 

    R/"A
 

  1 FDF F F"  
= = = = =r    r5  )"r   rV   rO  rZ   rT   r/   rN   r   r   urllib.parser&   r   commonr   aesr   
networkingr   r   networking.exceptionsr	   utilsr
   r   r   r   r   r   r   r   r   rm   r   r5  r   r    r   <module>r^     s           				  				       ! ! ! ! ! ! ! ! ! ! ! ! 1 1 1 1 1 1 1 1 2 2 2 2 2 2	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	4; 4; 4; 4; 4;^ 4; 4; 4;nP P P P PM P P PfB B B B B B B BJC= C= C= C= C=] C= C= C= C= C=r    