
    V|h&                         S SK r S SKrS SKrS SKrSSKJr  SSKJrJ	r	J
r
JrJrJrJr  SSKJr   " S S\5      r " S	 S
\5      r " S S\5      rg)    N   )InfoExtractor   )ExtractorError
clean_htmljoin_nonemptytime_secondstry_callunified_timestampupdate_url_query)traverse_objc                   L    \ rS rSrSrSrSrSrSrS r	S r
S	 rS
 rS rS rSrg)RadikoBaseIE   FN)z https://c-rpaa.smartstream.ne.jpz%https://si-c-radiko.smartstream.ne.jpz*https://tf-f-rpaa-radiko.smartstream.ne.jpz*https://tf-c-rpaa-radiko.smartstream.ne.jpz%https://si-f-radiko.smartstream.ne.jpzhttps://rpaa.smartstream.ne.jp)z%https://rd-wowza-radiko.radiko-cf.comzhttps://radiko.jpz"https://f-radiko.smartstream.ne.jp)z"https://c-radiko.smartstream.ne.jpc           
         U R                  SS SSSSSS.S9u  pUR                  nUS	   n[        US
   5      n[        US   5      nU R                  5       XfU-    n[        R
                  " U5      R                  5       nU R                  SS SSSUUS.S9R                  S5      S   n	U	S:X  a  U R                  S/S9  XI4n
U R                  R                  SSU
5        U
$ )Nzhttps://radiko.jp/v2/api/auth1zDownloading authentication pagepc_html5z0.0.1pc
dummy_user)zx-radiko-appzx-radiko-app-versionx-radiko-devicex-radiko-user)headersX-Radiko-AuthTokenzX-Radiko-KeyLengthzX-Radiko-KeyOffsetzhttps://radiko.jp/v2/api/auth2Authenticating)r   r   zx-radiko-authtokenzx-radiko-partialkey,r   OUTJP)	countriesradiko	auth_data)_download_webpage_handler   int_extract_full_keybase64	b64encodedecode_download_webpagesplitraise_geo_restrictedcachestore)self_auth1_handleauth1_header
auth_tokenklkoraw_partial_keypartial_keyarea_idr   s              Q/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/radiko.py_negotiate_tokenRadikoBaseIE._negotiate_token(   s   77,d4U *(/#'!-	 8  $++!"67
23423400222g>&&7>>@((,d4D#'!-&0'2	 )  uSz! e%%%7)	

;	:    c           	          U R                   R                  SS5      nUb$  U R                  SS SSUS   US   S.S	9nUS
:X  a  U$ U R                  5       $ )Nr   r   z#https://radiko.jp/v2/api/auth_checkzChecking cached tokeni  r   r   )r   X-Radiko-AreaId)expected_statusr   OK)r)   loadr&   r6   )r+   	cachedataresponses      r5   _auth_clientRadikoBaseIE._auth_clientI   so    JJOOHk:	 --5t=Tfi/8|PYZ[P\] . _H 4  $$&&r8   c                     U R                   (       a  U R                   $ U R                  SS SS9nU R                  SUSSSS9nU(       a  UR                  5       nOS	nX l         U$ )
Nz)https://radiko.jp/apps/js/playerCommon.jszDownloading player js codenotezRRadikoJSPlayer\([^,]*,\s*(['\"])pc_html5\1,\s*(['\"])(?P<fullkey>[0-9a-f]+)\2,\s*{zfull keyFfullkey)fatalgroups(   bcd151073c03b352e1ef2fd66c32209da9ca0afa)	_FULL_KEYr&   _search_regexencode)r+   jscodefull_keys      r5   r"   RadikoBaseIE._extract_full_keyS   ss    >>>>!''7- ( / %%bJe9 & > (HBH!r8   c                 >   U R                  SU S3USU S3S9nS nUR                  S5       HH  nUR                  S   UR                  S   p[        US	5      n	[        US	5      n
X::  d  M?  X::  d  MF  Un  O   U(       d  [	        S
5      eW	(       d   W
5       eXTU	WW4$ )Nz,https://radiko.jp/v3/program/station/weekly/.xmlzDownloading radio program for z stationrC   z.//progfttoFz*Cannot identify radio program to download!)_download_xmlfindallattribr   r   )r+   video_idstationcursorstation_programprogpft_strto_strrP   rQ   s              r5   _find_programRadikoBaseIE._find_programf   s    ,,:7)4H(1'(C - E  ((3AXXd^QXXd^F"651B"651B| 4  !MNN2rb&&88r8   c	                 &   U R                  SU S3USS9n	/ n
[        5       nU(       a  SOSnU	R                  SU S35       GHJ  nUR                  nX;   a  M  UR	                  U5        [        US	U0UES
SR                  [        R                  " SSS95      SS.E5      nU(       a  S OXT-
  n[        R                  R                  U5      R                  nU R                  XSSSUSU 3UUS.S9nU H  nX>R                  U R                  5      -  (       d'  U(       d*  UR                  U R                   5      (       a
  SUS'   SUS'   U(       a  M_  US:X  d  Mg  U(       d  Mp  SS[#        U5      /0US'   M     U
R%                  U5        GMM     U
$ )Nz-https://radiko.jp/v3/station/stream/pc_html5/rO   zDownloading stream informationrC   r   r   z.//url[@timefree="z"]/playlist_create_url
station_id15 0123456789abcdef    )kb)llsidtypem4aTFz"Downloading m3u8 information from )r:   r   )extliverF   m3u8_idrD   r   i
preferenceznot preferredformat_noteffmpeg_argsz-ssdownloader_options)rR   setrS   textaddr   joinrandomchoicesurllibparseurlparsenetloc_extract_m3u8_formats
startswith_HOSTS_FOR_LIVE'_HOSTS_FOR_TIME_FREE_FFMPEG_UNSUPPORTEDstrextend)r+   rU   rV   is_onairrP   rW   r/   r4   querym3u8_playlist_dataformatsfoundtimefree_intelementpcuplaylist_urltime_to_skipdomain
subformatssfs                       r5   _extract_formatsRadikoBaseIE._extract_formatsx   s   !//;G9DI81 0 3 $q!)114F|nTj2klG,,C|IIcN+Cg22 /AR HI2 L $,4L\\**<8??F33E9&B'.*4	 4 J !~~d.B.BCC$8d8d)e)e'+B|$(7B}%xLA$5,,0=s<GX?Y/ZB+, ! NN:&? mB r8   c                 X    [        USSS 1S[        R                  145      =(       d    S $ )Nz
pfm/text().c                 0    [         R                  " SU 5      $ )Nu   [/／、　,，])rer'   )xs    r5   <lambda>2RadikoBaseIE._extract_performers.<locals>.<lambda>   s    "((3F*Jr8   )r   r   strip)r+   rY   s     r5   _extract_performers RadikoBaseIE._extract_performers   s;    D# JKSSVS\S\R]#_ ` hcg	hr8   )rH   )__name__
__module____qualname____firstlineno___GEO_BYPASSrH   r   %_HOSTS_FOR_TIME_FREE_FFMPEG_SUPPORTEDr~   r6   r@   r"   r]   r   r   __static_attributes__ r8   r5   r   r      sD    KI/+-)OB'&9$+Zhr8   r   c                   :    \ rS rSrSrSSS.SSS.SSS./rS rS	rg
)RadikoIE   zOhttps?://(?:www\.)?radiko\.jp/#!/ts/(?P<station>[A-Z0-9-]+)/(?P<timestring>\d+)z*https://radiko.jp/#!/ts/QRR/20210425101300Turlonly_matchingz*https://radiko.jp/#!/ts/FMT/20210810150000z.https://radiko.jp/#!/ts/JOAK-FM/20210509090000c                   ^	^
^^ U R                  U5      R                  SS5      u  p#[        X#5      n[        US5      nU R	                  XBU5      u  m	mnm
mU R                  5       u  pxU[        U	4S j5      U R                  T	5      [        [        U	4S j5      5      [        U4S j5      UU[        U
U4S j5      SU R                  XBSXeXxT
T
TTUS	.S
9S.
$ )NrV   
timestringFc                  :   > T R                  S5      R                  $ )Ntitlefindrs   rY   s   r5   r   (RadikoIE._real_extract.<locals>.<lambda>   s    dii&8&=&=r8   c                  :   > T R                  S5      R                  $ )Ninfor   r   s   r5   r   r      s    tyy7H7M7Mr8   c                  :   > T R                  S5      R                  $ )N.//namer   )rX   s   r5   r   r      s    )=)=i)H)M)Mr8   c                  6   > [        TS5      [        T S5      -
  $ )NF)r   )radio_begin	radio_ends   r5   r   r      s    ):9e)LO`alnsOt)tr8   T)start_atrP   end_atrQ   seekrU   rV   r   rP   rW   r/   r4   r   )
idr   castdescriptionuploaderuploader_id	timestampdurationis_liver   )
_match_valid_urlrG   r   r   r]   r@   r
   r   r   r   )r+   r   rV   r   rU   vid_intrP   r/   r4   rY   r   r   rX   s            @@@@r5   _real_extractRadikoIE._real_extract   s    "33C8>>y,W 5#J6<@<N<Nxbi<j9or;	"//1
 =>,,T2%h/M&NO !MN"  !tu,,!U* +%'#& - 

 	
r8   r   Nr   r   r   r   
_VALID_URL_TESTSr   r   r   r8   r5   r   r      s;    cJ < <
 @F
r8   r   c                   :    \ rS rSrSrSSS.SSS.SSS./rS rS	rg
)RadikoRadioIE   z8https?://(?:www\.)?radiko\.jp/#!/live/(?P<id>[A-Z0-9-]+)zhttps://radiko.jp/#!/live/QRRTr   zhttps://radiko.jp/#!/live/FMTz!https://radiko.jp/#!/live/JOAK-FMc                    U R                  U5      nU R                  S5        U R                  5       u  p4[        SS9nU R	                  X"U5      u  pgn  n	UR                  S5      R                  n
[        UR                  S5      R                  5      nUR                  S5      R                  nU R                  X"SXX40 S9nUU
U R                  U5      UUUUUSS	.	$ )
NzHDownloader will not stop at the end of the program! Press Ctrl+C to stop	   )hoursr   r   r   Tr   )	r   r   r   r   r   r   r   r   r   )
	_match_idreport_warningr@   r	   r]   r   rs   r   r   r   )r+   r   rV   r/   r4   vid_nowrY   rX   rP   r,   r   r   station_namer   s                 r5   r   RadikoRadioIE._real_extract   s    ..%fg"//1
Q'*.*<*<Ww*W'r1a		'"'' 6!2!7!78&++I6;;''j (  ,,T2&$"

 
	
r8   r   Nr   r   r8   r5   r   r      s:    LJ / /
 3F
r8   r   )r#   rv   r   urllib.parserx   commonr   utilsr   r   r   r	   r
   r   r   utils.traversalr   r   r   r   r   r8   r5   <module>r      sR      	  !   +Th= Thn-
| -
`-
L -
r8   