
    VGh<                        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  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parse_duration
remove_endtraverse_objtry_callunescapeHTMLunified_timestampurl_or_noneurljoinc                   0    e Zd ZdZdZd ZddZd Zd	dZy)
	NhkBaseIEz@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           	          | j                  | j                  |rdnd|rdnd|rdnd|||rdndfz  |d	d
i      d   d   xs g S )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         ]/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/nhk.py	_call_apizNhkBaseIE._call_api   s    """"S!u'	YdhFB	&8 8
 #EF # H IOP Q[\ b `b	b    c                 0   |s| j                   j                  dd      S | j                   j                  ddi        | j                  dd d      }| j	                  d|d d      | j	                  d|d d	      d
}| j                   j                  dd|       |S )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_jsr1   s       r,   _get_api_infozNhkBaseIE._get_api_info#   s    ::??5*55

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


H5r.   c                    dD ]  }| j                  |      }|s|j                  d      }t        | j                  ||ddi |d|dd      d	      }t        |d
dt        hfd      }|si| j                  ||      \  }}i t        |dt        hfdt        hfdt        hfdt        hfd      ||dc S  t        d      )N)FTr3   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)rJ   	timestamprelease_timestampmodified_timestamp)formats	subtitleszUnable to extract stream url)	r<   popr   r$   r   #_extract_m3u8_formats_and_subtitlesr
   r   r   )	r&   vod_idr:   r1   api_urlrC   
stream_urlrQ   rR   s	            r,   _extract_stream_infozNhkBaseIE._extract_stream_info4   s"   $ 	G))'2Hll5)G##V%B% X"X &'-&'	X $  $%D &{$E}U_dfJ %)%M%MjZ`%a"	"4%/+$?&8;L:M%N.;>O=P-Q/<?P>Q.R	* 	  '!*	 	'	: ;<<r.   Nc           	         d u }t         j                  |      j                  ddd      \  }}}|dk7  }|r|d d dz   |dd  z   }|r| j                  |||d|d d dk(        d	   fd
} |d      }	 |d      }
g }dD ]9  \  }}}j	                  d|z         }|s|j                  | d||d|z   d       ; |	}|
r
|	r|
 d|	 }	n|
r	|	s|
}	d }
d }nd }|dz   |z   |	 |d      ||
|d}|r-d   }|j                  i | j                  |      d|i       |S |rJt        d   d   d      }| j                  t        d|       d|dddd      |d<   |d   D ]  }||d<   	 |S |j                  d t         j                         |d!       |S )"Nr(   r?   idaudio   -T9999r   c                 d    t        j                  | dz         xs j                  |             S )N_clean)r   get)keyr   s    r,   get_clean_fieldz8NhkBaseIE._extract_episode_info.<locals>.get_clean_field`   s)    gkk#.9MW[[=MNNr.   	sub_titletitle))r   i  ih  )_li   i  imagepzhttps://www3.nhk.or.jp)rZ   heightwidthr3   z - description)rZ   re   rk   
thumbnailsseriesr   rU   z.m4azhttps://vod-stream.nhk.jpz/index.m3u8m4am3u8_nativehlsF)entry_protocolm3u8_idrB   rQ   languageurl_transparent)_typeie_keyr3   )NhkVodIE_match_valid_urlgroupr-   ra   appendupdaterX   r   _extract_m3u8_formatsr   rv   )r&   r3   r   fetch_episoder(   m_type
episode_idr)   rc   re   rm   rl   swhimg_pathepisode_nameinforU   
audio_pathfs     `                  r,   _extract_episode_infozNhkBaseIE._extract_episode_infoT   sJ   4#+#<#<S#A#G#GPVX\#] fjW$#BQ#-
12>JnnD(D*Ra.F2JLLMOG	O  , )
: 		GAq!{{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/ 
 r.   )TN)	__name__
__module____qualname__r%   _BASE_URL_REGEXr-   r<   rX   r    r.   r,   r   r      s$    ZPOb"=@Hr.   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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d+d,d-d.d,d-d/d,d-d0d,d-d1d2dd3d4d5d6d7d8d9d:d;d<dd=d>d?d	d@dAdBd:dCdDddEdFd	ddGdHdIdJdddKdLdMddNdOddPdQddRdSdTdUdVddWd	dXdYddZd[dd\d]d^d_d`dad	dbdcddddddedfddgdhdidjd	dkdldmdndmdodmdpddqdrddsdtdudvd	dwdxdyddzddd{dd|d,d-d}d,d-gZd~ Zy)rw   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)rZ   extre   rk   	thumbnailr   rm   rP   rN   rO   rJ   upload_datemodified_daterelease_dater3   	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])rZ   r   re   rk   r   rm   r   rJ   r   r   rO   rP   r   rN   )r3   md5r   zKhttps://www3.nhk.or.jp/nhkworld/en/ondemand/audio/livinginjapan-20231001-1/zlivinginjapan-20231001-1-enrn   zFLiving in Japan - Tips for Travelers to Japan / Ramen Vending MachinesLiving in Japanz$md5:0a0e2077d8f07a03071e990a6f51bfabz4Tips for Travelers to Japan / Ramen Vending Machines)rZ   r   re   rm   rk   r   r   z:https://www3.nhk.or.jp/nhkworld/en/ondemand/video/2015173/Tr3   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`)rZ   r   re   rk   r   r   rN   z404 Not Found)r3   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)rZ   r   re   rm   r   r   rk   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)rZ   r   re   rk   r   r   rN   rJ   rO   r   rP   r   r   rm   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)rZ   r   r   rm   r   re   rk   rN   rJ   r   rP   r   r   rO   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   )rZ   r   re   rk   rO   r   r   rN   r   rJ   rm   r   rP   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)rZ   r   re   rk   r   rm   r   rJ   rN   r   rO   r   rP   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)rZ   r   re   rk   r   rm   r   rJ   r   rN   r   rO   r   rP   zHhttps://www3.nhk.or.jp/nhkworld/en/shows/audio/livinginjapan-20231001-1/z1https://www3.nhk.or.jp/nhkworld/en/shows/9999o80/c                 $    | j                  |      S r   )r   r&   r3   s     r,   _real_extractzNhkVodIE._real_extracte  s    ))#..r.   N)r   r   r   r   r   
_VALID_URL_TESTSr   r   r.   r,   rw   rw      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|/r.   rw   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	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)rZ   re   rk   r   r3   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                 P    t         j                  |      rdS t        |   |      S )NF)rw   suitablesuper)clsr3   	__class__s     r,   r   zNhkVodProgramIE.suitable  s%     ))#.uIEG4DS4IIr.   c                 H    |D ]  }t        t        ||            x}s|c S  y r   )r   r	   )r&   class_valueshtmlclass_valuevalues        r,   !_extract_meta_from_class_elementsz1NhkVodProgramIE._extract_meta_from_class_elements  s.    ' 	K"#7T#JKKuK	r.   c                 B   
  j                        j                  dddd      \  }}}} j                  |||dk7  d|dk(        

 fd} j                  |      } j	                  g d	|      } j	                  g d
|      }	 j                   |       |||	      S )Nr(   r?   rZ   episode_typer[   Fr   c               3      K   D ]4  } | j                  d      x}sj                  t        |      |        6 y w)Nr3   )ra   r   r   )r   episode_pathr#   r&   r3   s     r,   entriesz.NhkVodProgramIE._real_extract.<locals>.entries  sG     # Z#*;;u#55<544WS,5OQXYYZs   >!>)zp-programDetail__titlepProgramHero__logoTexttAudioProgramMain__titlezp-program-name)zp-programDetail__textpProgramHero__descriptiontAudioProgramMain__infozp-program-description)rx   ry   r-   r8   r   playlist_result)r&   r3   r(   r~   
program_idr   r   r   program_titleprogram_descriptionr#   s   ``        @r,   r   zNhkVodProgramIE._real_extract  s    151F1Fs1K1Q1QRXZ`bfhv1w.fj,>>f/8NP	Z
 %%c:6>> @  $	%
 #DD F% '+	, ##GIz=J]^^r.   )r   r   r   r   r   r   r   classmethodr   r   r   __classcell__)r   s   @r,   r   r   i  s    			"	"# $JMJ @,A

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

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

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

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

  	 PY/Fb J J
_r.   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)rZ   re   rJ   rN   r   r   chaptersskip_downloadT)r3   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 }|rJ|	rHt        |      t        |	      k(  r1|}|dd  |gz   }t        |||	      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version_r   z#https://nhks-vh.akamaihd.net/i/das/   /z_V_000.f4v/master.m3u8r   rp   )r   rr   
r_duration)
start_timeend_timere   namer_upload)rZ   re   rJ   rN   rQ   r   )rx   groupsr8   refinditerry   r   joinr   stripra   splitr|   lenzipr   )r&   r3   program_typevideo_idwebpagegbase_valuesprogram_valueschapter_durationschapter_titlesr   rQ   rJ   r   r   r   r   ets                      r,   r   z#NhkForSchoolBangumiIE._real_extract  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(,z9H
 !X~F	H H !Q   HH H #''/&{|'DE*;z+BC 
 	
9 v O {"Hs   (I)(I.!I3AI8I=Nr   r   r   r   r   r   r   r.   r,   r   r     sA    vJY%*#%"

 T
 F&*
r.   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r   r   escape.0r   s     r,   	<genexpr>zNhkForSchoolSubjectIE.<genexpr>  s     6!16   !z$https://www.nhk.or.jp/school/sougou/r  u   総合的な学習の時間rZ   re      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>re   FrB   c                 :    t        | j                  d            S )Nr   )r   ry   )r   r3   s    r,   <lambda>z5NhkForSchoolSubjectIE._real_extract.<locals>.<lambda>(  s    gc1771:. r.   )	_match_idr8   playlist_from_matchesr   r   r  _html_search_regex)r&   r3   
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 	0r.   N)
r   r   r   IE_DESCKNOWN_SUBJECTSformatr   r   r   r   r   r.   r,   r  r    sv     AGN OUU6~668J 62
   4
  F 0r.   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r   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   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>re   Fr#  z\s*\|\s*NHK\s+for\s+School\s*$z3(?s)<div\s+class="programDetail\s*">\s*<p>[^<]+</p>rk   r   )rB   ry   z/meta/program.json)part.zpart-video-dasidz7https://www2.nhk.or.jp/school/movie/bangumi.cgi?das_id=)
r&  r8   _generic_titler(  r   subr$   r   
url_resultr   )	r&   r3   r   r   re   rk   bangumi_listxbangumiss	            r,   r   z'NhkForSchoolProgramListIE._real_extract7  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)
r   r   r   r,  r   r  r+  r   r   r   r   r.   r,   r.  r.  +  sS    RYYL'<'K'KLLNJ 88
   FNr.   r.  c                       e Zd ZdgZdZ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 d!d"d#d$d$d%d&d%d'd(d)d*gd+d,d-dd.d.d/d0d1d2d3d4d3d5d6d7d8d9d:dd;d;d<d=d>d?d@d>dAdBdCdDgdEgZdFZdG ZdH Z	dI Z
dJ ZdK ZyF)L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]+))?zBhttps://www.nhk.or.jp/radio/player/ondemand.html?p=0449_01_4003239zEpisode expired on 2024-06-09uZ   ジャズ・トゥナイト　ジャズ「Ｎｉｇｈｔ　ａｎｄ　Ｄａｙ」特集0449_01_4003239rn   u   NHK FM 東京z$md5:ad05f3c3f3f6e99b2e69f9b5e49551dcu   ジャズ・トゥナイトz+https://www.nhk.or.jp/prog/img/449/g449.jpg202406010449_01iE[fi`)[f)re   rZ   r   uploaderrk   rm   channelr   r   	series_idr   rN   rO   )r3   r   r   z:https://www.nhk.or.jp/radio/ondemand/detail.html?p=0458_010458_01u   ベストオブクラシックuZ   世界中の上質な演奏会をじっくり堪能する本格派クラシック番組。z+https://www.nhk.or.jp/prog/img/458/g458.jpgzNHK FM)rZ   re   rk   r   r@  r>  r?  rm   r   r   zBhttps://www.nhk.or.jp/radio/player/ondemand.html?p=F683_01_3910688zExpires on 2025-03-31F683_01_3910688u   夏目漱石「文鳥」第1回u:   【らじる文庫】夏目漱石「文鳥」（全4回）F683_01u$   朗読：浅井理アナウンサーzHhttps://www.nhk.or.jp/radioondemand/json/F683/img/roudoku_05_rod_640.jpg20240106zNHK R1i8ɘei̘e)rZ   r   re   rm   r@  rk   r   r   r   r>  rO   r?  rN   z Unable to download JSON metadatazIFailed to get extended metadata. API returned Error 1: Invalid parameters)r3   r2   r   expected_warningszBhttps://www.nhk.or.jp/radio/player/ondemand.html?p=F261_01_4012173F261_01_4012173   NHKラジオ第1   NHKラジオニュースu   午前０時のNHKニュースChttps://www.nhk.or.jp/radioondemand/json/F261/img/RADIONEWS_640.jpgip	kf20240613ikf)rZ   r   r?  r>  rm   re   r   rO   r   rN   r   r   zBhttps://www.nhk.or.jp/radio/player/ondemand.html?p=2834_01_4009298zExpires on 2024-06-072834_01_4009298u!   まち☆キラ！開成町特集20240531u   はま☆キラ！z-https://www.nhk.or.jp/prog/img/2834/g2834.jpgz	NHK R1,FMr   i:Yfi /Yf2834_01)rZ   re   r   r   r   rm   r   r?  rk   rN   r>  rO   r@  9Failed to get extended metadata. API returned empty list.)r3   r   r   rE  Nc                 F    t        dt        hd hf      \  }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      }|s j                  d       i S dj                  t        |ddt        hf            xs d }t        |dt        j                  hd f      D 	
cg c]W  \  }	}
t        |	      |	j                  d      rdn|	j                  d      rdnddt        |
ddt        hfdt        hfd       Y }}	}
t        ||t        d!d"d#d$d%|&      |d't        |d(t        hfd)t        hfd*t        hfd+            S c c}
}	w ),Nr   c                 ,    | xs dj                  d      S )Nr   ,	partitionr6  s    r,   r%  z8NhkRadiruIE._extract_extended_metadata.<locals>.<lambda>  s    bH[H[\_H` r.   c                  F    j                   j                   d         S )Nr   )areaservicedateid)_API_URL_TMPLr,  )aa_vinforV  r&   rW  s   r,   r%  z8NhkRadiruIE._extract_extended_metadata.<locals>.<lambda>  s&    D&&--4QYZ[Q\-] r.   zDownloading extended metadataz$Failed to download extended metadataFi  )rB   expected_statuserrorz4Failed to get extended metadata. API returned Error codemessagez: )	from_dictdelimlistr   rN  r   rW  rV  r   imagesc                     |d   d   S )Nr   r3   r   )r   r   s     r,   r%  z8NhkRadiruIE._extract_extended_metadata.<locals>.<lambda>  s    Z[\]Z^_dZe r.   r   r   logo)rZ   
preferencer3   rj   ri   r3   rj   ri   subtitlecontentactmusicz

r`  r_  )r?  r>  rk   rl   re   r   r   )re   rN   rO   )r   strr   r$   dictreport_warningr   r   items
startswithr
   r   r   )r&   r   rZ  r   
detail_urlresponser\  	full_metastationid_thumbrl   rV  rW  s   ` `         @@r,   _extract_extended_metadataz&NhkRadiruIE._extract_extended_metadata  s   '1se>`=a2bcD]_
I&&
$C2%QT ' V I GdV+<==5=&vyEQUVWYZ I FGQ+GH	 [\I((<	4GRUQV3WXYa]a )X

|Me4fgi c5 c("~~k:!cnnU[F\bd
 5!K=1#k]3# 
 i
 i (IugVyZ$
 9!C5)(+<*=>&25F4G%H' 
  	is   :AF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   rZ   aa_contents_idc                 $    | j                  d      S )N;r   rT  s    r,   r%  z3NhkRadiruIE._extract_episode_info.<locals>.<lambda>  s    qwws| r.   r\   c                 ,    | xs dj                  d      S )Nr   r   rR  rT  s    r,   r%  z3NhkRadiruIE._extract_episode_info.<locals>.<lambda>  s    QW",?,?,D r.   rW   Fr#  m4a_dashTr   program_sub_title)rZ   rQ   	containerwas_livere   rk   rN   rO   )r   rz  ro  r|   ra   r   )
r&   r   programme_idseries_metar   rZ  extended_metadatafallback_start_timer   fallback_end_times
             r,   r   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
  
 	
r.   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  Tre   headline_imager   )rZ   rQ   r  r  rm   r   
file_titlefile_title_sub	open_time	aa_vinfo4c                 *    | j                  d      d   S )Nr   r   r  rT  s    r,   r%  z0NhkRadiruIE._extract_news_info.<locals>.<lambda>  s    aggcl1o r.   )re   rk   rN   rO   )r   rp  r|   ra   r   ro  r   )r&   headliner  r  r   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	% 
 	
r.   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,   r%  z.NhkRadiruIE._real_initialize.<locals>.<lambda>  s    vjooNe>f>k>k=l5m r.   )rY  _download_xmlr   r9  )r&   r  s    @r,   _real_initializezNhkRadiruIE._real_initialize  s>    ''?G_gl ( n
$,-m$n!r.   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   F261z=https://www.nhk.or.jp/s-media/news/news-site/list/v1/all.jsonmainprogram_name
media_name)thumbnail_cthumbnail_p)re   r?  r>  r   FrH   detail_listc                     |d   k(  S )Nr  r   r   r   r  s     r,   r%  z+NhkRadiruIE._real_extract.<locals>.<lambda>  s    q7G;7V r.   z-Content not found; it has most likely expiredTexpectedc               3   j   K   t        ddt        hf      D ]  } j                  |         y w)Nr  .)r   rp  r  )r  rC   r  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rk   site_detailz:https://www.nhk.or.jp/radio-api/app/v1/web/ondemand/series)site_idcorner_site_idr    NHKradio_broadcastr   )r`  re   corner_namern  thumbnail_url)rm   r@  r   r?  r>  r#   c                 &    |d   t              k(  S )NrZ   )intr  s     r,   r%  z+NhkRadiruIE._real_extract.<locals>.<lambda>9  s    1T7cR]N^C^ r.   c               3   j   K   t        ddt        hf      D ]  } j                  |         y w)Nr#   .)r   rp  r   )r   rC   r  r&   r  s    r,   r   z*NhkRadiruIE._real_extract.<locals>.entries>  s=     'z3.GH U00,TTUr  rm   series_description)re   rk   )rx   ry   r$   r   ro  r   anyr   r  r   ra   r   r   )r&   r3   r  	corner_idr  r  fallback_stationr   r   r  rC   r  r  s   `        @@@@r,   r   zNhkRadiruIE._real_extract  s1   *.*?*?*D*J*J6S[]g*h'K!!I;/f&&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r.   )r   r   r   _GEO_COUNTRIESr*  r   r   rY  rz  r   r  r  r   r   r.   r,   r9  r9  M  sd   VN-G nJS/q#'A3&F%"&#!+
( L5wF" 6	
   T'#6R"Ac%& !+#
 Aik'. T#)*05^!+&#%
$ T'#8&%*H"##!+"
 ZZ'KYFv M.`
(
(o7Gr.   r9  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/   F261_01rI  z$md5:bf2c5b397e44bc7eb26de98d8f15d79drG  rH  )rZ   r   rk   r?  r>  re   )r3   r   r   c                 .    | j                  dt              S )Nz:https://www.nhk.or.jp/radio/ondemand/detail.html?p=F261_01)r4  r9  r   s     r,   r   z NhkRadioNewsPageIE._real_extractW  s    []hiir.   Nr  r   r.   r,   r  r  G  s8    CJ 2^A)*/
	 Fjr.   r  c            
           e Zd ZdgZdZddddddd	d
dddddgiiidddddd	ddddddgiiiddddd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r1-tokyou-   re:^ＮＨＫネットラジオ第1 東京.+$rn   z5https://www.nhk.or.jp/common/img/media/r1-200x200.pngis_live)rZ   re   r   r   live_statusr   z)https://www.nhk.or.jp/radio/player/?ch=r2extractor_argsnhkradiruliverV  fukuokaz
r2-fukuokau-   re:^ＮＨＫネットラジオ第2 福岡.+$z5https://www.nhk.or.jp/common/img/media/r2-200x200.png)r3   r   r   z)https://www.nhk.or.jp/radio/player/?ch=fmsapporoz
fm-sapporou/   re:^ＮＨＫネットラジオＦＭ 札幌.+$z5https://www.nhk.or.jp/common/img/media/fm-200x200.pngn1n2n3)r1r2fmc                 \   | 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        |d| j                  j                  |      df      }dj                  t        |ddt        hf            t        ||      t        |dddddt        hfdt        hfd f      | j!                  |j                  | d!      j                  |      dd"S c c}w )#NrV  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)rV  zDownloading z station metadataF)r2   rB   nowonair_listpresentr   rb  r   rW  rc  .r3   rj   ri   ri  rp   )re   rZ   rl   rQ   r  )r&  _configuration_argr  r  r   r,  r   findallr  r$   r   _NOA_STATION_IDSra   ro  r   r
   r|   )	r&   r3   rw  rV  configr"   inoa_infopresent_infos	            r,   r   zNhkRadiruLiveIE._real_extract  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 $H@U@U@Y@YZa@bdm.no XXl<:MvX[W\9]^_.&|i3!K=1#k]3Q 6 
 11$))wisO2L2Q2QSZ[

 
	
 Bs    F)N)r   r   r   r  r   r   r  r   r   r.   r,   r  r  [  s    VNPJ ;DP$

 ;#o7L%MNDP$
 ;#o7L%MNFP$
	-!FF #$d;
r.   r  )r   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   rw   r   r   r  r.  r9  r  r  r   r.   r,   <module>r     s    	 !   $F FRG/y G/TU_i U_p?
M ?
D%0M %0PN NDwG- wGtj j(C
m C
r.   