
    V|hy                     *   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
JrJrJrJrJrJrJrJrJrJr   " S S\5      r " S S	\5      r " S
 S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      rg)    N   )InfoExtractor   )ExtractorError
clean_htmlfilter_dictget_element_by_classint_or_nonejoin_nonemptymake_archive_id
orderedSetparse_duration
remove_endtraverse_objtry_callunescapeHTMLunified_timestampurl_or_noneurljoinvariadicc                   <    \ rS rSrSrSrS rS
S jrS rSS jr	S	r
g)	NhkBaseIE   z@https://nwapi.nhk.jp/nhkworld/%sod%slist/v7b/%s/%s/%s/all%s.jsonz7https?://www3\.nhk\.or\.jp/nhkworld/(?P<lang>[a-z]{2})/c           	          U R                  U R                  U(       a  SOSU(       a  SOSU(       a  SOSXU(       a  SOS4-  US	S
0S9S   S   =(       d    / $ )Nvrclipesdepisodeprogramz/all apikey EJfK8jdS57GqlupFgAfAAwr573q01y6kquerydataepisodes)_download_json_API_URL_TEMPLATE)selfm_idlangis_video
is_episodeis_clips         N/home/james-whalen/.local/lib/python3.13/site-packages/yt_dlp/extractor/nhk.py	_call_apiNhkBaseIE._call_api   s    """"S!u'	YhFB	&8 8
 #EF # H IOP Q[\ b `b	b    c                 4   U(       d  U R                   R                  SS5      $ U R                   R                  SS0 5        U R                  SS SS9nU R	                  SUS S5      U R	                  SUS S	5      S
.nU R                   R                  SSU5        U$ )Nnhkapi_infoz9https://movie-a.nhk.or.jp/world/player/js/movie-player.jsz"Downloading stream API information)notez)prod:[^;]+\bapiUrl:\s*[\'"]([^\'"]+)[\'"]zstream API urlz(prod:[^;]+\btoken:\s*[\'"]([^\'"]+)[\'"]zstream API token)urltoken)cacheloadstore_download_webpage_search_regex)r*   refreshmovie_player_jsr6   s       r0   _get_api_infoNhkBaseIE._get_api_info&   s    ::??5*55


B/00G5 1 7 %%<otUeg'';_dTfh
 	


H5r3   c                    S H  nU R                  U5      nU(       d  M  UR                  S5      n[        U R                  XASS0 UESUSS.ES9S	5      n[        US
S[        14SS9nU(       d  Mn  U R                  Xa5      u  px0 [        US[        14S[        14S[        14S[        14S.5      EUUS.Es  $    [        S5      e)N)FTr8   zDownloading stream url infoFjsonr   )typeoptional_id
active_flg)fatalr%   )metar   	movie_url)mb_autoauto_spauto_pcget_alldurationpublication_dateinsert_dateupdate_date)rP   	timestamprelease_timestampmodified_timestamp)formats	subtitleszUnable to extract stream url)	rA   popr   r(   r   #_extract_m3u8_formats_and_subtitlesr
   r   r   )	r*   vod_idr?   r6   api_urlrI   
stream_urlrW   rX   s	            r0   _extract_stream_infoNhkBaseIE._extract_stream_info7   s   $G))'2Hll5)G##%B% X"X &'-&'	X $  $%D &{$E}U_dfJ z%)%M%Mj%a"	"4%/+$?&8;L:M%N.;>O=P-Q/<?P>Q.R	* 	  '!*	 	' %: ;<<r3   Nc           	      v  ^ TS L n[         R                  U5      R                  SSS5      u  pEnUS:g  nU(       a  US S S-   USS  -   nU(       a  U R                  XdUSUS S S:H  5      S	   mU4S
 jnU" S5      n	U" S5      n
/ nS H?  u  pnTR	                  SU-   5      nU(       d  M#  UR                  U S3UUSU-   S.5        MA     U	nU
(       a  U	(       a  U
 SU	 3n	OU
(       a  U	(       d  U
n	S n
S nOS nUS-   U-   U	U" S5      UU
US.nU(       a-  TS   nUR                  0 U R                  U5      ESU0E5        U$ U(       aI  [        TS   S   S5      nU R                  [        SU5       S3USSSSS9US'   US    H  nUUS'   M
     U$ UR                  S [         R                  5       US!.5        U$ )"Nr,   rE   idaudio   -T9999r   c                 n   > [        TR                  U S-   5      =(       d    TR                  U 5      5      $ )N_clean)r   get)keyr   s    r0   get_clean_field8NhkBaseIE._extract_episode_info.<locals>.get_clean_fieldc   s)    gkk#.9MW[[=MNNr3   	sub_titletitle))r!   i  ih  )_li   i  imagepzhttps://www3.nhk.or.jp)ra   heightwidthr8   z - description)ra   rm   rs   
thumbnailsseriesr   r[   z.m4azhttps://vod-stream.nhk.jpz/index.m3u8m4am3u8_nativehlsF)entry_protocolm3u8_idrH   rW   languageurl_transparent)_typeie_keyr8   )NhkVodIE_match_valid_urlgroupr1   rh   appendupdater^   r   _extract_m3u8_formatsr   r~   )r*   r8   r   fetch_episoder,   m_type
episode_idr-   rj   rm   ru   rt   swhimg_pathepisode_nameinfor[   
audio_pathfs     `                  r0   _extract_episode_infoNhkBaseIE._extract_episode_infoW   s:   4#+#<#<S#A#G#GPVX\#] jW$#BQ#-
12>Jnn(D*Ra.F2JLLMOG	O  , )
:GA!{{7Q;/H1g/(:	 	 ; ehc%)EEEFLL s"T)*=9$#
 X&FKK ++F3f *  '(8(A6J
"&"<"<:JGHTm! #= #0Y iA$(AjM )  .&oo/ 
 r3    )TN)__name__
__module____qualname____firstlineno__r)   _BASE_URL_REGEXr1   rA   r^   r   __static_attributes__r   r3   r0   r   r      s$    ZPOb"=@Hr3   r   c                      \ rS rSr\R
                   S3\R
                   S3\R
                   S3/rSSSSS	S
SSSSSSSSSS.S.SSSSSSS
SSSSSS SSS!S".S#.S$S%S&S'S(S)S
S*S+.S.S,S-S..S/S-S..S0S-S..S1S-S..S2S3SS4S5S6S7S8S9.S:S;.S<S=SS>S?S@S
SASB.SCS;.SDSESSFSGS
SSHSISJSKSSSLSMSN.S.SOSPSSQSRSSSSTSUSVSWSSXS
SYSZ.S.S[S\SS]S^S_S`SaSbS
ScSdSSSe.S.SfSgSShSiSjSkS
SlSmSnSoSnSpSnSq.S.SrSsSStSuSvSwS
SxSySzSS{SSS|.S.S}S-S..S~S-S../rS rSr	g)r      z>shows/(?:(?P<type>video)/)?(?P<id>\d{4}[\da-z]\d+)/?(?:$|[?#])zB(?:ondemand|shows)/(?P<type>audio)/(?P<id>[^/?#]+?-\d{8}-[\da-z]+)z0ondemand/(?P<type>video)/(?P<id>\d{4}[\da-z]\d+)z:https://www3.nhk.or.jp/nhkworld/en/ondemand/video/2049126/1nw_vod_v_en_2049_126_20230413233000_01_1681398302mp4z?Japan Railway Journal - The Tohoku Shinkansen: Full Speed Aheadz$md5:49f7c5b206e03868a2fdf0d0814b92f6zre:https://.+/.+\.jpgz'The Tohoku Shinkansen: Full Speed AheadJapan Railway Journalieix8diPdi  202304132024020620230905)ra   extrm   rs   	thumbnailr   ru   rV   rT   rU   rP   upload_datemodified_daterelease_dater8   	info_dictz:https://www3.nhk.or.jp/nhkworld/en/ondemand/video/9999011/ 153c3016dfd252ba09726588149cf0e7z lpZXIwaDE6_Z-976CPsFdxyICyWUzlT5z?Dining with the Chef - Chef Saito's Family recipe: MENCHI-KATSUz$md5:5aee4a9f9d81c26281862382103b0ea5zDining with the Chefz(Chef Saito's Family recipe: MENCHI-KATSU   2019081620230902i\di9W])ra   r   rm   rs   r   ru   r   rP   r   r   rU   rV   r   rT   )r8   md5r   zKhttps://www3.nhk.or.jp/nhkworld/en/ondemand/audio/livinginjapan-20231001-1/zlivinginjapan-20231001-1-enrv   zFLiving in Japan - Tips for Travelers to Japan / Ramen Vending MachinesLiving in Japanz$md5:0a0e2077d8f07a03071e990a6f51bfabz4Tips for Travelers to Japan / Ramen Vending Machines)ra   r   rm   ru   rs   r   r   z:https://www3.nhk.or.jp/nhkworld/en/ondemand/video/2015173/Tr8   only_matchingzDhttps://www3.nhk.or.jp/nhkworld/en/ondemand/audio/plugin-20190404-1/zDhttps://www3.nhk.or.jp/nhkworld/fr/ondemand/audio/plugin-20190404-1/zChttps://www3.nhk.or.jp/nhkworld/en/ondemand/audio/j_art-20150903-1/z:https://www3.nhk.or.jp/nhkworld/en/ondemand/video/9999a34/qfjay6cgu(   DESIGN TALKS plus - Fishermen’s Fineryz$md5:8a8f958aaafb0d7cb59d38de53f1e448z0re:^https?:/(/[a-z0-9.-]+)+\.jpg\?w=1920&h=1080$20210615i`)ra   r   rm   rs   r   r   rT   z404 Not Found)r8   r   skipz=https://www3.nhk.or.jp/nhkworld/ja/ondemand/video/0020271111/nw_ja_v_jvod_ohayou_20231008u1   おはよう日本（7時台） - 10月8日放送u   おはよう日本（7時台）u   10月8日放送z$md5:9c1d6cbeadb827b955b20e99ab920ff0)ra   r   rm   ru   r   r   rs   zexpires 2023-10-15z:https://www3.nhk.or.jp/nhkworld/en/ondemand/video/3004952/1nw_vod_v_en_3004_952_20230723091000_01_1690074552z7Barakan Discovers - AMAMI OSHIMA: Isson's Treasure Islaz$md5:5db620c46a0698451cc59add8816b797ihdi{  id20230723z#AMAMI OSHIMA: Isson's Treasure IslazBarakan Discovers)ra   r   rm   rs   r   r   rT   rP   rU   r   rV   r   r   ru   z:https://www3.nhk.or.jp/nhkworld/en/ondemand/video/9999a07/znw_c_en_9999-a07z?Mini-Dramas on SDGs: Ep 1 Close the Gender Gap [Director's Cut]zMini-Dramas on SDGszUMini-Dramas on SDGs - Mini-Dramas on SDGs: Ep 1 Close the Gender Gap [Director's Cut]z$md5:3f9dcb4db22fceb675d90448a040d3f6ix.`   2023090320210525iOd)ra   r   r   ru   r   rm   rs   rT   rP   r   rV   r   r   rU   z:https://www3.nhk.or.jp/nhkworld/en/ondemand/video/9999d17/znw_c_en_9999-d17z2Flowers of snow blossom - The 72 Pentads of Yamatou   Today’s focus: Snowi8d2023090420220128ia   r!   )ra   r   rm   rs   rU   r   r   rT   r   rP   ru   r   rV   z1https://www3.nhk.or.jp/nhkworld/en/shows/2032307/1nw_vod_v_en_2032_307_20240321113000_01_1710990282z1Japanology Plus - 20th Anniversary Special Part 1z$md5:817d41fc8e54339ad2a916161ea24fafz20th Anniversary Special Part 1zJapanology Plusi  i8e20240321i["eiBe)ra   r   rm   rs   r   ru   r   rP   rT   r   rU   r   rV   r   z1https://www3.nhk.or.jp/nhkworld/en/shows/3020025/1nw_vod_v_en_3020_025_20230325144000_01_1679723944z3100 Ideas to Save the World - Working Styles Evolvez$md5:9e6c7778eaaf4f7b4af83569649f84d9zWorking Styles Evolvez100 Ideas to Save the Worldi  20230325idiܐd)ra   r   rm   rs   r   ru   r   rP   r   rT   r   rU   r   rV   zHhttps://www3.nhk.or.jp/nhkworld/en/shows/audio/livinginjapan-20231001-1/z1https://www3.nhk.or.jp/nhkworld/en/shows/9999o80/c                 $    U R                  U5      $ r   )r   r*   r8   s     r0   _real_extractNhkVodIE._real_extracth  s    ))#..r3   r   N)
r   r   r   r   r   r   
_VALID_URL_TESTSr   r   r   r3   r0   r   r      s   %%&&fg%%&&jk%%&&XYJ LEVA1@-",#!+%'&
( L14WA1,B%&!+",'#
	, ]/]'A1M
 L V V U
 L?AL%#
   O0H7(1A
 % LEOA1&#!+%",'=)
* L$Y+'mA#&",%1!+
( L$I2!+&%#1'",
& CEHA8'1#%!+&",'
( CEJA.31%#&!+'",
( Z Cq|F|/r3   r   c            	          ^  \ rS rSrS\R
                   S3rSSSSS.S	S
.SSSSS.SS
.SSSSS.SS
.SSSSS.SS
.SSSSS.SS
.SSS./r\U 4S j5       r	S r
S rS rU =r$ )!NhkVodProgramIEil  z(?x)
        z(?:shows|tv)/
        (?:(?P<type>audio)/programs/)?(?P<id>\w+)/?
        (?:\?(?:[^#]+&)?type=(?P<episode_type>clip|(?:radio|tv)Episode))?z.https://www3.nhk.or.jp/nhkworld/en/shows/sumo/sumozGRAND SUMO Highlightsz$md5:fc20d02dc6ce85e4b72e0273aa52fdbf)ra   rm   rs   r   r8   r   playlist_mincountz6https://www3.nhk.or.jp/nhkworld/en/shows/japanrailway/japanrailwayr   z$md5:ea39d93af7d05835baadf10d1aae0e3f   z@https://www3.nhk.or.jp/nhkworld/en/shows/japanrailway/?type=clipzFhttps://www3.nhk.or.jp/nhkworld/en/shows/audio/programs/livinginjapan/livinginjapanr   z$md5:665bb36ec2a12c5a7f598ee713fc2b54z6https://www3.nhk.or.jp/nhkworld/en/tv/designtalksplus/designtalkspluszDESIGN TALKS plusz$md5:47b3b3a9f10d4ac7b33b53b70a7d2837   z>https://www3.nhk.or.jp/nhkworld/en/shows/10yearshayaomiyazaki/Tr   c                 Z   > [         R                  U5      (       a  S$ [        TU ]  U5      $ )NF)r   suitablesuper)clsr8   	__class__s     r0   r   NhkVodProgramIE.suitable  s(     ))#..uIEG4DS4IIr3   c                 T    U H"  n[        [        X25      5      =n(       d  M   Us  $    g r   )r   r	   )r*   class_valueshtmlclass_valuevalues        r0   !_extract_meta_from_class_elements1NhkVodProgramIE._extract_meta_from_class_elements  s'    'K"#7#JKKuK (r3   c                 <  ^ ^^
 T R                  T5      R                  SSSS5      u  p#pET R                  XBUS:g  SUS:H  5      m
U
U U4S jnT R                  TU5      nT R	                  / S	QU5      nT R	                  / S
QU5      n	T R                  U" 5       XHU	5      $ )Nr,   rE   ra   episode_typerb   Fr   c               3      >#    T H;  n U R                  S5      =n(       d  M  TR                  [        TU5      U 5      v   M=     g 7f)Nr8   )rh   r   r   )r   episode_pathr'   r*   r8   s     r0   entries.NhkVodProgramIE._real_extract.<locals>.entries  s?     ##*;;u#55<544WS,5OQXYY $s
   A#A)zp-programDetail__titlepProgramHero__logoTexttAudioProgramMain__titlezp-program-name)zp-programDetail__textpProgramHero__descriptiontAudioProgramMain__infozp-program-description)r   r   r1   r=   r   playlist_result)r*   r8   r,   r   
program_idr   r   r   program_titleprogram_descriptionr'   s   ``        @r0   r   NhkVodProgramIE._real_extract  s    151F1Fs1K1Q1QRXZ`bfhv1w.j>>f/8NP	Z
 %%c:6>> @  $	%
 #DD F% '+	, ##GIzJ]^^r3   r   )r   r   r   r   r   r   r   r   classmethodr   r   r   r   __classcell__)r   s   @r0   r   r   l  s    			"	"# $JMJ @,A

 	 H ,A

   R ,A

  	 X!&A

  	 H#(A

  	 PY/Fb J J
_ _r3   r   c            	       @    \ rS rSrSrSSSSSSS	S
S.SS0S./rS rSrg)NhkForSchoolBangumiIEi  zbhttps?://www2\.nhk\.or\.jp/school/movie/(?P<type>bangumi|clip)\.cgi\?das_id=(?P<id>[a-zA-Z0-9_-]+)zHhttps://www2.nhk.or.jp/school/movie/bangumi.cgi?das_id=D0005150191_00000D0005150191_00003u   にている かなgE@iP;S20140402r   zcount:12)ra   rm   rP   rT   r   r   chaptersskip_downloadT)r8   r   paramsc                 T   U R                  U5      R                  5       u  p#U R                  SU SU 3U5      n[        R                  " SU5       Vs0 s H#  oUR                  S5      UR                  S5      _M%     nn[        R                  " SU5       Vs0 s H#  oUR                  S5      UR                  S5      _M%     nn[        R                  " SU5       Vs/ s H  n[        UR                  S5      5      PM     nn[        R                  " S	U5       Vs/ s HT  nS
R                  UR                  S5      =(       d    S[        UR                  S5      5      /5      R                  5       PMV     n	nUR                  S5      =(       d    UR                  S5      n
U
(       a  UR                  S5      S    SU
 3nU R                  SUSS  SU S3USSS9n[        UR                  S5      5      nS nU(       aR  U	(       aK  [        U5      [        U	5      :X  a3  Un/ USS  QUPn[        XU	5       VVVs/ s H  u  nnnUUUS.PM     nnnnUUR                  S5      [        UR                  S5      5      [        US   5      UUS.$ s  snf s  snf s  snf s  snf s  snnnf )Nz$https://www2.nhk.or.jp/school/movie/z.cgi?das_id=z$var\s+([a-zA-Z_]+)\s*=\s*"([^"]+?)";r   r   z:(?:program|clip)Obj\.([a-zA-Z_]+)\s*=\s*(["\'])([^"]+?)\2;   z$chapterTime\.push\(\'([0-9:]+?)\'\);z><div class="cpTitle"><span>(scene\s*\d+)?</span>([^<]+?)</div> r!   	r_versionversion_r   z#https://nhks-vh.akamaihd.net/i/das/   /z_V_000.f4v/master.m3u8r   rx   )r   rz   
r_duration)
start_timeend_timerm   namer_upload)ra   rm   rP   rT   rW   r   )r   groupsr=   refinditerr   r   joinr   striprh   splitr   lenzipr   )r*   r8   program_typevideo_idwebpagegbase_valuesprogram_valueschapter_durationschapter_titlesr   rW   rP   r   r   r   r   ets                      r0   r   #NhkForSchoolBangumiIE._real_extract  s   !%!6!6s!;!B!B!D((2<.XJWYac 8:{{Cjls7tu7t!wwqz1771:-7tu:<++  GD  FM  ;N  O  ;NQ''!*aggaj0  ;N  OACMtv}A~A~A^AGGAJ7A~bdbmbm  op  ry  cz  {  cz]^#((AGGAJ$4"l1771:6N#OPVVX  cz  { //+.O.2D2DY2O"..-a017)<H,,1(1Q-(Kab% - 0 "+//,"?@C8I4JcR`Na4a*J9*12.99H
 !~F	H G'!Q   G	  H #''/&{|'DE*;z+BC 
 	
9 v O {"Hs   *J*J$JAJ;J#r   Nr   r   r   r   r   r   r   r   r   r3   r0   r   r     sA    vJY%*#%"

 T
 F&*
r3   r   c                       \ rS rSrSrSrSR                  SR                  S \ 5       5      5      rSSS	S
.SS.SSSS
.SS./r	S r
Srg)NhkForSchoolSubjectIEi  up   Portal page for each school subjects, like Japanese (kokugo, 国語) or math (sansuu/suugaku or 算数・数学))rikasyakaikokugosansuuseikatsudoutokuongakutaiikuzukougijutsukateisougoueigotokkatsutokushisonotaz:https?://www\.nhk\.or\.jp/school/(?P<id>{})/?(?:[\?#].*)?$|c              #   N   #    U  H  n[         R                  " U5      v   M     g 7fr   r  escape.0r   s     r0   	<genexpr>NhkForSchoolSubjectIE.<genexpr>  s     6~!1~   #%z$https://www.nhk.or.jp/school/sougou/r$  u   総合的な学習の時間ra   rm      r   z"https://www.nhk.or.jp/school/rika/r  u   理科   c                    ^ U R                  T5      nU R                  TU5      nU R                  [        R                  " S[        R
                  " U5       S3U5      UU R                  SUSSS9U4S j5      $ )Nz-href="((?:https?://www\.nhk\.or\.jp)?/school/z	/[^/]+/)"zB(?s)<span\s+class="subjectName">\s*<img\s*[^<]+>\s*([^<]+?)</span>rm   FrH   c                 :   > [        TU R                  S5      5      $ )Nr   )r   r   )r  r8   s    r0   <lambda>5NhkForSchoolSubjectIE._real_extract.<locals>.<lambda>+  s    gc1771:.r3   )	_match_idr=   playlist_from_matchesr  r  r,  _html_search_regex)r*   r8   
subject_idr  s    `  r0   r   #NhkForSchoolSubjectIE._real_extract#  s    ^^C(
((j9))KKHS]I^H__hikrs##$ikrt{  DI#  J.	0 	0r3   r   N)r   r   r   r   IE_DESCKNOWN_SUBJECTSformatr  r   r   r   r   r   r3   r0   r  r    sv     AGN OUU6~668J 62
   4
  F 0r3   r  c                       \ rS rSrSR	                  SR                  S \R                   5       5      5      rSSSS.S	S
./r	S r
Srg)NhkForSchoolProgramListIEi.  z>https?://www\.nhk\.or\.jp/school/(?P<id>(?:{})/[a-zA-Z0-9_-]+)r)  c              #   N   #    U  H  n[         R                  " U5      v   M     g 7fr   r+  r-  s     r0   r/  #NhkForSchoolProgramListIE.<genexpr>0  s     L'K!1'Kr1  z&https://www.nhk.or.jp/school/sougou/q/zsougou/qu!   Ｑ～こどものための哲学r2  r   r   c                    U R                  U5      nU R                  SU S3U5      nU R                  SU5      =(       d    U R                  SUSSS9nU(       a  [        R
                  " SSU5      OS nU R                  S	US
SSS9nU R                  SU S3U5      n[        US5      =(       d    /  Vs/ s H  nU R                  SU 35      PM     nnU R                  XXE5      $ s  snf )Nzhttps://www.nhk.or.jp/school/r   r!   u   <h3>([^<]+?)とは？\s*</h3>rm   Fr6  z\s*\|\s*NHK\s+for\s+School\s*$z3(?s)<div\s+class="programDetail\s*">\s*<p>[^<]+</p>rs   r   )rH   r   z/meta/program.json)part.zpart-video-dasidz7https://www2.nhk.or.jp/school/movie/bangumi.cgi?das_id=)
r:  r=   _generic_titler<  r  subr(   r   
url_resultr   )	r*   r8   r   r  rm   rs   bangumi_listxbangumiss	            r0   r   'NhkForSchoolProgramListIE._real_extract:  s!   ^^C(
((+HTU)VXbc$$R1 m++,LgW^fk+l 	HM8"eDSW--B]%q . : **+J<7IJJX
 ",0QRXVXXZX OOUVWUXYZX 	 Z ##H%MM	Zs   4C&r   N)r   r   r   r   rA  r  r  r@  r   r   r   r   r   r3   r0   rC  rC  .  sS    RYYL'<'K'KLLNJ 88
   FNr3   rC  c                   V   \ rS rSrS/rSrSrSS0 SS_S	S
_SS_SS_SS_SS_SS_SS_SSS/_SS/_SS_SS_SS _S!S"_S#S$_S%S&_S'S(_S)S&0ES*.S+S,S-S.S/S,S0S0S-S1.S2S3.S4S5S6SS7S8S8S9S:S;S&S<S&S=.S*.S>S?S@SSASBSCSCSDSESFSGSHSISHSJ.SK/SL./rSMrSN r	SO r
SP rSQ rSR rSZSS jrST rSU rSV rSW rSX rSYrgM)[NhkRadiruIEiP  JPu   NHK らじる (Radiru/Rajiru)zhttps?://www\.nhk\.or\.jp/radio/(?:player/ondemand|ondemand/detail)\.html\?p=(?P<site>[\da-zA-Z]+)_(?P<corner>[\da-zA-Z]+)(?:_(?P<headline>[\da-zA-Z]+))?zHhttps://www.nhk.or.jp/radio/player/ondemand.html?p=LG96ZW5KZ4_01_4251382zEpisode expires on 2025-07-14rm   u]   クラシックの庭　特集「ドボルザークを聴く」（１）交響曲を中心にra   LG96ZW5KZ4_01_4251382r   rv   rs   z$md5:652d3c38a25b77959c716421eba1617auploaderu   NHK FM・東京channelrP   g     Ź@r   zzhttps://www.nhk.jp/static/assets/images/radioseries/rs/LG96ZW5KZ4/LG96ZW5KZ4-eyecatch_a67c6e949325016c0724f2ed3eec8a2f.jpg
categoriesu   音楽u   クラシック・オペラcastu   田添菜穂子ru   u   クラシックの庭	series_id
LG96ZW5KZ4r   u?   特集「ドボルザークを聴く」(1)交響曲を中心にr   
QP1Q2ZXZY3rT   inkhr   20250707rU   iSTkhr   )r8   r   r   z@https://www.nhk.or.jp/radio/ondemand/detail.html?p=Z9L1V2M24L_01Z9L1V2M24L_01u   ベストオブクラシックuZ   世界中の上質な演奏会をじっくり堪能する本格派クラシック番組。zzhttps://www.nhk.jp/static/assets/images/radioseries/rs/Z9L1V2M24L/Z9L1V2M24L-eyecatch_83ed28b4782907998875965fee60a351.jpgzNHK FM)ra   rm   rs   r   rW  rS  rT  ru   r   r   zHhttps://www.nhk.or.jp/radio/player/ondemand.html?p=18439M2W42_02_4251212zExpires on 2025-07-1518439M2W42_02_4251212u:   マイあさ! 午前5時のNHKニュース 2025年7月8日   NHKラジオ第1Phttps://www.nhk.or.jp/radioondemand/json/18439M2W42/img/series_945_thumbnail.jpg   NHKラジオニュースi<+lhi@'lh)ra   r   rm   rS  rT  r   ru   rT   r   rU   r   zHhttps://www.nhk.or.jp/radio/player/ondemand.html?p=J8792PY43V_20_4253945zExpires on 2025-09-01J8792PY43V_20_4253945uE   「後絶たない筋肉増強剤の使用」ワールドリポートu   大濱 敦（ソウル支局）zNHK R1zShttps://www.nhk.or.jp/radioondemand/json/J8792PY43V/img/corner/box_31_thumbnail.jpgu(   マイあさ！ ワールドリポートJ8792PY43V_20ijh20250706ijh)ra   r   rm   rs   rS  rT  r   ru   rW  rT   r   rU   r   z?Failed to download extended metadata: HTTP Error 404: Not Found)r8   r   r   expected_warningsNc           
         0 n[        US[        145       H0  nUR                  S5      nXB;  a  / X$'   X$   R                  U5        M2     / nUR	                  5        Hq  u  pF[        U5       H]  u  psUS:X  a	  Ub  SU S3OSnUR                  S5      =n	(       a  X S3-  nUR                  [        XR                  S	5      SS
95        M_     Ms     [        USS06$ )N.roler   u   【u   】r!   rm   u   …r  delimrg  u   ，)r   dictrh   r   items	enumerater   )
r*   act_listrole_groupsactre  formatted_rolesactsiresrm   s
             r0   _format_act_listNhkRadiruIE._format_act_list  s    3-8C776?D&$&!$$S)	 9 %++-JD#D/)*aD4DD6o"GGG,,5,WC=(C&&}S''&/QS'TU	 * . o;U;;r3   c           
      4   / n[        XS[        145       Hf  n[        [        US[        SR                  14S[        SR                  14S[        44[
        145      SS06=n(       d  MU  UR                  U5        Mh     S	R                  U5      =(       d    S $ )
N.re  u   {}…rG  u   （{}）r  rg  r!   u   、)r   rh  r   filterrA  strr   r  )r*   trackri   artistsartistrq  s         r0   _make_artistsNhkRadiruIE._make_artists  s    "5dV*<=F#\&'..!12*"3"3!45 < u	; & " !	" "s "
 s# > zz'"*d*r3   c                     [        X[        145      nUc  g [        US5      u  pE[        US5      u  pgSnUS:  a  U[        U5       S3-  nUS:  a  U[        U5       S3-  nU[        U5      S S3-  nU$ )	Ni  <   u   （r   u   時間u   分02u   秒）)r   r   divmodint)	r*   rw  ri   dhours	remainderminutessecondsrq  s	            r0   _make_durationNhkRadiruIE._make_duration  s    ~&6 789!!T?!)R019c%j\((CQ;c'l^3''C#g,r"&))
r3   c           
         / n[        US[        145       GH  n[        US[        SR                  14S[        SR                  14S[        SR                  14S[        S	R                  144[        145      nUR                  U R                  US
5      5        UR                  U R                  US5      5        [        SSSUS9=n(       a  UR                  SU S35        [        US[        145      =n(       a  UR                  SU S35        UR                  [        USS065        GM     SR                  U5      $ )N.r  u   「{}」lyricistu	   {}:作詞composeru	   {}:作曲arrangeru	   {}:編曲byArtistrP   labelcoder   rg  	from_dictu   ＜u   ＞locationu   ～rg  


)
r   rh  ru  rA  rv  r   rz  r  r   r  )r*   
music_listtracksrw  track_detailsr  r  s          r0   _format_music_listNhkRadiruIE._format_music_list  sC   !*sTFm<E(*"3"3!45Vk&8&8%9:Vk&8&8%9:Vk&8&8%9:	2
 u1 M   !3!3E:!FG  !4!4UJ!GH%gvSERRuR$$s5'%56'
SE/BCCxC$$s8*C%89MM-CdCD =  {{6""r3   c           
          [        US[        145      =(       d    0 n[        [        SSSUS9[        USSU R                  145      [        USSU R                  145      SS	9$ )
NdetailedDescriptionepg80epg200r  r  miscactList	musicListrf  )r   rh  r   rr  r  )r*   responsedetailed_descriptions      r0   _format_descriptionNhkRadiruIE._format_description  sp    +H7Ltf6UV\Z\'86EYZFI8M8M7N#OPFK$:Q:Q9R#ST	 	r3   c                 N   / n[        U/ [        U[        [        [        [
        45      Q[        R                  1PS P75       H]  u  pgUR                  US   [        UR                  S5      5      [        UR                  S5      5      U[        X65      S.5        US-  nM_     U$ )Nc                 B    US   S:g  =(       a    [        US   S   5      $ )Nr   	copyrightr   r8   )r   )r   r   s     r0   r8  -NhkRadiruIE._get_thumbnails.<locals>.<lambda>  s"    1,IQqT%[1IIr3   r8   rr   rq   )r8   rr   rq   
preferencera   r   )r   r   rv  bytesrh  setri  r   r
   rh   r   )r*   r&   keysr  r  rt   sizethumbs           r0   _get_thumbnailsNhkRadiruIE._get_thumbnails  s    
' /
dS%s34/
7;zzl/
I/
 KD U|$UYYw%78%eii&9:(#D/  !OJ r3   c                   ^ ^^^ [        US[        1S 145      u  mnmUS   m[        UUU U4S j5      nU(       d  0 $ T R                  XASSSSS	9nU(       d  0 $ [        US
[        145      =n(       a   T R                  S[        SSUSS9 35        0 $ [        USS[        145      n/ nUR                  T R                  US5      5        [        [        US5      5       H2  u  pUR                  T R                  U
S [        SU	5      S5      5        M4     UR                  T R                  USSS5      5        [        T R                  U5      [        USSSS[        145      US.[        US[        14S[        14S[        14S [        14S!.5      E[        US"S#[        14S$[        14S%[        14S&[        14S'SS(S)/[        1[        [        14S*.45      EUUS+.E5      $ ),Nr   c                 6    U =(       d    SR                  S5      $ )Nr!   ,	partitionrL  s    r0   r8  8NhkRadiruIE._extract_extended_metadata.<locals>.<lambda>  s    bH[H[\_H`r3   r   c                  L   > TR                   R                  [        TT T5      S9$ )N)broadcastEventId)_API_URL_TMPLrA  r   )areadate_idr*   services   r0   r8  r    s$    D&&--}WVZ\c?d-er3   zDownloading extended metadataz$Failed to download extended metadataFi  )rH   expected_statuserrorz4Failed to get extended metadata. API returned Error 
statuscodemessagez: )r  rg  publishedOnbroadcastDisplayName)abouteyecatch)r  eyecatchList.list)r  partOfSeriesr  ru   r  r  .r  )rs   rV  rt   endDate	startDaterP   )rm   rT   rU   rP   identifierGroupradioSeriesNameradioSeriesIdradioEpisodeNameradioEpisodeIdgenrename1name2)ru   rW  r   r   rU  )rT  rS  )r   rv  r   r(   rh  report_warningr   extendr  rj  r   r  r   r   allr   )r*   r   aa_vinfor   
detail_urlr  r  stationrt   numdctr  r  r  s   `          @@@r0   _extract_extended_metadata&NhkRadiruIE._extract_extended_metadata  sG   '1se>`=a2bcD1+eg
I&&$C2%QT ' V I GdV+<==5=&|Y%W[\]_` Ix-9ORUQV)WX
$..x9NOP!,x9W"XYHCd223mFTW>XZ\]^ Z  +PRZ\^_	a 33H= FIsFSE+RS$
 8 3%'*;)<=&14E3F%G'.)9:	& 	
 8&7,se4-u5.6/#7&gw-?#j\Z: & 
" %
  	r3   c                 H   U SUS    3n[        USS 145      nU R                  XE5      n[        US[        1S 145      u  pxn	0 UEUU R                  UR	                  S5      USS	9S
SUR	                  S5      UR	                  S5      [        U	5      [        U5      S.EUE$ )Nr   ra   aa_contents_idc                 $    U R                  S5      $ )N;r  r  s    r0   r8  3NhkRadiruIE._extract_episode_info.<locals>.<lambda>1  s    qwws|r3   rc   c                 6    U =(       d    SR                  S5      $ )Nr!   r   r  r  s    r0   r8  r  4  s    QW",?,?,Dr3   r]   Fr6  m4a_dashTr   program_sub_title)ra   rW   	containerwas_liverm   rs   rT   rU   )r   r  rv  r   rh   r   )
r*   r   programme_idseries_metar   r  extended_metadatafallback_start_timer   fallback_end_times
             r0   r   !NhkRadiruIE._extract_episode_info/  s    $~Qwt}o6
*:=S<T)UV ;;JQ4@q3%"D!EF5H1 1

11'++l2KZ_d1e#[[1";;':;*+<=!23F!G
  
 	
r3   c                 r   U SUS    3n[        USS[        145      n0 UEUU R                  UR                  S5      USS9SS	UR                  S
5      [	        UR                  S5      5      =(       d    UR                  S5      S.E[        US[
        14S[
        14S[        14SS 1[        14S.5      E$ )Nr   headline_id	file_listr   	file_nameFr6  r  Trm   headline_imager   )ra   rW   r  r  ru   r   
file_titlefile_title_sub	open_time	aa_vinfo4c                 *    U R                  S5      S   $ )Nr   r   r  r  s    r0   r8  0NhkRadiruIE._extract_news_info.<locals>.<lambda>S  s    aggcl1or3   )rm   rs   rT   rU   )r   rh  r   rh   r   rv  r   )r*   headliner  r  r   r   s         r0   _extract_news_infoNhkRadiruIE._extract_news_infoC  s    $~Qx'>&?@
x+q4&)AB

11'++k2JJ^c1d#!oog.$X\\2B%CDdXcHd
 7&. 03%8),=+>?&14M3NQbPc%d	% 
 	
r3   c                 ~   ^ U R                   (       a  g U R                  SS SSS9m[        U4S j5      [        l         g )N1https://www.nhk.or.jp/radio/config/config_web.xmlzDownloading API configFr6  c                  @   > ST R                  S5      R                   3$ )Nhttps:z.//url_program_detail)findtext)
api_configs   r0   r8  .NhkRadiruIE._real_initialize.<locals>.<lambda>\  s    vjooNe>f>k>k=l5mr3   )r  _download_xmlr   rP  )r*   r  s    @r0   _real_initializeNhkRadiruIE._real_initializeW  s>    ''?G_gl ( n
$,-m$n!r3   c                   ^ ^	^
^^ T R                  U5      R                  SSS5      u  p#m	U SU 3mUS:X  a  T R                  ST5      S   m
[        T
S[        14S	[        14S	[        14S
[
        14S.SS9mT	(       a;  [        T
SU	4S j[        45      nU(       d
  [        SSS9eT R                  UTT5      $ U
UU U4S jnT R                  " U" 5       T4ST
R                  S5      0TD6$ T R                  STUUS.S9m
[        S[        T
S[        145      SS9n[        SSST
S9T[        T
S [
        145      UUS!.mT	(       a;  [        T
S"U	4S# j[        45      nU(       d
  [        SSS9eT R                  UTT5      $ U
UU U4S$ jnT R                  " U" 5       T4TR                  S%5      T
R                  S&5      S'.TD6$ )(Nsitecornerr  r   
18439M2W42z=https://www.nhk.or.jp/s-media/news/news-site/list/v1/all.jsonmainprogram_name
media_name)thumbnail_cthumbnail_p)rm   rT  rS  r   FrN   detail_listc                    > US   T:H  $ )Nr  r   r   r   r  s     r0   r8  +NhkRadiruIE._real_extract.<locals>.<lambda>p  s    q7G;7Vr3   z-Content not found; it has most likely expiredTexpectedc               3   n   >#    [        TSS[        145       H  n TR                  U TT5      v   M     g 7f)Nr  .)r   rh  r  )r  rI   r  r*   r  s    r0   news_entries/NhkRadiruIE._real_extract.<locals>.news_entriesu  s6      ,TM33O PH11(L+VV !Q   25rs   site_detailz:https://www.nhk.or.jp/radio-api/app/v1/web/ondemand/series)site_idcorner_site_idr$   NHKradio_broadcastr   rf  rm   corner_namer  thumbnail_url)ru   rW  r   rT  rS  r'   c                 &   > US   [        T5      :H  $ )Nra   )r  r  s     r0   r8  r    s    1T7cR]N^C^r3   c               3   n   >#    [        TSS[        145       H  n TR                  U TT5      v   M     g 7f)Nr'   .)r   rh  r   )r   rI   r  r*   r  s    r0   r   *NhkRadiruIE._real_extract.<locals>.entries  s6     'z3.GH00,TT Ir  ru   series_description)rm   rs   )r   r   r(   r   rv  r   anyr   r  r   rh   r   r   )r*   r8   r  	corner_idr  r  fallback_stationr   r   r  rI   r  r  s   `        @@@@r0   r   NhkRadiruIE._real_extract^  s9   *.*?*?*D*J*J6S[]g*h'K!!I;/ l"&&OQ]__egD&t(3%0(3%0)C51<{mL	.
 K '=*VX[\^()Xcghh..x{SSW W ''b:>((=:QbU`b b ""H,""+_ #  )TDUX[W\C]0^fij#G]#QUV%%d_{m,LM'(
 "4*6^`c)deG$%T_cdd--g|[QQ	U 	U ##I|G+6??8+D!56G:EG 	Gr3   r   )N)r   r   r   r   _GEO_COUNTRIESr?  r   r   r  rr  rz  r  r  r  r  r  r   r  r  r   r   r   r3   r0   rP  rP  P  s   VN-G nJY/
w
)
 5
 A	

 )
 (
 
   V
 8%BC
 &'
 -
 
 X
 ,
 
  :!
"  #
$ J%
2 R!5w V( 6	
   Z')Q*)k0#%!+&
	& Z')\< n@(#%!+&
  ``)mKFZ M<"
+#( 1f
(
(o9Gr3   rP  c            	       :    \ rS rSrSrSSSSSSSS	S
.S./rS rSrg)NhkRadioNewsPageIEi  z/https?://www\.nhk\.or\.jp/radionews/?(?:$|[?#])z https://www.nhk.or.jp/radionews/   18439M2W42_01r^  z$md5:bf2c5b397e44bc7eb26de98d8f15d79dr]  r_  )ra   r   rs   rT  rS  rm   )r8   r   r   c                 .    U R                  S[        5      $ )Nz@https://www.nhk.or.jp/radio/ondemand/detail.html?p=18439M2W42_01)rJ  rP  r   s     r0   r    NhkRadioNewsPageIE._real_extract  s    acnoor3   r   Nr  r   r3   r0   r-  r-    s8    CJ 2!kA)*/
	 Fpr3   r-  c                       \ rS rSrS/rSrSSSSSS	S
/S.S.SSSSS/000SSSSS	S/S.S.SSSSS/000SSSSS	S/S.S./rSSSS .rS! rS"r	g#)$NhkRadiruLiveIEi  rQ  z<https?://www\.nhk\.or\.jp/radio/player/\?ch=(?P<id>r[12]|fm)z)https://www.nhk.or.jp/radio/player/?ch=r1z	bs-r1-130u    re:^NHKラジオ第1・東京.+$rv   zChttps://www.nhk.jp/assets/images/broadcastservice/bs/r1/r1-logo.svgis_liveznhkradirulive r1-tokyo)ra   rm   r   r   live_status_old_archive_idsr   z)https://www.nhk.or.jp/radio/player/?ch=r2extractor_argsnhkradiruliver  fukuokaz	bs-r2-400u   re:^NHKラジオ第2.+$zChttps://www.nhk.jp/assets/images/broadcastservice/bs/r2/r2-logo.svgznhkradirulive r2-fukuoka)r8   r   r   z)https://www.nhk.or.jp/radio/player/?ch=fmsapporoz	bs-r3-010u   re:^NHK FM・札幌.+$zChttps://www.nhk.jp/assets/images/broadcastservice/bs/r3/r3-logo.svgznhkradirulive fm-sapporor1r2r3)r;  r<  fmc                 `   U R                  U5      nU R                  SS/5      S   nU R                  SUS5      nUR                  SU S35      nU(       dQ  [	        SR                  S	R                  UR                  S
5       Vs/ s H  ofR                  PM     sn5      5      SS9eU R                  SUR                  S5      R                   3R                  UR                  S5      R                  S9USU S3SS9n[        XpR                  R                  U5      S45      n0 [        US[        14S[        14S.5      E[        U [        X#5      5      /[        USSSS[         14S[         14S.45      U R#                  UR                  U S35      R                  U5      SS .E$ s  snf )!Nr  tokyor   r  zDownloading area informationz.//data//area[.="z"]/..z!Invalid area. Valid areas are: {}z, z.//data//areaTr  r   z.//url_program_noaareakey)r  zDownloading z station metadataF)r7   rH   r  r  ra   )rm   ra   logo.r8   rr   rq   )r8   rr   rq   rx   )r6  rt   rW   r4  )r:  _configuration_argr  r  r   rA  r  findallr  r(   r   _NOA_STATION_IDSrh   rv  r   r   r
   r   )	r*   r8   r  r  configr&   rp  noa_infobroadcast_services	            r0   r   NhkRadiruLiveIE._real_extract  s   ..%&&vy9!<##?Jhj{{.tfE:; !D!K!KDII!'!@A!@A!@AMC "DNRT T &&V[[!56;;<=DD$))T]J^JcJcDdL.?@ ' O )4I4I4M4Mg4VXe3fg
,03%8cUm/ 

 "1}W7S!T U&'863!K=1#k]3I ; 
 11$))wisO2L2Q2QSZ[
 	
 Bs   F+r   N)
r   r   r   r   r+  r   r   rE  r   r   r   r3   r0   r3  r3    s    VNPJ ;7^$!9 :
 ;#o7L%MN.^$!; <
 ;#o7L%MN-^$!; <
	1$FL #$d;
r3   r3  )r  commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  rC  rP  r-  r3  r   r3   r0   <module>rL     s    	 !    *F FRG/y G/TU_i U_p?
M ?
D%0M %0PN NDGG- GGT
p p(I
m I
r3   