Ë
    š„j²&  ã                   ó¢   — 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m	Z	m
Z
mZmZmZmZ ddlmZ  G d„ de«      Z G d	„ d
e«      Z G d„ de«      Zy)é    Né   )ÚInfoExtractoré   )ÚExtractorErrorÚ
clean_htmlÚjoin_nonemptyÚtime_secondsÚtry_callÚunified_timestampÚupdate_url_query)Útraverse_objc                   óD   — e Zd ZdZdZdZdZdZd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zy)ÚRadikoBaseIEFN)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           
      óÖ  — | j                  dd ddddddœ¬«      \  }}|j                  }|d	   }t        |d
   «      }t        |d   «      }| j                  «       |||z    }t	        j
                  |«      j                  «       }| j                  dd ddd||dœ¬«      j                  d«      d   }	|	dk(  r| j                  dg¬«       ||	f}
| j                  j                  dd|
«       |
S )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              úN/var/www/html/GAP/venv/lib/python3.12/site-packages/yt_dlp/extractor/radiko.pyÚ_negotiate_tokenzRadikoBaseIE._negotiate_token(   s!  € Ø×7Ñ7Ø,¨dÐ4Uà *Ø(/Ø#'Ø!-ñ	ð 8ó ‰ˆˆ<ð $×+Ñ+ˆà!Ð"6Ñ7ˆ
Ü�Ð2Ñ3Ó4ˆÜ�Ð2Ñ3Ó4ˆØ×0Ñ0Ó2°2°b¸2±gÐ>ˆÜ×&Ñ& Ó7×>Ñ>Ó@ˆà×(Ñ(Ø,¨dÐ4Dà#'Ø!-Ø&0Ø'2ñ	ð )ó ÷ ‰u�S‹z˜!ñˆð �eÒØ×%Ñ%°°Ð%Ô7à Ð)ˆ	Ø�
‰
×Ñ˜ ;°	Ô:ØÐó    c           	      óª   — | j                   j                  dd«      }|�&| j                  dd dd|d   |d   dœ¬	«      }|d
k(  r|S | j                  «       S )Nr   r   z#https://radiko.jp/v2/api/auth_checkzChecking cached tokeni‘  r   r   )r   úX-Radiko-AreaId)Úexpected_statusr   ÚOK)r(   Úloadr%   r5   )r*   Ú	cachedataÚresponses      r4   Ú_auth_clientzRadikoBaseIE._auth_clientI   so   € Ø—J‘J—O‘O H¨kÓ:ˆ	ØÐ Ø×-Ñ-Ø5°tÐ=TÐfiØ/8¸©|ÐPYÐZ[ÑP\Ñ]ð .ó _ˆHð ˜4ÒØ Ð Ø×$Ñ$Ó&Ð&r6   c                 óÂ   — | j                   r| j                   S | j                  dd d¬«      }| j                  d|ddd¬«      }|r|j                  «       }nd	}|| _         |S )
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      r4   r!   zRadikoBaseIE._extract_full_keyS   su   € Ø�>Š>Ø—>‘>Ð!à×'Ñ'Ø7¸Ø-ð (ó /ˆð ×%Ñ%ØbØ�J e°9ð &ó >ˆñ Ø—‘Ó(‰HàBˆHà!ˆŒØˆr6   c                 ó.  — | j                  d|› d�|d|› d�¬«      }d }|j                  d«      D ]G  }|j                  d   |j                  d   }}t        |d	«      }	t        |d	«      }
|	|k  sŒ?||
k  sŒE|} n |st	        d
«      ‚	sJ 
«       ‚|||	fS )Nz,https://radiko.jp/v3/program/station/weekly/ú.xmlzDownloading radio program for z stationr@   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_strrL   rM   s              r4   Ú_find_programzRadikoBaseIE._find_programf   sÆ   € Ø×,Ñ,Ø:¸7¸)À4ÐHÈ(Ø1°'°¸(ÐCð -ó Eˆð ˆØ ×(Ñ(¨Ó3ò 	ˆAØŸX™X d™^¨Q¯X©X°d©^�FˆFÜ" 6¨5Ó1ˆBÜ" 6¨5Ó1ˆBØ�V‹| ¨£Ø�Ùð	ñ Ü Ð!MÓNÐNÙˆ�2‹ˆrØ�_ b¨&°&Ð8Ð8r6   c	                 óâ  — | j                  d|› d�|d¬«      }	g }
t        «       }|rdnd}|	j                  d|› d�«      D �]+  }|j                  }||v rŒ|j	                  |«       t        |d	|i|¥d
dj                  t        j                  dd¬«      «      ddœ¥«      }|rd n||z
  }t        j                  j                  |«      j                  }| j                  ||ddd|d|› �||dœ¬«      }|D ]e  }||j                  | j                  «      z  s|s%|j                  | j                   «      r
d|d<   d|d<   |rŒK|dk(  sŒQ|sŒTddt#        |«      gi|d<   Œg |
j%                  |«       �Œ. |
S )Nz-https://radiko.jp/v3/station/stream/pc_html5/rK   zDownloading stream informationr@   r   r   z.//url[@timefree="z"]/playlist_create_urlÚ
station_idÚ15Ú Ú0123456789abcdefé    )ÚkÚb)ÚlÚlsidÚtypeÚm4aTFz"Downloading m3u8 information from )r8   r   )ÚextÚliverC   Úm3u8_idrA   r   iœÿÿÿÚ
preferenceznot preferredÚformat_noteÚffmpeg_argsz-ssÚdownloader_options)rN   ÚsetrO   Ú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*   rQ   rR   Úis_onairrL   rS   r.   r3   ÚqueryÚm3u8_playlist_dataÚformatsÚfoundÚtimefree_intÚelementÚpcuÚplaylist_urlÚtime_to_skipÚdomainÚ
subformatsÚsfs                       r4   Ú_extract_formatszRadikoBaseIE._extract_formatsx   sµ  € Ø!×/Ñ/Ø;¸G¸9ÀDÐIÈ8Ø1ð 0ó 3Ðð ˆÜ“ˆá$‘q¨!ˆà)×1Ñ1Ð4FÀ|ÀnÐTjÐ2kÓló 	'ˆGØ—,‘,ˆCØ�e‰|ØØ�I‰I�cŒNÜ+¨CØ˜gð2àð2ð ØŸ™¤§¡Ð/AÀRÔ HÓIØò2ó ˆLñ $,™4°¸"±ˆLä—\‘\×*Ñ*¨<Ó8×?Ñ?ˆFØ×3Ñ3Ø˜h¨EØ °Ø9¸&¸ÐBà'.Ø*4ñð	 4ó ˆJð !ò [�Ø˜sŸ~™~¨d×.BÑ.BÓCÒCÙ$¨¯©¸×8dÑ8dÔ)eØ'+�B�|Ñ$Ø(7�B�}Ñ%Ú L°AÓ$5º,Ø0=ÀÄsÈ<ÓGXÐ?YÐ/Z�BÐ+Ò,ð[ð �N‰N˜:Ö&ð?	'ðB ˆr6   c                 óN   — t        |ddd„ hdt        j                  hf«      xs d S )Nz
pfm/text().c                 ó.   — t        j                  d| «      S )Nu   [/ï¼�ã€�ã€€,ï¼Œ])Úrer&   )Úxs    r4   ú<lambda>z2RadikoBaseIE._extract_performers.<locals>.<lambda>§   s   € ¬"¯(©(Ð3FÈÓ*J€ r6   )r   r{   Ústrip)r*   rU   s     r4   Ú_extract_performersz RadikoBaseIE._extract_performers¥   s;   € Ü˜DØ˜#Ñ JÐKÈSÔSV×S\ÑS\ÐR]ð#_ó `ò hØcgð	hr6   )Ú__name__Ú
__module__Ú__qualname__Ú_GEO_BYPASSrE   rz   Ú%_HOSTS_FOR_TIME_FREE_FFMPEG_SUPPORTEDry   r5   r>   r!   rY   rŠ   r‘   © r6   r4   r   r      sD   „ Ø€KØ€Ið/Ð+ð-Ð)ð€OòòB'òò&9ò$+óZhr6   r   c                   ó2   — e Zd ZdZdddœdddœdddœgZd„ Zy)	ÚRadikoIEzOhttps?://(?: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                 óÀ  ‡	‡
‡‡— | j                  |«      j                  dd«      \  }}t        ||«      }t        |d«      }| j	                  |||«      \  Š	Š}Š
Š| j                  «       \  }}|t        ˆ	fd„«      | j                  ‰	«      t        t        ˆ	fd„«      «      t        ˆfd„«      ||t        ˆ
ˆfd„«      d| j                  ||d||||‰
‰
‰‰|d	œ¬
«      dœ
S )NrR   Ú
timestringFc                  ó:   •— ‰ j                  d«      j                  S )NÚtitle©Úfindrn   ©rU   s   €r4   r�   z(RadikoIE._real_extract.<locals>.<lambda>Ä   s   ø€  d§i¡i°Ó&8×&=Ñ&=€ r6   c                  ó:   •— ‰ j                  d«      j                  S )NÚinfor¡   r£   s   €r4   r�   z(RadikoIE._real_extract.<locals>.<lambda>Æ   s   ø€ °t·y±yÀÓ7H×7MÑ7M€ r6   c                  ó:   •— ‰ j                  d«      j                  S )Nú.//namer¡   )rT   s   €r4   r�   z(RadikoIE._real_extract.<locals>.<lambda>Ç   s   ø€ ¨×)=Ñ)=¸iÓ)H×)MÑ)M€ r6   c                  ó6   •— t        ‰d«      t        ‰ d«      z
  S )NF)r   )Úradio_beginÚ	radio_ends   €€r4   r�   z(RadikoIE._real_extract.<locals>.<lambda>Ê   s   ø€ Ô):¸9ÀeÓ)LÔO`ÐalÐnsÓOtÑ)t€ r6   T)Ústart_atrL   Úend_atrM   Úseek©rQ   rR   r}   rL   rS   r.   r3   r~   )
Úidr    ÚcastÚdescriptionÚuploaderÚuploader_idÚ	timestampÚdurationÚis_liver€   )
Ú_match_valid_urlrD   r   r   rY   r>   r
   r‘   r   rŠ   )r*   r›   rR   rž   rQ   Úvid_intrL   r.   r3   rU   r©   rª   rT   s            @@@@r4   Ú_real_extractzRadikoIE._real_extractº   s÷   û€ Ø"×3Ñ3°CÓ8×>Ñ>¸yÈ,ÓWÑˆ�Ü  ¨*Ó5ˆÜ# J°Ó6ˆØ<@×<NÑ<NÈxÐY`ÐbiÓ<jÑ9ˆˆo˜r ;°	à"×/Ñ/Ó1Ñˆ
�Gð ÜÓ=Ó>Ø×,Ñ,¨TÓ2Ü%¤hÓ/MÓ&NÓOÜ Ó!MÓNØ"Ø Ü Ô!tÓuØØ×,Ñ,Ø!¨7¸UØ˜g°*Àgà +Ø%Ø'Ø#Ø&ñð -ó 
ñ
ð 	
r6   N©r’   r“   r”   Ú
_VALID_URLÚ_TESTSr¹   r—   r6   r4   r™   r™   ª   s;   „ Øc€Jð <Øñð <Øñð
 @Øñð€Fó
r6   r™   c                   ó2   — e Zd ZdZdddœdddœdddœgZd„ Zy)	ÚRadikoRadioIEz8https?://(?: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           
      óÒ  — | j                  |«      }| j                  d«       | j                  «       \  }}t        d¬«      }| j	                  |||«      \  }}}}	}	|j                  d«      j                  }
t        |j                  d«      j                  «      }|j                  d«      j                  }| j                  ||d||||i ¬«      }||
| j                  |«      |||||dd	œ	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	   rY   r¢   rn   r   rŠ   r‘   )r*   r›   rR   r.   r3   Úvid_nowrU   rT   rL   r+   r    r±   Ústation_namer€   s                 r4   r¹   zRadikoRadioIE._real_extractê   sø   € Ø—.‘. Ó%ˆØ×ÑÐfÔgà"×/Ñ/Ó1Ñˆ
�Gä QÔ'ˆà*.×*<Ñ*<¸WÀgÈwÓ*WÑ'ˆˆo˜r 1 aà—	‘	˜'Ó"×'Ñ'ˆÜ  §¡¨6Ó!2×!7Ñ!7Ó8ˆØ&×+Ñ+¨IÓ6×;Ñ;ˆà×'Ñ'Ø g¸Ø˜'¨jÀ'Øð (ó ˆð ØØ×,Ñ,¨TÓ2Ø&Ø$Ø"ØØØñ

ð 
	
r6   Nrº   r—   r6   r4   r¾   r¾   Ú   s:   „ ØL€Jð /Øñð /Øñð
 3Øñð€Fó
r6   r¾   )r"   rq   r�   Úurllib.parsers   Úcommonr   Úutilsr   r   r   r	   r
   r   r   Úutils.traversalr   r   r™   r¾   r—   r6   r4   ú<module>rÊ      sR   ðÛ Û Û 	Û å !÷÷ ñ õ +ôTh�=ô Thôn-
ˆ|ô -
ô`-
�Lõ -
r6   