U
    g                     @   sP   d dl mZ ddlmZmZmZmZmZmZ G dd deZ	G dd deZ
dS )	   )InfoExtractor   )ExtractorError
js_to_jsonsmuggle_urlstr_or_nonetraverse_objunescapeHTMLc                   @   s~   e 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gd	dd d!dd
dgZd"d# Zd$S )%GeniusIEzHhttps?://(?:www\.)?genius\.com/(?:videos|(?P<article>a))/(?P<id>[^?/#]+)zRhttps://genius.com/videos/Vince-staples-breaks-down-the-meaning-of-when-sparks-flyZ 64c2ad98cfafcfda23bfa0ad0c512f4cZ6313303597112Zmp4u>   Vince Staples Breaks Down The Meaning Of “When Sparks Fly”z$md5:bc15e00342c537c0039d414423ae5752zcount:14863540648001g-Fx@Z20221005iE=czre:^https?://.*\.jpg$)
idexttitledescriptiontagsZuploader_iddurationZupload_date	timestampZ	thumbnail)urlmd5	info_dictz]https://genius.com/videos/Breaking-down-drakes-certified-lover-boy-kanye-beef-way-2-sexy-cudiZ b8ed87a5efd1473bd027c20a969d4060Z6271792014001z$md5:c6355f7fa8a70bc86492a3963919fc15z$md5:1774638c31548b31b037c09e9b821393zcount:3g 2@Z20210909iF:azLhttps://genius.com/a/cordae-anderson-paak-break-down-the-meaning-of-two-tensZ f98a4e03b16b0a2821bd6e52fb3cc9d7Z6321509903112uA   Cordae & Anderson .Paak Breaks Down The Meaning Of “Two Tens”z$md5:1255f0e1161d07342ce56a8464ac339dzsong id: 5457554g^Iv@Z20230301icc           
   	   C   s   |  |dd\}}| ||}| jd|d|dtd}t|ddd	d
d ddfffdd}|sntdt|d| jd|d|i d}|dd}t|dddddd}	| 	t
d| d|	 d| d|id |S )!Nr   articlez<meta content="metadataz"\s+itemprop="page_data")Zend_patterntransform_source))r   media.)videoNZprovider_idZdfp_kvc                 S   s   |d dkS )NnameZbrightcove_video_id )_vr   r   ;/tmp/pip-unpacked-wheel-q5ljy6pj/yt_dlp/extractor/genius.py<lambda>F       z(GeniusIE._real_extract.<locals>.<lambda>values.F)get_allz(Brightcove video ID not found in webpage)expectedzvar\s*APP_CONFIG\s*=config)defaultZbrightcove_account_idr   Z!brightcove_standard_web_player_idZ-brightcove_standard_no_autoplay_web_player_idZbrightcove_modal_web_player_idZ#brightcove_song_story_web_player_idZ
S1ZcmcOC1xzhttps://players.brightcove.net//z_default/index.html?videoId=ZreferrerZBrightcoveNew)Z_match_valid_urlgroup_download_webpage_search_jsonr	   r   r   boolget
url_resultr   )
selfr   
display_idZ
is_articlewebpager   Zvideo_idr%   Z
account_idZ	player_idr   r   r   _real_extract=   sH             zGeniusIE._real_extractN__name__
__module____qualname__Z
_VALID_URLZ_TESTSr1   r   r   r   r   r
      sZ   /r
   c                   @   sR   e 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gZdd ZdS )GeniusLyricsIEz@https?://(?:www\.)?genius\.com/(?P<id>[^?/#]+)-lyrics(?:[?/#]|$)z'https://genius.com/Lil-baby-heyy-lyricsr   Z8454545ZHeyyzHeyy by Lil Baby)r   r   r   )r   Zplaylist_mincountr   z=https://genius.com/Outkast-two-dope-boyz-in-a-cadillac-lyricsr   Z36239zTwo Dope Boyz (In a Cadillac)z(Two Dope Boyz (In a Cadillac) by OutKastz+https://genius.com/Playboi-carti-rip-lyricsZ3710582zR.I.P.zR.I.P. by Playboi Cartic                 C   s  |  |}| ||}| jd|d|tdd}| ||}tt|d}|sRtdt|ddd	d
 dfddd}t|dddd
 dfddd}t|dd|dftg d}	g }
|	D ]P}|	ddkr|	dr|	ddkr| 
| d q|
| |d  q| |
||| d| S )Nz/window\.__PRELOADED_STATE__\s*=\s*JSON\.parse\(zjson stringz\'{(?s:.+)}\')r   Zcontains_pattern)songPageZsongzSong id not found in webpager7   ZtrackingDatac                 S   s   |d dkS )NkeyZTitler   r   xr   r   r   r       r!   z.GeniusLyricsIE._real_extract.<locals>.<lambda>valueFZuntitled)r#   r&   c                 S   s   |d dkS )Nr8   zPrimary Artistr   r9   r   r   r   r       r!   zunknown artistentitiesZsongsr   )Zexpected_typer&   type)r   audior   ZproviderZspotifyz: Skipping Spotify audio embedz by )Z	_match_idr)   r*   r   Z_parse_jsonr   r   r   listr,   Z	to_screenappendr-   Zplaylist_result)r.   r   r/   r0   Zjson_stringZ	song_infoZsong_idr   Zartistr   entriesmr   r   r   r1   t   sN    
         
  zGeniusLyricsIE._real_extractNr2   r   r   r   r   r6   X   s0   		r6   N)commonr   utilsr   r   r   r   r   r	   r
   r6   r   r   r   r   <module>   s    
L