
    VGh&                         d dl Z d dlZd dlZ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 ddlmZ  G d de      Z G d	 d
e      Z G d de      Zy)    N   )InfoExtractor   )ExtractorError
clean_htmljoin_nonemptytime_secondstry_callunified_timestampupdate_url_query)traverse_objc                   D    e Zd ZdZdZdZdZdZd Zd Z	d Z
d	 Zd
 Zd Zy)RadikoBaseIEFN)z https://c-rpaa.smartstream.ne.jpz%https://si-c-radiko.smartstream.ne.jpz*https://tf-f-rpaa-radiko.smartstream.ne.jpz*https://tf-c-rpaa-radiko.smartstream.ne.jpz%https://si-f-radiko.smartstream.ne.jpzhttps://rpaa.smartstream.ne.jp)z%https://rd-wowza-radiko.radiko-cf.comzhttps://radiko.jpz"https://f-radiko.smartstream.ne.jp)z"https://c-radiko.smartstream.ne.jpc           
         | j                  dd dddddd      \  }}|j                  }|d	   }t        |d
         }t        |d         }| j                         |||z    }t	        j
                  |      j                         }| j                  dd ddd||d      j                  d      d   }	|	dk(  r| j                  dg       ||	f}
| j                  j                  dd|
       |
S )Nzhttps://radiko.jp/v2/api/auth1zDownloading authentication pagepc_html5z0.0.1pc
dummy_user)zx-radiko-appzx-radiko-app-versionx-radiko-devicex-radiko-user)headersX-Radiko-AuthTokenzX-Radiko-KeyLengthzX-Radiko-KeyOffsetzhttps://radiko.jp/v2/api/auth2Authenticating)r   r   zx-radiko-authtokenzx-radiko-partialkey,r   OUTJP)	countriesradiko	auth_data)_download_webpage_handler   int_extract_full_keybase64	b64encodedecode_download_webpagesplitraise_geo_restrictedcachestore)self_auth1_handleauth1_header
auth_tokenklkoraw_partial_keypartial_keyarea_idr   s              `/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/radiko.py_negotiate_tokenzRadikoBaseIE._negotiate_token(   s!   77,d4U *(/#'!-	 8 < $++!"67
2342340022b2g>&&7>>@((,d4D#'!-&0'2	 )  uSz! e%%%7)	

;	:    c           	          | j                   j                  dd      }|&| j                  dd dd|d   |d   d	      }|d
k(  r|S | j                         S )Nr   r   z#https://radiko.jp/v2/api/auth_checkzChecking cached tokeni  r   r   )r   X-Radiko-AreaId)expected_statusr   OK)r(   loadr%   r5   )r*   	cachedataresponses      r4   _auth_clientzRadikoBaseIE._auth_clientI   so    JJOOHk:	 --5t=Tfi/8|PYZ[P\] . _H 4  $$&&r6   c                     | j                   r| j                   S | j                  dd d      }| j                  d|ddd      }|r|j                         }nd	}|| _         |S )
Nz)https://radiko.jp/apps/js/playerCommon.jszDownloading player js codenotezRRadikoJSPlayer\([^,]*,\s*(['\"])pc_html5\1,\s*(['\"])(?P<fullkey>[0-9a-f]+)\2,\s*{zfull keyFfullkey)fatalgroups(   bcd151073c03b352e1ef2fd66c32209da9ca0afa)	_FULL_KEYr%   _search_regexencode)r*   jscodefull_keys      r4   r!   zRadikoBaseIE._extract_full_keyS   su    >>>>!''7- ( / %%bJe9 & > (HBH!r6   c                 .   | j                  d| d|d| d      }d }|j                  d      D ]G  }|j                  d   |j                  d   }}t        |d	      }	t        |d	      }
|	|k  s?||
k  sE|} n |st	        d
      	sJ 
       |||	fS )Nz,https://radiko.jp/v3/program/station/weekly/.xmlzDownloading radio program for z stationr@   z.//progfttoFz*Cannot identify radio program to download!)_download_xmlfindallattribr   r   )r*   video_idstationcursorstation_programprogpft_strto_strrL   rM   s              r4   _find_programzRadikoBaseIE._find_programf   s    ,,:7)4H(1'(C - E  ((3 	AXXd^QXXd^FF"651B"651BV|	  !MNN2r_b&&88r6   c	                    | j                  d| d|d      }	g }
t               }|rdnd}|	j                  d| d      D ]+  }|j                  }||v r|j	                  |       t        |d	|i|d
dj                  t        j                  dd            dd      }|rd n||z
  }t        j                  j                  |      j                  }| j                  ||ddd|d| ||d      }|D ]e  }||j                  | j                        z  s|s%|j                  | j                         r
d|d<   d|d<   |rK|dk(  sQ|sTddt#        |      gi|d<   g |
j%                  |       . |
S )Nz-https://radiko.jp/v3/station/stream/pc_html5/rK   zDownloading stream informationr@   r   r   z.//url[@timefree="z"]/playlist_create_url
station_id15 0123456789abcdef    )kb)llsidtypem4aTFz"Downloading m3u8 information from )r8   r   )extliverC   m3u8_idrA   r   i
preferenceznot preferredformat_noteffmpeg_argsz-ssdownloader_options)rN   setrO   textaddr   joinrandomchoicesurllibparseurlparsenetloc_extract_m3u8_formats
startswith_HOSTS_FOR_LIVE'_HOSTS_FOR_TIME_FREE_FFMPEG_UNSUPPORTEDstrextend)r*   rQ   rR   is_onairrL   rS   r.   r3   querym3u8_playlist_dataformatsfoundtimefree_intelementpcuplaylist_urltime_to_skipdomain
subformatssfs                       r4   _extract_formatszRadikoBaseIE._extract_formatsx   s   !//;G9DI81 0 3 $q!)114F|nTj2kl 	'G,,Ce|IIcN+Cg22 /AR HI2 L $,4"L\\**<8??F33hE9&B'.*4	 4 J ! [s~~d.B.BCC$8d8d)e'+B|$(7B}%LA$5,0=s<GX?Y/ZB+,[ NN:&?	'B r6   c                 N    t        |ddd hdt        j                  hf      xs d S )Nz
pfm/text().c                 .    t        j                  d|       S )Nu   [/／、　,，])rer&   )xs    r4   <lambda>z2RadikoBaseIE._extract_performers.<locals>.<lambda>   s    "((3F*J r6   )r   r{   strip)r*   rU   s     r4   _extract_performersz RadikoBaseIE._extract_performers   s;    D# JKSSVS\S\R]#_ ` hcg	hr6   )__name__
__module____qualname___GEO_BYPASSrE   rz   %_HOSTS_FOR_TIME_FREE_FFMPEG_SUPPORTEDry   r5   r>   r!   rY   r   r    r6   r4   r   r      sD    KI/+-)OB'&9$+Zhr6   r   c                   2    e Zd ZdZdddddddddgZd Zy)	RadikoIEzOhttps?://(?:www\.)?radiko\.jp/#!/ts/(?P<station>[A-Z0-9-]+)/(?P<timestring>\d+)z*https://radiko.jp/#!/ts/QRR/20210425101300Turlonly_matchingz*https://radiko.jp/#!/ts/FMT/20210810150000z.https://radiko.jp/#!/ts/JOAK-FM/20210509090000c                   	
 | j                  |      j                  dd      \  }}t        ||      }t        |d      }| j	                  |||      \  	}
| j                         \  }}|t        	fd      | j                  	      t        t        	fd            t        fd      ||t        
fd      d| j                  ||d||||

|d	
      d
S )NrR   
timestringFc                  :     j                  d      j                  S )Ntitlefindrn   rU   s   r4   r   z(RadikoIE._real_extract.<locals>.<lambda>   s    dii&8&=&= r6   c                  :     j                  d      j                  S )Ninfor   r   s   r4   r   z(RadikoIE._real_extract.<locals>.<lambda>   s    tyy7H7M7M r6   c                  :     j                  d      j                  S )N.//namer   )rT   s   r4   r   z(RadikoIE._real_extract.<locals>.<lambda>   s    )=)=i)H)M)M r6   c                  6    t        d      t         d      z
  S )NF)r   )radio_begin	radio_ends   r4   r   z(RadikoIE._real_extract.<locals>.<lambda>   s    ):9e)LO`alnsOt)t r6   T)start_atrL   end_atrM   seekrQ   rR   r}   rL   rS   r.   r3   r~   )
idr   castdescriptionuploaderuploader_id	timestampdurationis_liver   )
_match_valid_urlrD   r   r   rY   r>   r
   r   r   r   )r*   r   rR   r   rQ   vid_intrL   r.   r3   rU   r   r   rT   s            @@@@r4   _real_extractzRadikoIE._real_extract   s    "33C8>>y,W *5#J6<@<N<NxY`bi<j9or;	"//1
G =>,,T2%h/M&NO !MN"  !tu,,!7Ug*g +%'#& - 

 	
r6   Nr   r   r   
_VALID_URL_TESTSr   r   r6   r4   r   r      s;    cJ < <
 @F
r6   r   c                   2    e Zd ZdZdddddddddgZd Zy)	RadikoRadioIEz8https?://(?:www\.)?radiko\.jp/#!/live/(?P<id>[A-Z0-9-]+)zhttps://radiko.jp/#!/live/QRRTr   zhttps://radiko.jp/#!/live/FMTz!https://radiko.jp/#!/live/JOAK-FMc           
         | j                  |      }| j                  d       | j                         \  }}t        d      }| j	                  |||      \  }}}}	}	|j                  d      j                  }
t        |j                  d      j                        }|j                  d      j                  }| j                  ||d||||i       }||
| j                  |      |||||dd		S )
NzHDownloader will not stop at the end of the program! Press Ctrl+C to stop	   )hoursr   r   r   Tr   )	r   r   r   r   r   r   r   r   r   )
	_match_idreport_warningr>   r	   rY   r   rn   r   r   r   )r*   r   rR   r.   r3   vid_nowrU   rT   rL   r+   r   r   station_namer   s                 r4   r   zRadikoRadioIE._real_extract   s    ..%fg"//1
GQ'*.*<*<Wgw*W'or1a		'"'' 6!2!7!78&++I6;;''g'j' (  ,,T2&$"

 
	
r6   Nr   r   r6   r4   r   r      s:    LJ / /
 3F
r6   r   )r"   rq   r   urllib.parsers   commonr   utilsr   r   r   r	   r
   r   r   utils.traversalr   r   r   r   r   r6   r4   <module>r      sR      	  !   +Th= Thn-
| -
`-
L -
r6   