
    VGhM                        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!y)    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@   3AF0298C219469522A313570E8583005A642E73EDD58E3EA2FB7339D3DF1597Ec                2    t        |   di | || _        y )N )super__init__ie)selfr   kwargs	__class__s      a/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/abematv.pyr   zAbemaLicenseRH.__init__&   s    "6"    c           
         |j                   }t        j                  j                  |      j                  }	 | j                  |      }t        t        j                  |      |dt!        t#        |            i      S # t        $ r}t        |j                        |d }~wt        t        t        f$ r}t        t        |            |d }~ww xY w)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    kk&&s+22	7 ::6BM JJ}%s%s3}+='>?A 	A  	7 qww/Q6Hi0 	7 tAw/Q6	7s#   A= =	CBC4C

Cc                    | j                   j                  dd      }| j                   j                  |      }| j                   j                  dd |rdndd|it	        j
                  d|d      j                         d	d
i      }t        |d   | j                        }t        |j                  dd            }t        j                  t        j                  | j                        |d   | j                   j                   z   j                         t"        j$                        }t        |j'                               }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   r3   r9   media_tokenlicense_responseresencvideokeyhenckeys	            r   r)   z(AbemaLicenseRH._get_videokey_from_ticket9   s"   ''##Iu5gg..w.?77112D`g?\mr$  vx 2 2 	 ,S1H3<<E23HHtzz*e$tww'9'99AACnn& ahhj!_[&9::r   )r   	AbemaTVIE)__name__
__module____qualname___SUPPORTED_URL_SCHEMES_SUPPORTED_PROXY_SCHEMES_SUPPORTED_FEATURESRH_NAMErP   rW   r   r6   r)   __classcell__)r   s   @r   r   r      s4    1#GLIOEA;r   r   c                   R    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y)AbemaTVBaseIEabematvNs   v+Gjs=25Aw5erR!J8ZuvRrCx*rGswhB&qdHd_SYerEWdU&a?3DzN9BRbp5KwY4hEmcj5#fykMjJ=AuWz5GSMY-d@H7DMEh3M@9n2G552Us$$k9cD=3TxwWe86!x#Zyhec                     |j                         }t        t               dz  dz   dz        }t        j                  |      }t        |      j                         }d  fdfd}fd}  j                          ||j                          ||        ||j                  dz          ||        ||j                  dz         t        j                        j                  d      j                  d      S )	Ni  r   c                     t        j                  j                  t        j                        }|j                  |        |j                         y )NrH   )rS   rT   
_SECRETKEYrY   rZ   updater[   )noncera   clstmps     r   mix_oncez-AbemaTVBaseIE._generate_aks.<locals>.mix_onceg   s1    7>>BAHHUO((*Cr   c                 6    t        |       D ]
  }         y N)range)count_rv   ru   s     r   mix_tmpz,AbemaTVBaseIE._generate_aks.<locals>.mix_tmpm   s    5\ r   c                 `     t        j                        j                  d      | z          y )N   =)base64urlsafe_b64encoderstrip)rs   rv   ru   s    r   	mix_twistz.AbemaTVBaseIE._generate_aks.<locals>.mix_twistr   s&    V--c299$?%GHr      r~   zutf-8)rO   intr   timegmtimer0   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]   s    ??$$.2d:;kk(+8}++-		
	I 	 ""#(##a'(,##a'('',33D9@@IIr   c           
      ^   | j                   r| j                   S | j                  j                  j                  t	        | d              | j                         \  }}|xr( | j                  j                  | j                  |d      }|xr |j                  d      t        _         t        j                   r-	 |j                  d      t        _        | j                  d       y t        t!        j"                               t        _        | j%                  | j                        }| j'                  d	d d
t)        j*                  | j                  |d      j-                         ddi      }|d   t        _         | j                   S # t        $ r}| j                  d| d       Y d }~d }~ww xY w)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?   r@   rB   r#   token)
_USERTOKEN_downloader_request_directoradd_handlerr   _get_login_infocacheload_NETRC_MACHINEgetrm   rX   rK   r
   report_warningr0   uuiduuid4r   rL   rM   rN   rO   )r   usernamer{   
auth_cacher5   aks	user_datas          r   _get_device_tokenzAbemaTVBaseIE._get_device_token   sq   ????"**66~VZ7[\**,!f$**//$2E2ExYe/"f
#-#M*..2M ##l+5>>++F(%%d+ $'tzz|#4   1''+T OO(+  vx 2 ( 	 $-W#5 ! " l##&efgehhi$jkkls   7+F 	F,F''F,c                     |s| j                   r| j                   S | j                  dd |rdnddddddd	d
dd| j                          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 )r@   rA   r#   r   )_MEDIATOKENrL   r   rm   )r   
invalidater9   s      r   rK   zAbemaTVBaseIE._get_media_token   s    d..###$($7$714X_>Tej#$!*#&  74+A+A+C*D!E %8 % %! r   c                 L   | j                          | j                  j                  | j                  |d      r"| j	                         r| j                  d       y d|v rd\  }}nd\  }}| j                  d| d dt        j                  ||d	|i      j                         d
| j                          dddd      }|d   t        _        | j	                  d       t        j                  t        j                  d}| j                  j                  | j                  ||       y )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   rK   write_debugrL   rM   rN   rO   rm   r   rX   store)r   r   r   epmethodlogin_responser   s          r   _perform_loginzAbemaTVBaseIE._perform_login   s    ::??4..,?OTXTiTiTk23(?.JB4JB,,+B40$\H  vx#*4+A+A+C*D!E,. 2	" - 
 $2'#: d#&11&11

 	

,,h
Cr   c           
      b    | j                  d| ||xs i |dd| j                          i      S )Nzhttps://api.abema.io/r   r   )rA   r@   r#   )rL   r   )r   endpointvideo_idrA   r@   s        r   	_call_apizAbemaTVBaseIE._call_api   sJ    ""#H:.74+A+A+C*D!E #  	r   c                     t        j                  d|      D ]G  }| j                  |j                  d      |d      }t	        |d      dk7  r6t	        |d      }|sE|c S  g 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   sq    ;;w 	C %%cii	&:HE%RFFG,0@@ )IJE	 	r   )FT)NzDownloading JSON metadata)rd   re   rf   r   r   rX   r   rq   classmethodr   r   rK   r   r   r   r   r   r   rm   rm   T   sN    NJJK UJJ JBB &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y) rc   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           
      2   | j                  |      j                  dd      \  }}dd| j                         z   i}|j                  d      d   }| j	                  ||      }| j                  d|d|	      }| j                  ||i 	      }| j                  d
|dd 	      }|sWd }	t        j                  d|      D ])  }
| j                  |
j                  d      |d      }	|	s) n |	r|	j                  d      }|s|dk(  r| j                  s| j                  d||      | _        t        d      }| j                  j                  dg       D ]/  }|j                  d      |k7  r|d   |k  s!||d   k  s*|d   } n | j                  ||      }|r|d   |d<   |d   |d<   |s|d   }| j                  d|dd d       }|s+| j!                  d!|      }|rt        j"                  d"d#|      }t        j$                  d$|      }|rbt'        |j                  d      t)        d%      	      }t'        |j                  d&      t)        d%      	      }|d'k  r|nd |d(<   |d)k  r|nd |d*<   d+\  }}d,}|dk(  rVd-}d.}|d/k(  rt+        |d0d1i      }| j                  ||      }|d2   D ]  }||d   k(  s|d3   d4   } n t-        d5| d6d-7      |dk(  r| j                  d8| |d9|:      }t/        |d;d<t0        hf      s| j3                  d=       d>}|j5                  t/        |d?d@dAdBdC             |st/        |dD      }|st/        |dE      }dF| dG}nP|dk(  r@| j                  dH| |d9|:      }t/        |dId	      s| j3                  d=       d>}dJ| dG}nt-        dK      |r"| j3                  dL       | j3                  dM       | j7                  ||dN|O      }|j5                  ||||||dP       t9        | j;                  |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)r@   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 )rA   r$   
thumbnails)_match_valid_urlr   r   split_download_webpage_search_regex_search_json_ldr   r   r   r   
_TIMETABLErL   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??fM*Y)?)?)AA
  %%c*2.
((h7**5w +  ##GXr#B""GRYcg # iF{{ ^  ))#))I*>PU)V 

9-|3??"&"5"5KX# #6 #% Q'C++GR8 88K(H4	?c)cDM.A ME 227HE
 (^DN(nDOY--J]D . ; ,,H'SG ff &
 G% yy*M:tzz!}eElCDtzz!}eElCD,03JDDD! .2D[TdD!"'%G<K=(.{Z<MN!00hGN$Z0 _r$x'!*~e4H_
 %':8*I%NY]^^9$..9(Dh+ / !L  w.GH##$CD-KK\-,!7"7	4   $\3GH*<9OPCH:^\H7"..6xjA8+ / !L  .PZ_`##$CD-@
.YH //  !Z  [  !H  I,,hE - 9 	&(
 	 #4#<#<Wb#<#QY]^^9^#()"4!5Dr   )rd   re   rf   
_VALID_URL_TESTSr  r0  r   r   r   rc   rc      s    kJ< U*%W
  L"]4_A
  D"-A6/
  9 B
 x
G-F\ JPr   rc   c                   r    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y)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:9b59493d1f3a792bafbc7319258e7af8rE   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<    j                  d| d|d|dz    |      } fd	t        |d
      D        E d {    y 7 w)Nseq)seriesVersionoffsetorderlimitseasonIdv1/video/series/z	/programszDownloading page r   )r@   rA   c              3   F   K   | ]  }j                  d |         yw)zhttps://abema.tv/video/episode/N)
url_result).0xr   s     r   	<genexpr>z-AbemaTVTitleIE._fetch_page.<locals>.<genexpr>  s,      F OO=aSABFs   !)programs.r   )r0   
_PAGE_SIZEr   r   )r   playlist_idseries_version	season_idpagerA   rF  s   `      r   _fetch_pagezAbemaTVTitleIE._fetch_page  s     +$01)	
  )E*>>{m95{$TAXJ/ " F!(,CDF 	F 	Fs   A/A:2A83A:c                 n    t        t        j                  | j                  |||      | j                        S rx   )r   	functoolspartialrL  rG  )r   rH  rI  rJ  s       r   _entrieszAbemaTVTitleIE._entries  s0     d..^YWOO 	r   c                    | j                  |      j                  dd      \  }}| j                  d| |      }| j                  | j	                  ||d   |      ||j                  d      |j                  d            S )Nr   r   r@  versionr   r  )rH  playlist_titleplaylist_description)r  r   r   playlist_resultrP  r   )r   r$   rH  rJ  series_infos        r   r0  zAbemaTVTitleIE._real_extract  s    !%!6!6s!;!A!A$!QYnn'7}%E{S##MM+{9'=yIWb&??73!,!; $ = 	=r   N)	rd   re   rf   r1  rG  r2  rL  rP  r0  r   r   r   r4  r4    s    jJJ 65A

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

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

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

 1 FDF"
=r   r4  )"r   rU   rN  rY   rS   r.   rM   r   r   urllib.parser%   r   commonr   aesr   
networkingr   r   networking.exceptionsr	   utilsr
   r   r   r   r   r   r   r   r   rm   rc   r4  r   r   r   <module>r]     sz         	  	    ! ! 1 2	 	 	4;^ 4;nPM PfB BJC=] C=r   