
    ukiB                     *   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y)    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y)	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                  | j                  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
             O/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/yt_dlp/extractor/nhk.py	_call_apizNhkBaseIE._call_api   s}    $,'")wz^,Al^<J"IJ$I"""")).Ij * 2 $%	' 	'    Nc                    |d u }t         j                  |      j                  ddd      \  }}}|dk7  }|r| j                  |||d|d d dk(        }t	        dd|	      }|j                  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         j                         t         j                  d}t        |dt        ht        f      xs i }|j                  d      s| j                  dd       |S |d   }|rH| j!                  ||      \  }}|j#                  ||dt        |d t        hfd!t        hfd"             |S t%        |d#      }| j'                  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-   s   4#+#<#<S#A#G#GPVX\#] fjW$nnD(tZPRQR^W]E] % _G !vAG$g(JCQX'YZehc%)EEEFLL #	

 7 -u5&<?P>Q%R+S&3%@fse4')>!GCL>2%}5'+7A 
 !&~6% 
" &__.!))%
, #7-?$,MNTRTu%!!"P[_!`. + %U+J%)%M%MjZb%c"&!* #;%/+$?&47H6I%J2  $  (
F;
"&"<"<:JGHTm! #= #0Y i )A$(AjM) r1   N)__name__
__module____qualname__r(   _BASE_URL_REGEXr0   rw   rF   r1   r/   r   r      s    tPO' 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yi)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                 $    | j                  |      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>   %%&&fg%%&&jk%%&&XYJ CeA1O-'.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#%!+&
& LY+mA#%1,o>
" LI2102DE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                 P    t         j                  |      rdS t        |   |      S )NF)r`   suitablesuper)clsrE   	__class__s     r/   r   zNhkVodProgramIE.suitableD  s%     ))#.uIEG4DS4IIr1   c                 H    |D ]  }t        t        ||            x}s|c S  y rx   )r   r	   )r*   class_valueshtmlclass_valuevalues        r/   !_extract_meta_from_class_elementsz1NhkVodProgramIE._extract_meta_from_class_elementsH  s.    ' 	K"#7T#JKKuK	r1   c                 F   
  j                        j                  dddd      \  }}}} j                  |||dk7  d|dk(        

 fd} j                  |      } j	                  g d	|      } j	                  g d
|      }	 j                   |       |||	|      S )Nr"   r3   r4   episode_typer   Fclipc               3   x   K   t        dd f      D ]#  } j                  t        | d         |        % y w)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  sC     '7<Q2RS X00gen1MwWWXs   7:)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    151F1Fs1K1Q1QRXZ`bfhv1w.fj,>>f/8NP	X %%c:6>> @  $	%
 #DD F% '+	, ##GIz=J]fs#ttr1   )ry   rz   r{   r   r|   r   r   classmethodr   r   r   __classcell__)r   s   @r/   r   r     s    			"	"# $JMJ @,A-	
 
 H ,A-	
  	 R ,A-	
  
 X!&A'	
  
 PO*FX J J
ur1   r   c            	       8    e Zd ZdZdddddddd	d
ddidgZd Zy)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                    | j                  |      j                         \  }}| j                  d| d| |      }t        j                  d|      D ci c]#  }|j                  d      |j                  d      % }}t        j                  d|      D ci c]#  }|j                  d      |j                  d      % }}t        j                  d|      D cg c]  }t        |j                  d             }}t        j                  d	|      D cg c]N  }d
j                  |j                  d      xs dt        |j                  d            g      j                         P }	}|j                  d      xs |j                  d      }
|
r|j                  d      d    d|
 }| j                  d|dd  d| d|dd      }t        |j                  d            }d }|rL|	rJt        |      t        |	      k(  r3|}g |dd  |}t        |||	d      D cg c]  \  }}}|||d }}}}||j                  d      t        |j                  d            t        |d         ||dS c c}w c c}w c c}w c c}w c c}}}w )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versionr   r   z#https://nhks-vh.akamaihd.net/i/das/   r   z_V_000.f4v/master.m3u8r~   r[   )r   r]   
r_durationT)strict)
start_timeend_timer8   r@   r_upload)r4   r8   rV   rX   rT   r   )ra   groupsr   refinditerrb   r   joinr   striprc   splitrl   lenzipr   )r*   rE   program_typerp   webpagegbase_valuesprogram_valueschapter_durationschapter_titlesr   rT   rV   r   r   r   sets                      r/   r   z#NhkForSchoolBangumiIE._real_extractz  s   !%!6!6s!;!B!B!Dh((2<.XJWYac 8:{{Cjls7tu!qwwqz1771:-uu:<++  GD  FM  ;N  OQ!''!*aggaj0  O  OACMtv}A~A^AGGAJ7bdbmbm  op  ry  cz  {]^#((AGGAJ$4"l1771:6N#OPVVX  {  { //+.O.2D2DY2O"..-a017)<H,,1(1Q-(Kab% - 0 "+//,"?@C8I4JcR`Na4a*J9*12.99H
 !X~dS	U U !Q   UH U #''/&{|'DE*;z+BC 
 	
9 v O {"Us   (I+(I0!I5AI:I?Nry   rz   r{   r   r   r   rF   r1   r/   r   r   e  sA    vJY%*#%"

 T
 F&*
r1   r   c                       e Zd ZdZdZdj                  dj                  d eD                    Zdddd	d
ddddd	ddgZd Z	y)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              #   F   K   | ]  }t        j                  |        y wrx   r   escape.0r   s     r/   	<genexpr>zNhkForSchoolSubjectIE.<genexpr>  s     6!16   !z$https://www.nhk.or.jp/school/sougou/r  u   総合的な学習の時間r4   r8      r   z"https://www.nhk.or.jp/school/rika/r   u   理科   c           
          | j                        }| j                  |      }| j                  t        j                  dt        j
                  |       d|      || j                  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                 :    t        | j                  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))KKHS]I^H__hikrs##$ikrt{  DI#  J.	0 	0r1   N)
ry   rz   r{   IE_DESCKNOWN_SUBJECTSr)   r   r   r   r   rF   r1   r/   r   r     sv     AGN OUU6~668J 62
   4
  F 0r1   r   c                       e Zd Zdj                  dj	                  d ej                  D                    Zdddddd	gZd
 Z	y)NhkForSchoolProgramListIEz>https?://www\.nhk\.or\.jp/school/(?P<id>(?:{})/[a-zA-Z0-9_-]+)r  c              #   F   K   | ]  }t        j                  |        y wrx   r  r
  s     r/   r  z#NhkForSchoolProgramListIE.<genexpr>  s     L!1Lr  z&https://www.nhk.or.jp/school/sougou/q/zsougou/qu!   Ｑ～こどものための哲学r     r   c                    | j                  |      }| j                  d| d|      }| j                  d|      xs | j                  d|dd      }|rt	        j
                  dd|      nd }| j                  d	|d
dd      }| j                  d| d|      }t        |d      xs g D cg c]  }| j                  d|        }}| j                  ||||      S c c}w )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.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*   rE   r   r   r8   r=   bangumi_listxbangumiss	            r/   r   z'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Z OOUVWUXYZZ Z ##Hj%MM	Zs   *CN)
ry   rz   r{   r)   r   r   r  r   r   r   rF   r1   r/   r  r    sS    RYYL'<'K'KLLNJ 88
   FNr1   r  c                   L   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dXdRZdS ZdT ZdU ZdV ZdW ZyL)Y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   r-  r*  r+  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   r*  r+  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=   r*  r+  r   r;   r-  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 ]0  }|j                  d      }||vrg ||<   ||   j                  |       2 g }|j	                         D ]n  \  }}t        |      D ][  \  }}|dk(  r|d| dnd}|j                  d      x}	r||	 dz  }|j                  t        ||j                  d	      d
             ] p t        |ddiS )N.roler   u   【u   】r!   r8   u   …r@   delimr=  u   ，)r   rh   rc   appendr   	enumerater   )
r*   act_listrole_groupsactr;  formatted_rolesactsiresr8   s
             r/   _format_act_listzNhkRadiruIE._format_act_listF  s   3-8 	*C776?D;&$&D!$$S)		* %++- 	VJD$#D/ V3)*aD4DD6o"GGG,,5,eWC=(C&&}S#''&/QS'TU	V	V o;U;;r1   c           
         g }t        ||dt        hf      D ]_  }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}sO|j                  |       a d	j                  |      xs d S )
N.r;  u   {}…r  u   （{}）r@   r=  r!   u   、)r   rh   r   filterr)   re   r>  r   )r*   trackkeyartistsartistrF  s         r/   _make_artistszNhkRadiruIE._make_artistsW  s    "53dV*<= 	$F#\&'..!12*"3"3!45 < u	; & " !	" "s "
 s#	$ zz'"*d*r1   c                     t        ||t        hf      }|y t        |d      \  }}t        |d      \  }}d}|dkD  r|t        |       dz  }|dkD  r|t        |       dz  }|t        |      ddz  }|S )	Ni  <   u   （r   u   時間u   分02u   秒）)r   r   divmodint)	r*   rJ  rK  dhours	remainderminutessecondsrF  s	            r/   _make_durationzNhkRadiruIE._make_durationc  s    ~&6 789!!T?y!)R019c%j\((CQ;c'l^3''C#g,r"&))
r1   c           
      r   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      }|j                  | j                  |d
             |j                  | j                  |d             t        ddd|      x}r|j                  d| d       t        |dt        hf      x}r|j                  d| d       |j                  t        |ddi        dj                  |      S )N.r@   u   「{}」lyricistu	   {}:作詞composeru	   {}:作曲arrangeru	   {}:編曲byArtistrV   labelcoder   r=  r7   u   ＜u   ＞locationu   ～r=  


)
r   rh   rI  r)   re   r>  rN  rY  r   r   )r*   
music_listtracksrJ  track_detailsr_  rb  s          r/   _format_music_listzNhkRadiruIE._format_music_listq  sJ   !*sTFm< 	E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	E  {{6""r1   c           
          t        |dt        hf      xs i }t        t        ddd|      t        |dd| j                  hf      t        |dd| j                  hf      d	      S )
NdetailedDescriptionepg80epg200rd  ra  miscactList	musicListr<  )r   rh   r   rG  rh  )r*   responsedetailed_descriptions      r/   _format_descriptionzNhkRadiruIE._format_description  sp    +H7Ltf6UV\Z\'86EYZFI8M8M7N#OPFK$:Q:Q9R#ST	 	r1   c                 N   g }t        |g t        |t        t        t        t
        f      t        j                  hd       D ]^  \  }}|j                  |d   t        |j                  d            t        |j                  d            |t        ||      d       |dz  }` |S )Nc                 8    |d   dk7  xr t        |d   d         S )Nr   	copyrightr   rE   )r   rG   s     r/   rI   z-NhkRadiruIE._get_thumbnails.<locals>.<lambda>  s!    1,IQqT%[1I r1   rE   rJ   rK   )rE   rJ   rK   
preferencer4   r   )r   r   re   bytesrh   setr   r>  r
   rc   r   )r*   datakeysr@   rv  rN   sizethumbs           r/   _get_thumbnailszNhkRadiruIE._get_thumbnails  s    
' /
dS%s34/
7;zzl/
I/
  	KD% U|$UYYw%78%eii&9:(#D$/  !OJ	 r1   c                     t        |dt        hd hf      \  }|d   t         fd      }|si S  j                  ||dddd	      }|si S t        |d
t        hf      x}r# j                  dt        dd|d              i S t        |ddt        hf      }g }|j                   j                  |d             t        t        |d            D ]2  \  }	}
|j                   j                  |
d t        d|	      d             4 |j                   j                  |ddd             t         j                  |      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                 ,    | xs dj                  d      S )Nr!   ,	partitionr$  s    r/   rI   z8NhkRadiruIE._extract_extended_metadata.<locals>.<lambda>  s    bH[H[\_H` r1   r   c                  R    j                   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-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   r=  publishedOnbroadcastDisplayName)abouteyecatch)r  eyecatchList.list)r  partOfSeriesr  r;   rm  rn  .r@   )r=   r,  rN   endDate	startDaterV   )r8   rX   rM   rV   identifierGroupradioSeriesNameradioSeriesIdradioEpisodeNameradioEpisodeIdgenrename1name2)r;   r-  r<   ro   r?   )r+  r*  )r   re   r   r'   rh   report_warningr   extendr}  r?  r   rr  r   r   allr   )r*   ro   aa_vinfor   
detail_urlrp  r  stationrN   numdctr  r  r  s   `          @@@r/   _extract_extended_metadataz&NhkRadiruIE._extract_extended_metadata  sQ   '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Y 	_HCd223mFTW>XZ\]^	_  +PRZ\^_	a 33H= FIsFSE+RS$
 8 3%'*;)<=&14E3F%G'.)9:	& 	
 8&7,se4-u5.6/#7&gw-?#j\Z: & 
" %
  	r1   c                 R   | d|d    }t        |dd hf      }| j                  ||      }t        |dt        hd hf      \  }}}	i ||| j                  |j	                  d      |d	      d
d|j	                  d      |j	                  d      t        |	      t        |      d|S )Nr   r4   aa_contents_idc                 $    | j                  d      S )N;r   r  s    r/   rI   z3NhkRadiruIE._extract_episode_info.<locals>.<lambda>  s    qwws| r1   r5   c                 ,    | xs dj                  d      S )Nr!   r   r  r  s    r/   rI   z3NhkRadiruIE._extract_episode_info.<locals>.<lambda>  s    QW",?,?,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    $~Qwt}o6
*:=S<T)UV ;;JQ4@q3%"D!EF5H1Q 1

11'++l2KZ_d1e#[[1";;':;*+<=!23F!G
  
 	
r1   c                 n   | d|d    }t        |ddt        hf      }i ||| j                  |j                  d      |d      dd	|j                  d
      t	        |j                  d            xs |j                  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                 *    | j                  d      d   S )Nr   r   r  r  s    r/   rI   z0NhkRadiruIE._extract_news_info.<locals>.<lambda>  s    aggcl1o 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    $~Qx'>&?@
x+q4&)AB

11'++k2JJ^c1d#!oog.$X\\2B%CDdXcHd
 7&. 03%8),=+>?&14M3NQbPc%d	% 
 	
r1   c                 x    | j                   ry | j                  dd dd      t        fd      t        _         y )N1https://www.nhk.or.jp/radio/config/config_web.xmlzDownloading API configFr  c                  @    d j                  d      j                   S )Nhttps:z.//url_program_detail)findtext)
api_configs   r/   rI   z.NhkRadiruIE._real_initialize.<locals>.<lambda>  s    vjooNe>f>k>k=l5m r1   )r  _download_xmlr   r'  )r*   r  s    @r/   _real_initializezNhkRadiruIE._real_initialize  s>    ''?G_gl ( n
$,-m$n!r1   c                    	
  j                  |      j                  ddd      \  }}	| d| |dk(  r j                  d      d   
t        
dt        hfd	t        hfd	t        hfd
t
        hfdd      	r8t        
d	fdt        f      }|st        dd       j                  |      S 
 fd}  j                   |       fd
j                  d      iS  j                  d||d      
t        dt        
dt        hf      d      }t        ddd
      t        
d t
        hf      ||d!	r8t        
d"	fd#t        f      }|st        dd       j                  |      S 
 fd$}  j                   |       fj                  d%      
j                  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   r+  r*  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   j   K   t        ddt        hf      D ]  } j                  |         y w)Nr  .)r   rh   r  )r  metar  r*   r  s    r/   news_entriesz/NhkRadiruIE._real_extract.<locals>.news_entries  s=      ,TM33O P WH11(L+VVW   03r=   site_detailz:https://www.nhk.or.jp/radio-api/app/v1/web/ondemand/series)site_idcorner_site_id)queryNHKradio_broadcastr   r<  r8   corner_namera  thumbnail_url)r;   r-  r   r+  r*  r   c                 &    |d   t              k(  S )Nr4   )rS  r  s     r/   rI   z+NhkRadiruIE._real_extract.<locals>.<lambda>-  s    1T7cR]N^C^ r1   c               3   j   K   t        ddt        hf      D ]  } j                  |         y w)Nr   .)r   rh   rw   )r<   r  r  r*   r  s    r/   r   z*NhkRadiruIE._real_extract.<locals>.entries2  s=     'z3.GH U00,TTUr  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  s3   *.*?*?*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 (4''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 $t##I|G+6??8+D!56G:EG 	Gr1   )N)ry   rz   r{   _GEO_COUNTRIESr  r   r   r  rG  rN  rY  rh  rr  r}  r  rw   r  r  r   rF   r1   r/   r'  r'    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r1   r'  c            	       2    e Zd ZdZddddddddd	d
gZd Zy)NhkRadioNewsPageIEz/https?://www\.nhk\.or\.jp/radionews/?(?:$|[?#])z https://www.nhk.or.jp/radionews/   18439M2W42_01r4  z$md5:bf2c5b397e44bc7eb26de98d8f15d79dr3  r5  )r4   r   r=   r+  r*  r8   )rE   r   r   c                 .    | j                  dt              S )Nz@https://www.nhk.or.jp/radio/ondemand/detail.html?p=18439M2W42_01)r"  r'  r   s     r/   r   z NhkRadioNewsPageIE._real_extractK  s    acnoor1   Nr   rF   r1   r/   r  r  ;  s8    CJ 2!kA)*/
	 F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y!)"NhkRadiruLiveIEr(  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                 h   | j                  |      }| j                  ddg      d   }| j                  d|d      }|j                  d| d      }|sRt	        dj                  d	j                  |j                  d
      D cg c]  }|j                   c}            d      | j                  d|j                  d      j                   j                  |j                  d      j                        |d| dd      }t        || j                  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      | j#                  |j                  | d      j                  |      dd S c c}w )!Nr  tokyor   r  zDownloading area informationz.//data//area[.="z"]/..z!Invalid area. Valid areas are: {}z, 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  configry  rE  noa_infobroadcast_services	            r/   r   zNhkRadiruLiveIE._real_extractz  s   ..%&&vy9!<##?Jhj{{.tfE:; !D!K!KDII!'!@AAAMC "DNRT T &&V[[!56;;<=DD$))T]J^JcJcDdL.?@ ' O )D4I4I4M4Mg4VXe3fg
,03%8cUm/ 

 "1}Wd7S!T U&'863!K=1#k]3I ; 
 11$))wisO2L2Q2QSZ[
 	
 Bs    F/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  r'  r  r  rF   r1   r/   <module>r     s    	 !    *[ [|Y/y Y/xOui Oud?
M ?
D%0M %0PN NDGG- GGT
p p(I
m I
r1   