
    ĞiB                     b   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
mZmZ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 G d de          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   )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                   $    e Zd ZdZdZd ZddZdS )	NhkBaseIEzZhttps://api.nhkworld.jp/showsapi/v1/{lang}/{content_format}_{page_type}/{m_id}{extra_page}z7https?://www3\.nhk\.or\.jp/nhkworld/(?P<lang>[a-z]{2})/c           	          |rdnd}|rdnd}|sd| d| }d}	nd}|}	|                      | j                            |||	||	          t          ||                    S )
Nvideoaudioclipsepisodes/_programs )langcontent_format	page_typem_id
extra_page)_download_json_API_URL_TEMPLATEformatr   )
selfr%   r"   is_video
is_episodeis_clipr#   content_typer&   r$   s
             YC:\Users\betacode\Desktop\descargarYoutube\venv\Lib\site-packages\yt_dlp/extractor/nhk.py	_call_apizNhkBaseIE._call_api   s    $,9'")9wwz 	%<^<<l<<J"IIJ$I""")).Ij * 2 2 $%%	' ' 	'    Nc                    |d u }t                               |                              ddd          \  }}}|dk    }|r&|                     |||d|d d         dk              }t	          dd|	          }|                    d
          }	t          |dt          d
f          }
|	}|
r
|	r|
 d|	 }	n|
r	|	s|
}	d }
d }nd }||	|
|dt          |dt          hfdt          hfdddt          hfdddt          hfdd dt          |          hfdt          hfdt          hfdfdt          |          hfd          t                                           t           j        d}t          |dt          ht          f          pi }|                    d          s|                     dd           n|d         }|rU|                     ||          \  }}|                    ||dt          |d t          hfd!t          hfd"                     nOt%          |d#          }|                     t          d$|           d%|d&d'd(d)*          |d+<   |d+         D ]}||d,<   |S )-Nr"   typeidr   T   9999)r,   r-   )	from_dicttitle)video_programaudio_programz - )r4   r8   seriesepisodedescriptionfirst_broadcasted_at
categories.nametagsimagesc                     |d         S Nurl r   vs     r/   <lambda>z1NhkBaseIE._extract_episode_info.<locals>.<lambda>O   s
    ah r1   rE   widthheightrE   rJ   rK   )r=   release_timestampr?   rA   
thumbnailswebpage_url)extractor_key	extractor)r   r   z,Stream not found; it has most likely expiredexpected)formats	subtitlesdurationpublished_at)rV   	timestampz.m4azhttps://vod-stream.nhk.jpz/index.m3u8m4am3u8_nativehlsF)entry_protocolm3u8_idfatalrT   language)NhkVodIE_match_valid_urlgroupr0   r   getr   anystrr   r   r
   ie_keyIE_NAMEdictraise_no_formats#_extract_m3u8_formats_and_subtitlesupdater   _extract_m3u8_formats)r*   rE   r<   fetch_episoder"   m_type
episode_idr+   video_idr8   r;   episode_nameinfostream_info
stream_urlrT   rU   
audio_pathfs                      r/   _extract_episode_infozNhkBaseIE._extract_episode_info-   sG   4#+#<#<S#A#A#G#GPVX\#]#] fjW$ 	_nnD(tZPRQRPR^W]E] % _ _G !vAAAG$$g(JCQX'YZZ 	 e 	 ))%))EE 	 E 	 EFLLL #	
 

 7 -u5&<?P>Q%R+S&3%@fse4')>)>!GCLL>2%}5'+7A A 
 !&~6% %  
" &__..!)%
 
 
, #7-?$,MNNTRTu%% 	)!!"P[_!````$U+J )%)%M%MjZb%c%c"&!*  #;%/+$?&47H6I%J2 2       (
F;;
"&"<"<:JGGTTTm! #= #0 #0Y i ) )A$(AjMMr1   N)__name__
__module____qualname__r(   _BASE_URL_REGEXr0   rw   rF   r1   r/   r   r      sH        tPO' ' ' G G G G G Gr1   r   c                      e Zd Zej         dej         dej         dgZdddddd	d
dddgg dddddddddddddd	ddddgdgdd d!d"d#d$d%d&d'd(d	d)d*gd+dd,d-d.d/d-d.d0d-d.d1d-d.d2d3dd4d5d6d7d8d9d:d;d<d=dd>d?d@d	dAdBdCd;dDdEddFdGdHdIdJdKgg dLdMdNdMdNdOddPdQddRdSdTdUdVdWdXd	dYdZgd[dd\d]dd^d_d	d`dKdagg dbdcddde
ddfd-d.dgd-d.gZdh ZdiS )jr`   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+)z1https://www3.nhk.or.jp/nhkworld/en/shows/2049165/z
2049165-enmp4zNJapan Railway Journal - Choshi Electric Railway: Fighting to Get Back on Trackz$md5:ab57df2fca7f04245148c2e787bb203dzre:https://.+/.+\.jpgz6Choshi Electric Railway: Fighting to Get Back on TrackJapan Railway Journali  z
Biz & Tech)AkitaChibaTrains
TranscriptzAll (Japan Navigator)ih20250928iQh20250925)r4   extr8   r=   	thumbnailr<   r;   rV   r?   rA   rX   upload_daterM   release_daterE   	info_dictz:https://www3.nhk.or.jp/nhkworld/en/ondemand/video/9999011/ 153c3016dfd252ba09726588149cf0e7z
9999011-enz?Dining with the Chef - Chef Saito's Family recipe: MENCHI-KATSUz$md5:5aee4a9f9d81c26281862382103b0ea5zDining with the Chefz(Chef Saito's Family recipe: MENCHI-KATSU   FoodWashokuiG\20190123)r4   r   r8   r=   r   r;   r<   rV   r?   rA   rX   r   )rE   md5r   zHhttps://www3.nhk.or.jp/nhkworld/en/shows/audio/livinginjapan-20240901-1/zlivinginjapan-20240901-1-enrY   z=Living in Japan - Weekend Hiking / Self-protection from crimeLiving in Japanz$md5:4d0e14ab73bdbfedb60a53b093954ed6z+Weekend Hiking / Self-protection from crimeInteractive)r4   r   r8   r;   r=   r   r<   r?   z:https://www3.nhk.or.jp/nhkworld/en/ondemand/video/2015173/TrE   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`)r4   r   r8   r=   r   r   rX   z404 Not Found)rE   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)r4   r   r8   r;   r<   r   r=   zexpires 2023-10-15z1https://www3.nhk.or.jp/nhkworld/en/shows/3026036/z
3026036-enz6STATELESS: The Japanese Left Behind in the Philippinesz$md5:9a2fd51cdfa9f52baae28569e0053786i  zkhttps://www3.nhk.or.jp/nhkworld/en/shows/3026036/images/wide_l_QPtWpt4lzVhm3NzPAMIIF35MCg4CdNwcikPaTS5Q.jpgDocumentaryzCulture & Lifestyle)r   zDocumentary 360zThe Pursuit of PEACEiX+h20250927)r4   r   r8   r=   rV   r   r?   rA   rX   r   rM   r   z:https://www3.nhk.or.jp/nhkworld/en/ondemand/video/9999a07/z
9999a07-enz?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:3f9dcb4db22fceb675d90448a040d3f6i0h`   20210525zCurrent AffairsEntertainment)r4   r   r<   r;   r8   r=   rX   rV   r   r   r?   z:https://www3.nhk.or.jp/nhkworld/en/ondemand/video/9999d17/z
9999d17-enz2Flowers of snow blossom - The 72 Pentads of Yamatou   Today’s focus: Snow   zScience & Nature)NarazTemples & ShrinesWinterSnowi ]a20220128)
r4   r   r8   r=   r   rV   r?   rA   rX   r   zHhttps://www3.nhk.or.jp/nhkworld/en/shows/audio/livinginjapan-20231001-1/z1https://www3.nhk.or.jp/nhkworld/en/shows/9999o80/c                 ,    |                      |          S rx   )rw   r*   rE   s     r/   _real_extractzNhkVodIE._real_extract  s    ))#...r1   N)ry   rz   r{   r   r|   
_VALID_URL_TESTSr   rF   r1   r/   r`   r`   w   s       %ggg%kkk%YYYJ CeA1O-'.WWW#%!+&
 
 ( L1WA1,B!(K#%
 
	 ( Z/T'A1D(/	
 	
  L  V  V  U 
 L?AL%#
 
    O0H7(1A
 
 %  CMA G(*?@MMM#%!+&
 
 & LY+mA#%1,o>
 
 " LI2102DECCC#%
 
   Z  C UNF`/ / / / /r1   r`   c            	            e Zd Zdej         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gZe fd            Zd Z	d Z
 xZS )NhkVodProgramIEz(?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)r4   r8   r=   r;   r   rE   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:665bb36ec2a12c5a7f598ee713fc2b54   z>https://www3.nhk.or.jp/nhkworld/en/shows/10yearshayaomiyazaki/Tr   c                 ~    t                               |          rdn t                                          |          S )NF)r`   suitablesuper)clsrE   	__class__s     r/   r   zNhkVodProgramIE.suitableD  s2     ))#..IuuEGG4D4DS4I4IIr1   c                 V    |D ]%}t          t          ||                    x}r|c S &d S rx   )r   r	   )r*   class_valueshtmlclass_valuevalues        r/   !_extract_meta_from_class_elementsz1NhkVodProgramIE._extract_meta_from_class_elementsH  sI    ' 	 	K"#7T#J#JKKKu 	 	r1   c                    
                                                     dddd          \  }}}}                     |||dk    d|dk              

 fd}                     |          }                     g d	|          }                     g d
|          }	                      |            |||	|          S )Nr"   r3   r4   episode_typer   Fclipc               3      K   t          dd f          D ].}                     t          | d                   |           V  /d S )Nitemsc                     |d         S rD   rF   rG   s     r/   rI   z@NhkVodProgramIE._real_extract.<locals>.entries.<locals>.<lambda>S  s
    5 r1   rE   )r   rw   r   )r<   r   r*   rE   s    r/   entriesz.NhkVodProgramIE._real_extract.<locals>.entriesR  sd      '7<Q<Q2RSS X X00gen1M1MwWWWWWWX Xr1   )zp-programDetail__titlepProgramHero__logoTexttAudioProgramMain__titlezp-program-name)zp-programDetail__textpProgramHero__descriptiontAudioProgramMain__infozp-program-description)r;   )ra   rb   r0   _download_webpager   playlist_result)r*   rE   r"   rn   
program_idr   r   r   program_titleprogram_descriptionr   s   ``        @r/   r   zNhkVodProgramIE._real_extractM  s(   151F1Fs1K1K1Q1QRXZ`bfhv1w1w.fj,>>f/8NP P	X 	X 	X 	X 	X 	X 	X %%c:66>> @ @ @  $	% %
 #DD F% F% F% '+	, , ##GGIIz=J]fs#tttr1   )ry   rz   r{   r   r|   r   r   classmethodr   r   r   __classcell__)r   s   @r/   r   r     sV       M		"M M MJ @,A-	
 
 
 
 H ,A-	
 
  	 	 R ,A-	
 
  
 
 X!&A'	
 
  
 
 P O*FX J J J J [J  
u u u u u u ur1   r   c            	       :    e Zd ZdZdddddddd	d
ddidgZd ZdS )NhkForSchoolBangumiIEzbhttps?://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)r4   r8   rV   rX   r   r   chaptersskip_downloadT)rE   r   paramsc                    |                      |                                          \  }}|                     d| d| |          }d t          j        d|          D             }d t          j        d|          D             }d t          j        d|          D             }d	 t          j        d
|          D             }|                    d          p|                    d          }	|	r |                    d          d          d|	 }|                     d|dd          d| d|dd          }
t          |                    d                    }d }|rO|rMt          |          t          |          k    r-|}g |dd          |}d t          |||d          D             }||                    d          t          |                    d                    t          |d                   |
|dS )Nz$https://www2.nhk.or.jp/school/movie/z.cgi?das_id=c                 `    i | ]+}|                     d           |                     d          ,S )r   r   rb   .0gs     r/   
<dictcomp>z7NhkForSchoolBangumiIE._real_extract.<locals>.<dictcomp>  s.    uuu!qwwqzz1771::uuur1   z$var\s+([a-zA-Z_]+)\s*=\s*"([^"]+?)";c                 `    i | ]+}|                     d           |                     d          ,S )r      r   r   s     r/   r   z7NhkForSchoolBangumiIE._real_extract.<locals>.<dictcomp>  s@      O  O  OQ!''!**aggajj  O  O  Or1   z:(?:program|clip)Obj\.([a-zA-Z_]+)\s*=\s*(["\'])([^"]+?)\2;c                 R    g | ]$}t          |                    d                     %S )r   )r   rb   r   s     r/   
<listcomp>z7NhkForSchoolBangumiIE._real_extract.<locals>.<listcomp>  s*    A^AGGAJJ77r1   z$chapterTime\.push\(\'([0-9:]+?)\'\);c           
          g | ]`}d                      |                    d          pdt          |                    d                    g                                          aS ) r   r!   r   )joinrb   r   stripr   s     r/   r   z7NhkForSchoolBangumiIE._real_extract.<locals>.<listcomp>  si      {  {  {]^#((AGGAJJ$4"l1771::6N6N#OPPVVXX  {  {  {r1   z><div class="cpTitle"><span>(scene\s*\d+)?</span>([^<]+?)</div>	r_versionversionr   r   z#https://nhks-vh.akamaihd.net/i/das/   r   z_V_000.f4v/master.m3u8r~   r[   )r   r]   
r_durationr   c                 "    g | ]\  }}}|||d S ))
start_timeend_timer8   rF   )r   sets       r/   r   z7NhkForSchoolBangumiIE._real_extract.<locals>.<listcomp>  sF     U U U !Q    U U Ur1   T)strictr@   r_upload)r4   r8   rV   rX   rT   r   )ra   groupsr   refinditerrc   splitrl   r   lenzipr   )r*   rE   program_typerp   webpagebase_valuesprogram_valueschapter_durationschapter_titlesr   rT   rV   r   r   r   s                  r/   r   z#NhkForSchoolBangumiIE._real_extractz  s   !%!6!6s!;!;!B!B!D!Dh((W<WWXWWYac c vur{Cjls7t7tuuu O  O"+  GD  FM  ;N  ;N  O  O  OMtv}A~A~ {  {bdbm  op  ry  cz  cz  {  {  { //+..O.2D2DY2O2O 	="..--a0<<7<<H,,b(1Q3-bb(bbb% - 0 0 "+//,"?"?@@ 	U 	UC8I4J4JcR`NaNa4a4a*J9*122.99HU U !X~dSSS	U U UH #''//&{|'D'DEE*;z+BCC 
 
 	
r1   Nry   rz   r{   r   r   r   rF   r1   r/   r   r   e  sg        vJY%*#%"

 

 T
  F&*
 *
 *
 *
 *
r1   r   c                       e Zd ZdZdZd                    d                    d eD                                 Zdddd	d
ddddd	ddgZd Z	dS )NhkForSchoolSubjectIEup   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              #   >   K   | ]}t          j        |          V  d S rx   r   escaper   r   s     r/   	<genexpr>zNhkForSchoolSubjectIE.<genexpr>  s*      66!1666666r1   z$https://www.nhk.or.jp/school/sougou/r  u   総合的な学習の時間r4   r8      r   z"https://www.nhk.or.jp/school/rika/r   u   理科   c           
         |                                }|                     |          }|                     t          j        dt          j        |           d|          ||                     d|dd          fd          S )Nz-href="((?:https?://www\.nhk\.or\.jp)?/school/z	/[^/]+/)"zB(?s)<span\s+class="subjectName">\s*<img\s*[^<]+>\s*([^<]+?)</span>r8   Fr^   c                 J    t          |                     d                    S )Nr   )r   rb   )r   rE   s    r/   rI   z5NhkForSchoolSubjectIE._real_extract.<locals>.<lambda>  s    gc1771::.. r1   )	_match_idr   playlist_from_matchesr   r   r  _html_search_regex)r*   rE   
subject_idr   s    `  r/   r   z#NhkForSchoolSubjectIE._real_extract  s    ^^C((
((j99))KiS]I^I^iiikrss##$ikrt{  DI#  J  J....	0 0 	0r1   N)
ry   rz   r{   IE_DESCKNOWN_SUBJECTSr)   r   r   r   r   rF   r1   r/   r   r     s         AGN OUU66~666668 8J 62
 
    4
 
   F 0 0 0 0 0r1   r   c                       e Zd Zd                    d                    d ej        D                                 Zdddddd	gZd
 Z	dS )NhkForSchoolProgramListIEz>https?://www\.nhk\.or\.jp/school/(?P<id>(?:{})/[a-zA-Z0-9_-]+)r  c              #   >   K   | ]}t          j        |          V  d S rx   r  r  s     r/   r  z#NhkForSchoolProgramListIE.<genexpr>  s*      LL!1LLLLLLr1   z&https://www.nhk.or.jp/school/sougou/q/zsougou/qu!   Ｑ～こどものための哲学r     r   c                                           |          }                     d| d|          }                     d|          p                     d|dd          }|rt	          j        dd|          nd }                     d	|d
dd          }                     d| d|          } fdt          |d          pg D             }                     ||||          S )Nzhttps://www.nhk.or.jp/school/r   r!   u   <h3>([^<]+?)とは？\s*</h3>r8   Fr  z\s*\|\s*NHK\s+for\s+School\s*$z3(?s)<div\s+class="programDetail\s*">\s*<p>[^<]+</p>r=   r   )r^   rb   z/meta/program.jsonc                 @    g | ]}                     d |           S )z7https://www2.nhk.or.jp/school/movie/bangumi.cgi?das_id=)
url_result)r   xr*   s     r/   r   z;NhkForSchoolProgramListIE._real_extract.<locals>.<listcomp>  sE     Z Z Z OOYVWYYZZZ Z Zr1   )part.zpart-video-dasid)	r  r   _generic_titler  r   subr'   r   r   )r*   rE   r   r   r8   r=   bangumi_listbangumiss   `       r/   r   z'NhkForSchoolProgramListIE._real_extract  s;   ^^C((
(()V)V)V)VXbcc$$R11 m++,LgW^fk+ll 	HMW8"eDDDSW--B]%q . : : **JJJJJJX XZ Z Z Z!,0QRRXVXZ Z Z ##Hj%MMMr1   N)
ry   rz   r{   r)   r   r   r!  r   r   r   rF   r1   r/   r#  r#    s        RYYLL'<'KLLLLLN NJ 88
 
    FN N N N Nr1   r#  c                   N   e Zd ZdgZdZdZddi dddd	d
ddddddddddddddgddgddddddd d!d"d#d$d%d&d'd(d%id)d*d+d,d-d.d+d/d/d,d0d1d2d3d4d5dd6d7d7d8d9d:d%d;d%d<d)d=d>d?dd@dAdBdBdCdDdEdFdGdHdGdIdJgdKgZdLZdM ZdN Z	dO Z
dP ZdQ ZdYdSZdT ZdU ZdV ZdW ZdX ZdLS )ZNhkRadiruIE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-14r8   u]   クラシックの庭　特集「ドボルザークを聴く」（１）交響曲を中心にr4   LG96ZW5KZ4_01_4251382r   rY   r=   z$md5:652d3c38a25b77959c716421eba1617auploaderu   NHK FM・東京channelrV   g     Ź@r   zzhttps://www.nhk.jp/static/assets/images/radioseries/rs/LG96ZW5KZ4/LG96ZW5KZ4-eyecatch_a67c6e949325016c0724f2ed3eec8a2f.jpgr?   u   音楽u   クラシック・オペラcastu   田添菜穂子r;   u   クラシックの庭	series_id
LG96ZW5KZ4r<   u?   特集「ドボルザークを聴く」(1)交響曲を中心にro   
QP1Q2ZXZY3rX   inkhr   20250707rM   iSTkhr   )rE   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)r4   r8   r=   r   r6  r3  r4  r;   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)r4   r   r8   r3  r4  r   r;   rX   r   rM   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)r4   r   r8   r=   r3  r4  r   r;   r6  rX   r   rM   r   z?Failed to download extended metadata: HTTP Error 404: Not Found)rE   r   r   expected_warningsNc           
         i }t          |dt          hf          D ];}|                    d          }||vrg ||<   ||                             |           <g }|                                D ]\  }}t          |          D ]l\  }}|dk    r|d| dnd}|                    d          x}	r||	 dz  }|                    t          ||                    d	          d
                     mt          |ddiS )N.roler   u   【u   】r!   r8   u   …r@   delimrF  u   ，)r   rh   rc   appendr   	enumerater   )
r*   act_listrole_groupsactrD  formatted_rolesactsiresr8   s
             r/   _format_act_listzNhkRadiruIE._format_act_listF  s:   3-88 	* 	*C776??D;&&$&D!$$S))))%++-- 	V 	VJD$#D// V V3)*aD4DoDoooo"GGG,,,5 )e===(C&&}S#''&//QS'T'T'TUUUU	V
 o;U;;;r1   c           
      *   g }t          ||dt          hf          D ]a}t          t          |dt          dj        hfdt          dj        hfdt          fft
          hf          ddix}r|                    |           bd	                    |          pd S )
N.rD  u   {}…r*  u   （{}）r@   rF  r!   u   、)r   rh   r   filterr)   re   rG  r   )r*   trackkeyartistsartistrO  s         r/   _make_artistszNhkRadiruIE._make_artistsW  s    "53dV*<== 	$ 	$F#\&'.!12*"3!45 < u	; & & " !	" " "s $
 s###zz'""*d*r1   c                 &   t          ||t          hf          }|d S t          |d          \  }}t          |d          \  }}d}|dk    r|t          |           dz  }|dk    r|t          |           dz  }|t          |          ddz  }|S )	Ni  <   u   （r   u   時間u   分02u   秒）)r   r   divmodint)	r*   rS  rT  dhours	remainderminutessecondsrO  s	            r/   _make_durationzNhkRadiruIE._make_durationc  s    ~&6 78894!!T??y!)R00199c%jj((((CQ;;c'll''''C#g,,)))))
r1   c           
         g }t          |dt          hf          D ])}t          |dt          dj        hfdt          dj        hfdt          dj        hfdt          d	j        hfft          hf          }|                    |                     |d
                     |                    |                     |d                     t          ddd|          x}r|                    d| d           t          |dt          hf          x}r|                    d| d           |                    t          |ddi           +d	                    |          S )N.r@   u   「{}」lyricistu	   {}:作詞composeru	   {}:作曲arrangeru	   {}:編曲byArtistrV   labelcoder   rF  r7   u   ＜u   ＞locationu   ～rF  


)
r   rh   rR  r)   re   rG  rW  rb  r   r   )r*   
music_listtracksrS  track_detailsrh  rk  s          r/   _format_music_listzNhkRadiruIE._format_music_listq  s   !*sTFm<< 	E 	EE(*"3!45Vk&8%9:Vk&8%9:Vk&8%9:	2
 u1  M   !3!3E:!F!FGGG  !4!4UJ!G!GHHH%gvSERRRRu 7$$%55%5%5%5666'
SE/BCCCx :$$%88%8%8%8999MM-CdCCDDDD{{6"""r1   c           
          t          |dt          hf          pi }t          t          ddd|          t          |dd| j        hf          t          |dd| j        hf          d	          S )
NdetailedDescriptionepg80epg200rm  rj  miscactList	musicListrE  )r   rh   r   rP  rq  )r*   responsedetailed_descriptions      r/   _format_descriptionzNhkRadiruIE._format_description  s    +H7Ltf6UVV\Z\'86EYZZZFI8M7N#OPPFK$:Q9R#STT	   	r1   c                    g }t          |g t          |t          t          t          t
          f          t          j        hd R           D ]y\  }}|                    |d         t          |	                    d                    t          |	                    d                    |t          ||          d           |dz  }z|S )Nc                 P    |d         dk    ot          |d         d                   S )Nr   	copyrightr   rE   )r   rG   s     r/   rI   z-NhkRadiruIE._get_thumbnails.<locals>.<lambda>  s$    1,IQqT%[1I1I r1   rE   rJ   rK   )rE   rJ   rK   
preferencer4   r   )r   r   re   bytesrh   setr   rG  r
   rc   r   )r*   datakeysr@   r  rN   sizethumbs           r/   _get_thumbnailszNhkRadiruIE._get_thumbnails  s    
' /
dS%s344/
7;zl/
II/
 /
   	 	KD% U|$UYYw%7%788%eii&9&9::(#D$//     !OJJr1   c                 |    t          |dt          hd hf          \  }|d         t           fd          }|si S                      ||dddd	          }|si S t          |d
t          hf          x}r+                     dt          dd|d                      i S t          |ddt          hf          }g }|                                         |d                     t          t          |d                    D ]>\  }	}
|                                         |
d t          d|	          d                     ?|                                         |ddd                     t                               |          t          |ddddt          hf          |dt          |dt          hfdt          hfdt          hfd t          hfd!          t          |d"d#t          hfd$t          hfd%t          hfd&t          hfd'dd(d)gt          ht          t          hfd*f          ||d+          S ),Nr   c                 0    | pd                     d          S )Nr!   ,	partitionr)  s    r/   rI   z8NhkRadiruIE._extract_extended_metadata.<locals>.<lambda>  s    bH[H[\_H`H` r1   r   c                  X    j                             t                               S )N)broadcastEventId)_API_URL_TMPLr)   r   )areadate_idr*   services   r/   rI   z8NhkRadiruIE._extract_extended_metadata.<locals>.<lambda>  s)    D&--}WVZ\c?d?d-ee r1   zDownloading extended metadataz$Failed to download extended metadataFi  )r^   expected_statuserrorz4Failed to get extended metadata. API returned Error 
statuscodemessagez: )r7   rF  publishedOnbroadcastDisplayName)abouteyecatch)r  eyecatchList.list)r  partOfSeriesr  r;   rv  rw  .r@   )r=   r5  rN   endDate	startDaterV   )r8   rX   rM   rV   identifierGroupradioSeriesNameradioSeriesIdradioEpisodeNameradioEpisodeIdgenrename1name2)r;   r6  r<   ro   r?   )r4  r3  )r   re   r   r'   rh   report_warningr   extendr  rH  r   r{  r   r   allr   )r*   ro   aa_vinfor   
detail_urlry  r  stationrN   numdctr  r  r  s   `          @@@r/   _extract_extended_metadataz&NhkRadiruIE._extract_extended_metadata  s   '1se>`>`=a2bccD1+eeeeeeeg g
 	I&&
$C2%QT ' V V  	I GdV+<===5 	_&|Y%W[\\\_ _` ` ` Ix-9ORUQV)WXX
$..x9NOOPPP!,x9W"X"XYY 	_ 	_HCd223mFTW>X>XZ\]]^^^^  +PRZ\^__	a 	a 	a 33H== FIsFSE+RSS$
 
 8 3%'*;)<=&14E3F%G'.)9:	& &  	
 8&7,se4-u5.6/#7&gw-?#j\Z: : &  
" %
 
 
   	r1   c                    | d|d          }t          |dd hf          }|                     ||          }t          |dt          hd hf          \  }}}	i |||                     |                    d          |d	          d
d|                    d          |                    d          t          |	          t          |          d|S )Nr   r4   aa_contents_idc                 ,    |                      d          S )N;r   r  s    r/   rI   z3NhkRadiruIE._extract_episode_info.<locals>.<lambda>  s    qwws|| r1   r5   c                 0    | pd                     d          S )Nr!   r   r  r  s    r/   rI   z3NhkRadiruIE._extract_episode_info.<locals>.<lambda>  s    QW",?,?,D,D r1   rt   Fr  m4a_dashTr   program_sub_title)r4   rT   	containerwas_liver8   r=   rX   rM   )r   r  re   rl   rc   r   )
r*   r<   programme_idseries_metaro   r  extended_metadatafallback_start_timer   fallback_end_times
             r/   rw   z!NhkRadiruIE._extract_episode_info  s
   $66wt}66
*:=S=S<T)UVV ;;JQQ4@q3%"D"D!EF5H 5H1Q 1

11'++l2K2KZ_d1ee#[[11";;':;;*+<==!23F!G!G
 
 
  
 	
r1   c                    | d|d          }t          |ddt          hf          }i |||                     |                    d          |d          dd	|                    d
          t	          |                    d                    p|                    d          dt          |dt
          hfdt
          hfdt          hfdd ht          hfd          S )Nr   headline_id	file_listr   	file_nameFr  r  Tr8   headline_imager   )r4   rT   r  r  r;   r   
file_titlefile_title_sub	open_time	aa_vinfo4c                 8    |                      d          d         S )Nr   r   r  r  s    r/   rI   z0NhkRadiruIE._extract_news_info.<locals>.<lambda>  s    aggcll1o r1   )r8   r=   rX   rM   )r   rh   rl   rc   r   re   r   )r*   headliner  r  ro   r<   s         r/   _extract_news_infozNhkRadiruIE._extract_news_info  s   $@@x'>@@
x+q4&)ABB

11'++k2J2JJ^c1dd#!oog..$X\\2B%C%CDDdXcHdHd
 
 
 7&. 03%8),=+>?&14M4M3NQbPc%d	% %  
 	
r1   c                     | j         rd S |                     dd dd          t          fd          t          _         d S )N1https://www.nhk.or.jp/radio/config/config_web.xmlzDownloading API configFr  c                  >    d                      d          j         S )Nhttps:z.//url_program_detail)findtext)
api_configs   r/   rI   z.NhkRadiruIE._real_initialize.<locals>.<lambda>  s     5mjooNe>f>f>k5m5m r1   )r  _download_xmlr   r0  )r*   r  s    @r/   _real_initializezNhkRadiruIE._real_initialize  sZ     	F''?G_gl ( n n
$,-m-m-m-m$n$n!!!r1   c                     	
                       |                              ddd          \  }}	| d| |dk    rΉ                     d          d         
t          
dt          hfd	t          hfd	t          hfd
t
          hfdd          	rEt          
d	fdt          f          }|st          dd                               |          S 
 fd}  j	         |            fd

                    d          iS                      d||d          
t          dt          
dt          hf          d          }t          ddd
          t          
d t
          hf          ||d!	rEt          
d"	fd#t          f          }|st          dd                               |          S 
 fd$}  j	         |            f
                    d%          

                    d&          d'S )(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)r8   r4  r3  r   F)get_alldetail_listc                     |d         k    S )Nr  rF   r   rH   r  s     r/   rI   z+NhkRadiruIE._real_extract.<locals>.<lambda>  s    q7G;7V r1   z-Content not found; it has most likely expiredTrR   c               3   v   K   t          ddt          hf          D ]}                     |           V  d S )Nr  .)r   rh   r  )r  metar  r*   r  s    r/   news_entriesz/NhkRadiruIE._real_extract.<locals>.news_entries  sX       ,TM33O P P W WH11(L+VVVVVVW Wr1   r=   site_detailz:https://www.nhk.or.jp/radio-api/app/v1/web/ondemand/series)site_idcorner_site_id)queryNHKradio_broadcastr   rE  r8   corner_namerj  thumbnail_url)r;   r6  r   r4  r3  r   c                 6    |d         t                    k    S )Nr4   )r\  r  s     r/   rI   z+NhkRadiruIE._real_extract.<locals>.<lambda>-  s    1T7cR]N^N^C^ r1   c               3   v   K   t          ddt          hf          D ]}                     |           V  d S )Nr   .)r   rh   rw   )r<   r  r  r*   r  s    r/   r   z*NhkRadiruIE._real_extract.<locals>.entries2  sX      'z3.GHH U U00,TTTTTTU Ur1   r;   series_description)r8   r=   )ra   rb   r'   r   re   r   rd   r   r  r   rc   r   rw   )r*   rE   r  	corner_idr  r  fallback_stationr<   r   r  r  r  r  s   `        @@@@r/   r   zNhkRadiruIE._real_extract  s6   *.*?*?*D*D*J*J6S[]g*h*h'K!//I// l""&&OQ]_ __egD&t(3%0(3%0)C51<{mL	. .
   K  T'=*V*V*V*VX[\^ ^ i()Xcghhhh..x{SSSW W W W W W W W (4'b b:>((=:Q:QbU`b b b ""H,""+_ _ #   )TDUX[W\C]0^0^fijjj#G]#QUVVV%%d_{m,LMM'(
 
  	R"4*6^6^6^6^`c)deeG e$%T_cdddd--g|[QQQ	U 	U 	U 	U 	U 	U 	U 	U $t#GII|G+6??8+D+D!566G G:EG G 	Gr1   )Nr|  )ry   rz   r{   _GEO_COUNTRIESr   r   r   r  rP  rW  rb  rq  r{  r  r  rw   r  r  r   rF   r1   r/   r0  r0    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 1 1f
 
 
(
 
 
(o o o9G 9G 9G 9G 9Gr1   r0  c            	       4    e Zd ZdZddddddddd	d
gZd ZdS )NhkRadioNewsPageIEz/https?://www\.nhk\.or\.jp/radionews/?(?:$|[?#])z https://www.nhk.or.jp/radionews/   18439M2W42_01r=  z$md5:bf2c5b397e44bc7eb26de98d8f15d79dr<  r>  )r4   r   r=   r4  r3  r8   )rE   r   r   c                 8    |                      dt                    S )Nz@https://www.nhk.or.jp/radio/ondemand/detail.html?p=18439M2W42_01)r(  r0  r   s     r/   r   z NhkRadioNewsPageIE._real_extractK  s    acnooor1   Nr   rF   r1   r/   r  r  ;  sb        CJ 2!kA)*/
 
	  Fp p p p pr1   r  c                       e Zd ZdgZdZddddddd	gd
ddddddgiiiddddddgd
ddddddgiiiddddddgd
dgZddddZd  Zd!S )"NhkRadiruLiveIEr1  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・東京.+$rY   zChttps://www.nhk.jp/assets/images/broadcastservice/bs/r1/r1-logo.svgis_liveznhkradirulive r1-tokyo)r4   r8   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)rE   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                    |                      |          }|                     ddg          d         }|                     d|d          }|                    d| d          }|sTt	          d                    d	                    d
 |                    d          D                                 d          |                     d|                    d          j	                             |                    d          j	                  |d| dd          }t          || j                            |          df          }i t          |dt          hfdt          hfd          t          | t          ||                    gt          |ddddt           hfdt           hfdf          |                     |                    | d           j	        |          dd!S )"Nr  tokyor   r  zDownloading area informationz.//data//area[.="z"]/..z!Invalid area. Valid areas are: {}z, c                     g | ]	}|j         
S rF   )r  )r   rN  s     r/   r   z1NhkRadiruLiveIE._real_extract.<locals>.<listcomp>  s    AAAAAAAr1   z.//data//areaTrR   r  z.//url_program_noaareakey)r  zDownloading z station metadataF)noter^   r  r  r4   )r8   r4   logo.rE   rJ   rK   rL   r[   )r  rN   rT   r  )r  _configuration_argr  r  r   r)   r   findallr'   r  r   _NOA_STATION_IDSrc   re   r   r   r
   rl   )r*   rE   r  r  configr  noa_infobroadcast_services           r/   r   zNhkRadiruLiveIE._real_extractz  s?   ..%%&&vy99!<##?Jhj j{{:t:::;; 	T !D!K!KDIIAA!@!@AAAMC MC "D "DNRT T T T &&=V[[!566;==DD$))T]J^J^JcDdd@@@@ ' O O )D4I4M4Mg4V4VXe3fgg
,03%8cUm/ /  

 "1}Wd7S7S!T!T U&'863!K=1#k]3I I ;  
 11$))wOOO2L2L2QSZ[[
 
 
 	
r1   N)ry   rz   r{   r  r   r   r  r   rF   r1   r/   r  r  O  s        VNPJ ;7^$!9 :
 
  ;#o7L%MN.^$!; <
 
  ;#o7L%MN-^$!; <
 
	 1$FL #$d;;
 
 
 
 
r1   r  )r   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r`   r   r   r   r#  r0  r  r  rF   r1   r/   <module>r     s   				 ! ! ! ! ! !                                     *[ [ [ [ [ [ [ [|Y/ Y/ Y/ Y/ Y/y Y/ Y/ Y/xOu Ou Ou Ou Oui Ou Ou Oud?
 ?
 ?
 ?
 ?
M ?
 ?
 ?
D%0 %0 %0 %0 %0M %0 %0 %0PN N N N N N N NDGG GG GG GG GG- GG GG GGT
p p p p p p p p(I
 I
 I
 I
 I
m I
 I
 I
 I
 I
r1   