o
    iB                     @   s   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 deZG dd	 d	eZG d
d deZG dd deZG dd deZG dd deZG dd deZG dd deZG d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                   @   s&   e Zd ZdZdZdd Zd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           
   	   C   s^   |rdnd}|r
dnd}|sd| d| }d}	nd}|}	|  | jj|||	||d	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!    r,   H/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/nhk.py	_call_api   s   zNhkBaseIE._call_apiNc                 C   s  |d u }t |ddd\}}}|dk}|r'| j|||d|d d dkd}tdd|d	}|d
}	t|dtd
f}
|	}|
rI|	rI|
 d|	 }	n|
rT|	sT|
}	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 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pi }|ds| jddd |S |d }|r| ||\}}|||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 ]}||d-< q|S ).Nr   typeidr   T   9999)r)   r*   )	from_dicttitle)video_programaudio_programz - )r0   r4   seriesepisodedescriptionfirst_broadcasted_at
categories.nametagsimagesc                 S      |d S Nurlr,   r   vr,   r,   r-   <lambda>O       z1NhkBaseIE._extract_episode_info.<locals>.<lambda>rA   widthheightrA   rF   rG   )r9   release_timestampr;   r=   
thumbnailswebpage_url)extractor_key	extractor)r   r   z,Stream not found; it has most likely expiredexpected)formats	subtitlesdurationpublished_at)rR   	timestampz.m4azhttps://vod-stream.nhk.jpz/index.m3u8m4am3u8_nativehlsF)entry_protocolm3u8_idfatalrP   language)NhkVodIE_match_valid_urlgroupr.   r
   getr   anystrr   r   r	   ie_keyIE_NAMEdictraise_no_formats#_extract_m3u8_formats_and_subtitlesupdater   _extract_m3u8_formats)r'   rA   r8   fetch_episoder   m_type
episode_idr(   video_idr4   r7   episode_nameinfostream_info
stream_urlrP   rQ   
audio_pathfr,   r,   r-   _extract_episode_info-   s   




zNhkBaseIE._extract_episode_infoN)__name__
__module____qualname__r%   _BASE_URL_REGEXr.   rs   r,   r,   r,   r-   r      s
    r   c                   @   s  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dhdi ZdjS )kr\   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)r0   extr4   r9   	thumbnailr8   r7   rR   r;   r=   rT   upload_daterI   release_daterA   	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)r0   r   r4   r9   r   r7   r8   rR   r;   r=   rT   r   )rA   md5r   zHhttps://www3.nhk.or.jp/nhkworld/en/shows/audio/livinginjapan-20240901-1/zlivinginjapan-20240901-1-enrU   z=Living in Japan - Weekend Hiking / Self-protection from crimeLiving in Japanz$md5:4d0e14ab73bdbfedb60a53b093954ed6z+Weekend Hiking / Self-protection from crimeInteractive)r0   r   r4   r7   r9   r   r8   r;   z:https://www3.nhk.or.jp/nhkworld/en/ondemand/video/2015173/TrA   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`)r0   r   r4   r9   r   r   rT   z404 Not Found)rA   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)r0   r   r4   r7   r8   r   r9   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)r0   r   r4   r9   rR   r   r;   r=   rT   r   rI   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)r0   r   r8   r7   r4   r9   rT   rR   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)
r0   r   r4   r9   r   rR   r;   r=   rT   r   zHhttps://www3.nhk.or.jp/nhkworld/en/shows/audio/livinginjapan-20231001-1/z1https://www3.nhk.or.jp/nhkworld/en/shows/9999o80/c                 C   s
   |  |S rt   )rs   r'   rA   r,   r,   r-   _real_extract  s   
zNhkVodIE._real_extractN)ru   rv   rw   r   rx   
_VALID_URL_TESTSr   r,   r,   r,   r-   r\   w   s   


		  r\   c                	       s   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dZdd Z	dd Z
  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)r0   r4   r9   r7   r   rA   r   playlist_mincountz6https://www3.nhk.or.jp/nhkworld/en/shows/japanrailway/japanrailwayrz   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                    s   t |rdS t |S )NF)r\   suitablesuper)clsrA   	__class__r,   r-   r   D  s   zNhkVodProgramIE.suitablec                 C   s(   |D ]}t t|| }r|  S qd S rt   )r   r   )r'   class_valueshtmlclass_valuevaluer,   r,   r-   !_extract_meta_from_class_elementsH  s
   z1NhkVodProgramIE._extract_meta_from_class_elementsc           
         s    dddd\}}}}|||dkd|dk  fdd	}|}g d
|}g d|}	j| |||	|dS )Nr   r/   r0   episode_typer   Fclipc                  3   s6    t  ddd fD ]} t| d | V  q
d S )Nitemsc                 S   r?   r@   r,   rB   r,   r,   r-   rD   S  rE   z@NhkVodProgramIE._real_extract.<locals>.entries.<locals>.<lambda>rA   )r   rs   r   r8   r   r'   rA   r,   r-   entriesR  s   z.NhkVodProgramIE._real_extract.<locals>.entries)zp-programDetail__titlepProgramHero__logoTexttAudioProgramMain__titlezp-program-name)zp-programDetail__textpProgramHero__descriptiontAudioProgramMain__infozp-program-description)r7   )r]   r^   r.   _download_webpager   playlist_result)
r'   rA   r   rj   
program_idr   r   r   program_titleprogram_descriptionr,   r   r-   r   M  s   

zNhkVodProgramIE._real_extract)ru   rv   rw   r   rx   r   r   classmethodr   r   r   __classcell__r,   r,   r   r-   r     sX    ,r   c                	   @   s:   e Zd ZdZdddddddd	d
ddidgZd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20140402ry   zcount:12)r0   r4   rR   rT   r   r   chaptersskip_downloadT)rA   r   paramsc                 C   s`  |  | \}}| d| d| |}dd td|D }dd td|D }dd	 td
|D }dd	 td|D }|dpJ|d}	|	rY|dd  d|	 }| jd|dd  d| d|ddd}
t|d}d }|r|rt	|t	|kr|}g |dd  |}dd	 t
|||ddD }||dt|dt|d |
|dS ) Nz$https://www2.nhk.or.jp/school/movie/z.cgi?das_id=c                 S      i | ]}| d | dqS )r   r   r^   .0gr,   r,   r-   
<dictcomp>      z7NhkForSchoolBangumiIE._real_extract.<locals>.<dictcomp>z$var\s+([a-zA-Z_]+)\s*=\s*"([^"]+?)";c                 S   r   )r      r   r   r,   r,   r-   r     r   z:(?:program|clip)Obj\.([a-zA-Z_]+)\s*=\s*(["\'])([^"]+?)\2;c                 S   s   g | ]	}t |d qS )r   )r   r^   r   r,   r,   r-   
<listcomp>  s    z7NhkForSchoolBangumiIE._real_extract.<locals>.<listcomp>z$chapterTime\.push\(\'([0-9:]+?)\'\);c              	   S   s2   g | ]}d  |dpdt|dg qS ) r   r   r   )joinr^   r   stripr   r,   r,   r-   r     s   2 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.m3u8ry   rW   )r   rY   
r_durationr   c                 S   s   g | ]\}}}|||d qS ))
start_timeend_timer4   r,   )r   setr,   r,   r-   r     s    
T)strictr<   r_upload)r0   r4   rR   rT   rP   r   )r]   groupsr   refinditerr_   splitrh   r   lenzipr   )r'   rA   program_typerl   webpagebase_valuesprogram_valueschapter_durationschapter_titlesr   rP   rR   r   r   r   r,   r,   r-   r   z  s<   
z#NhkForSchoolBangumiIE._real_extractNru   rv   rw   r   r   r   r,   r,   r,   r-   r   e  s    r   c                   @   sZ   e Zd ZdZdZdddd eD Zddd	d
dddddd
ddgZd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                 c       | ]}t |V  qd S rt   r   escaper   r   r,   r,   r-   	<genexpr>      zNhkForSchoolSubjectIE.<genexpr>z$https://www.nhk.or.jp/school/sougou/r   u   総合的な学習の時間r0   r4      r   z"https://www.nhk.or.jp/school/rika/r   u   理科   c              
      sR   |   }|  |}| tdt| d||| jd|ddd fddS )	Nz-href="((?:https?://www\.nhk\.or\.jp)?/school/z	/[^/]+/)"zB(?s)<span\s+class="subjectName">\s*<img\s*[^<]+>\s*([^<]+?)</span>r4   FrZ   c                    s   t  | dS )Nr   )r   r^   )r   rA   r,   r-   rD         z5NhkForSchoolSubjectIE._real_extract.<locals>.<lambda>)	_match_idr   playlist_from_matchesr   r   r  _html_search_regex)r'   rA   
subject_idr   r,   r  r-   r     s   

z#NhkForSchoolSubjectIE._real_extractN)
ru   rv   rw   IE_DESCKNOWN_SUBJECTSr&   r   r   r   r   r,   r,   r,   r-   r     s(    r   c                   @   sD   e Zd Zdddd ejD Zddddd	d
gZdd Z	dS )NhkForSchoolProgramListIEz>https?://www\.nhk\.or\.jp/school/(?P<id>(?:{})/[a-zA-Z0-9_-]+)r  c                 c   r  rt   r  r  r,   r,   r-   r    r  z#NhkForSchoolProgramListIE.<genexpr>z&https://www.nhk.or.jp/school/sougou/q/zsougou/qu!   Ｑ～こどものための哲学r     r   c                    s     |} d| d|} d|p jd|ddd}|r'tdd|nd } jd	|d
ddd} d| d|} fddt|dpHg D } ||||S )Nzhttps://www.nhk.or.jp/school/r   r   u   <h3>([^<]+?)とは？\s*</h3>r4   Fr  z\s*\|\s*NHK\s+for\s+School\s*$z3(?s)<div\s+class="programDetail\s*">\s*<p>[^<]+</p>r9   r   )rZ   r^   z/meta/program.jsonc                    s   g | ]
}  d | qS )z7https://www2.nhk.or.jp/school/movie/bangumi.cgi?das_id=)
url_result)r   xr'   r,   r-   r     s    z;NhkForSchoolProgramListIE._real_extract.<locals>.<listcomp>)part.zpart-video-dasid)	r  r   _generic_titler  r   subr$   r   r   )r'   rA   r   r   r4   r9   bangumi_listbangumisr,   r  r-   r     s"   

z'NhkForSchoolProgramListIE._real_extractN)
ru   rv   rw   r&   r   r   r  r   r   r   r,   r,   r,   r-   r    s    	r  c                   @   sb  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dMdN ZdOdP Z	dQdR Z
dSdT ZdUdV ZdddXdYZdZd[ Zd\d] Zd^d_ Zd`da Zdbdc ZdLS )e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-14r4   u]   クラシックの庭　特集「ドボルザークを聴く」（１）交響曲を中心にr0   LG96ZW5KZ4_01_4251382r   rU   r9   z$md5:652d3c38a25b77959c716421eba1617auploaderu   NHK FM・東京channelrR   g     Ź@r   zzhttps://www.nhk.jp/static/assets/images/radioseries/rs/LG96ZW5KZ4/LG96ZW5KZ4-eyecatch_a67c6e949325016c0724f2ed3eec8a2f.jpgr;   u   音楽u   クラシック・オペラcastu   田添菜穂子r7   u   クラシックの庭	series_id
LG96ZW5KZ4r8   u?   特集「ドボルザークを聴く」(1)交響曲を中心にrk   
QP1Q2ZXZY3rT   inkhr   20250707rI   iSTkhr   )rA   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)r0   r4   r9   r   r$  r!  r"  r7   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)r0   r   r4   r!  r"  r   r7   rT   r   rI   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)r0   r   r4   r9   r!  r"  r   r7   r$  rT   r   rI   r   z?Failed to download extended metadata: HTTP Error 404: Not Found)rA   r   r   expected_warningsNc           
   	   C   s   i }t |dthfD ]}|d}||vrg ||< || | q
g }| D ]8\}}t|D ]/\}}|dkrA|d urAd| dnd}|d }	rQ||	 d7 }|t||d	dd
 q/q't|ddiS )N.roler   u   【u   】r   r4   u   …r<   delimr3  u   ，)r   rd   r_   appendr   	enumerater
   )
r'   act_listrole_groupsactr1  formatted_rolesactsiresr4   r,   r,   r-   _format_act_listF  s   
 zNhkRadiruIE._format_act_listc                 C   sp   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 }r0|| qd	|p7d S )
N.r1  u   {}…r  u   （{}）r<   r3  r   u   、)r   rd   r
   filterr&   ra   r4  r   )r'   trackkeyartistsartistr<  r,   r,   r-   _make_artistsW  s   

zNhkRadiruIE._make_artistsc           	      C   s   t ||thf}|d u rd S t|d\}}t|d\}}d}|dkr+|t| d7 }|dkr8|t| d7 }|t|dd7 }|S )	Ni  <   u   （r   u   時間u   分02u   秒）)r   r   divmodint)	r'   r?  r@  dhours	remainderminutessecondsr<  r,   r,   r-   _make_durationc  s   zNhkRadiruIE._make_durationc              	   C   s   g }t |dthfD ]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|d }rQ|d| d t |dthf }rd|d| d |t|ddi q
d	|S )N.r<   u   「{}」lyricistu	   {}:作詞composeru	   {}:作曲arrangeru	   {}:編曲byArtistrR   labelcoder   r3  r3   u   ＜u   ＞locationu   ～r3  


)
r   rd   r>  r&   ra   r4  rC  rM  r
   r   )r'   
music_listtracksr?  track_detailsrR  rU  r,   r,   r-   _format_music_listq  s$   
zNhkRadiruIE._format_music_listc                 C   sP   t |dthfp	i }ttddd|dt |dd| jhft |dd| jhfdd	S )
NdetailedDescriptionepg80epg200rW  rT  miscactList	musicListr2  )r   rd   r
   r=  r[  )r'   responsedetailed_descriptionr,   r,   r-   _format_description  s   zNhkRadiruIE._format_descriptionc              
   C   s|   g }t |g t|ttttftjhdd R D ]"\}}||d t|	dt|	d|t
||d |d8 }q|S )Nc                 S   s   |d dkot |d d S )Nr   	copyrightr   rA   )r   rB   r,   r,   r-   rD     s    z-NhkRadiruIE._get_thumbnails.<locals>.<lambda>rA   rF   rG   )rA   rF   rG   
preferencer0   r   )r   r   ra   bytesrd   setr   r4  r	   r_   r
   )r'   datakeysr<   rg  rJ   sizethumbr,   r,   r-   _get_thumbnails  s"   
zNhkRadiruIE._get_thumbnailsc                    s  t |dthdd hf\} |d t fdd}|s"i S j||dddd	d
}|s1i S t |dthf }rKdtdd|dd  i S t |ddthf}g }||d t	t |dD ]\}	}
||
d td|	d qf||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                 S      | pd dS )Nr   ,	partitionr  r,   r,   r-   rD         z8NhkRadiruIE._extract_extended_metadata.<locals>.<lambda>r   c                      s   j jt dS )N)broadcastEventId)_API_URL_TMPLr&   r
   r,   areadate_idr'   servicer,   r-   rD     s    zDownloading extended metadataz$Failed to download extended metadataFi  )rZ   expected_statuserrorz4Failed to get extended metadata. API returned Error 
statuscodemessagez: )r3   r3  publishedOnbroadcastDisplayName)abouteyecatch)r  eyecatchList.list)r  partOfSeriesr  r7   r_  r`  .r<   )r9   r#  rJ   endDate	startDaterR   )r4   rT   rI   rR   identifierGroupradioSeriesNameradioSeriesIdradioEpisodeNameradioEpisodeIdgenrename1name2)r7   r$  r8   rk   r;   )r"  r!  )r   ra   r   r$   rd   report_warningr
   extendrn  r5  r   rd  r   r   allr   )r'   rk   aa_vinfor   
detail_urlrb  r|  stationrJ   numdctr,   rw  r-   _extract_extended_metadata  sf   

z&NhkRadiruIE._extract_extended_metadatac           
   
   C   s   | d|d  }t |ddd hf}| ||}t |dthdd hf\}}}	i ||| j|d|d	d
dd|d|dt|	t|d|S )Nr   r0   aa_contents_idc                 S   s
   |  dS )N;r   rs  r,   r,   r-   rD     s   
 z3NhkRadiruIE._extract_episode_info.<locals>.<lambda>r1   c                 S   ro  )Nr   r   rq  rs  r,   r,   r-   rD     rt  rp   Fr  m4a_dashTr   program_sub_title)r0   rP   	containerwas_liver4   r9   rT   rI   )r   r  ra   rh   r_   r   )
r'   r8   programme_idseries_metark   r  extended_metadatafallback_start_timer   fallback_end_timer,   r,   r-   rs     s(   

z!NhkRadiruIE._extract_episode_infoc              
   C   s   | d|d  }t |ddthf}i ||| j|d|dddd	|d
t|dp1|ddt |dthfdthfdthfddd hthfdS )Nr   headline_id	file_listr   	file_nameFr  r  Tr4   headline_imager   )r0   rP   r  r  r7   r   
file_titlefile_title_sub	open_time	aa_vinfo4c                 S   s   |  dd S )Nr   r   r  rs  r,   r,   r-   rD     rt  z0NhkRadiruIE._extract_news_info.<locals>.<lambda>)r4   r9   rT   rI   )r   rd   rh   r_   r   ra   r   )r'   headliner  r  rk   r8   r,   r,   r-   _extract_news_info  s&   zNhkRadiruIE._extract_news_infoc                    s2   | j rd S | jdd ddd t fddt_ d S )N1https://www.nhk.or.jp/radio/config/config_web.xmlzDownloading API configFr  c                      s   d  dj S )Nhttps:z.//url_program_detail)findtextr,   
api_configr,   r-   rD         z.NhkRadiruIE._real_initialize.<locals>.<lambda>)rv  _download_xmlr   r  r  r,   r  r-   _real_initialize  s   zNhkRadiruIE._real_initializec           	         s   |ddd\}} | d| |dkrndd tdthfd	thfd	thfd
thfddd rUtd fddtf}|sNtddd|S fdd}j	| fd
diS jd||ddtdtdthfdd}tdd dd!td"thf||d# rtd$ fd%dtf}|stddd|S fd&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)r4   r"  r!  r   F)get_alldetail_listc                    s   |d  kS )Nr  r,   rB   r  r,   r-   rD     s    z+NhkRadiruIE._real_extract.<locals>.<lambda>z-Content not found; it has most likely expiredTrN   c                  3   .    t  ddthfD ]
} | V  q
d S )Nr  .)r   rd   r  )r  metar  r'   r  r,   r-   news_entries     z/NhkRadiruIE._real_extract.<locals>.news_entriesr9   site_detailz:https://www.nhk.or.jp/radio-api/app/v1/web/ondemand/series)site_idcorner_site_id)queryNHKradio_broadcastr   r2  r4   corner_namerT  thumbnail_url)r7   r$  r   r"  r!  r   c                    s   |d t  kS )Nr0   )rG  rB   r  r,   r-   rD   -  r  c                  3   r  )Nr   .)r   rd   rs   r   r  r,   r-   r   2  r  z*NhkRadiruIE._real_extract.<locals>.entriesr7   series_description)r4   r9   )r]   r^   r$   r   ra   r   r`   r   r  r   r_   r
   rs   )	r'   rA   r  	corner_idr  r  fallback_stationr8   r   r,   )r  r  r  r'   r  r-   r     st   zNhkRadiruIE._real_extract)Nre  )ru   rv   rw   _GEO_COUNTRIESr  r   r   rv  r=  rC  rM  r[  rd  rn  r  rs   r  r  r   r,   r,   r,   r-   r    s    	

M
3r  c                	   @   s4   e Zd ZdZddddddddd	d
gZdd ZdS )NhkRadioNewsPageIEz/https?://www\.nhk\.or\.jp/radionews/?(?:$|[?#])z https://www.nhk.or.jp/radionews/   18439M2W42_01r+  z$md5:bf2c5b397e44bc7eb26de98d8f15d79dr*  r,  )r0   r   r9   r"  r!  r4   )rA   r   r   c                 C   s   |  dtS )Nz@https://www.nhk.or.jp/radio/ondemand/detail.html?p=18439M2W42_01)r  r  r   r,   r,   r-   r   K  s   z NhkRadioNewsPageIE._real_extractNr   r,   r,   r,   r-   r  ;  s    r  c                   @   s   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 d! Zd"S )#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・東京.+$rU   zChttps://www.nhk.jp/assets/images/broadcastservice/bs/r1/r1-logo.svgis_liveznhkradirulive r1-tokyo)r0   r4   r   r   live_status_old_archive_idsr   z)https://www.nhk.or.jp/radio/player/?ch=r2extractor_argsnhkradiruliverx  fukuokaz	bs-r2-400u   re:^NHKラジオ第2.+$zChttps://www.nhk.jp/assets/images/broadcastservice/bs/r2/r2-logo.svgznhkradirulive r2-fukuoka)rA   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              
   C   s(  |  |}| ddgd }| d|d}|d| d}|s4tdd	d
d |dD dd| jd|dj	 j|dj	d|d| 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 )#Nrx  tokyor   r  zDownloading area informationz.//data//area[.="z"]/..z!Invalid area. Valid areas are: {}z, c                 S   s   g | ]}|j qS r,   )r  )r   r;  r,   r,   r-   r     r  z1NhkRadiruLiveIE._real_extract.<locals>.<listcomp>z.//data//areaTrN   r  z.//url_program_noaareakey)rx  zDownloading z station metadataF)noterZ   r  r  r0   )r4   r0   logo.rA   rF   rG   rH   rW   )r  rJ   rP   r  )r  _configuration_argr  r  r   r&   r   findallr$   r  r   _NOA_STATION_IDSr_   ra   r   r
   r	   rh   )r'   rA   r  rx  configrj  noa_infobroadcast_servicer,   r,   r-   r   z  s@   

 zNhkRadiruLiveIE._real_extractN)ru   rv   rw   r  r   r   r  r   r,   r,   r,   r-   r  O  sF    &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  r,   r,   r,   r-   <module>   s    L^ RB("  L