
    i                     x    d dl ZddlmZ ddlmZ ddlmZmZ  G d d	ee      Z	 G d
 de      Z
 G d de      Zy)    N   )YoutubeTabBaseInfoExtractor   )SearchInfoExtractor   )join_nonemptyparse_qsc                   B    e Zd ZdZdZdZdZdddddd	d
ddddddgZy)YoutubeSearchIEzYouTube searchzyoutube:searchytsearchzEgIQAfABAQ==zytsearch5:youtube-dl test video   youtube-dl test videoidtitleurlplaylist_count	info_dictz Suicide/self-harm search warningz'ytsearch1:i hate myself and i wanna dier   zi hate myself and i wanna die)noter   r   r   N)__name__
__module____qualname__IE_DESCIE_NAME_SEARCH_KEY_SEARCH_PARAMS_TESTS     S/var/www/files/kim/lib/python3.12/site-packages/yt_dlp/extractor/youtube/_search.pyr   r      sN    GGK#N0),
 3814
	Fr    r   c                       e Zd ZdZej
                  dz   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eddddedigddddddddgZ	d  Z
y!)"YoutubeSearchURLIEz3YouTube search URLs with sorting and filter support_urlzchttps?://(?:www\.)?youtube\.com/(?:results|search)\?([^#]+&)?(?:search_query|q)=(?:[^&]+)(?:[&#]|$)zchttps://www.youtube.com/results?baz=bar&search_query=youtube-dl+test+video&filters=video&lclk=videor   r   r   )r   playlist_mincountr   zGhttps://www.youtube.com/results?search_query=python&sp=EgIQAg%253D%253Dpythonz4https://www.youtube.com/results?search_query=%23catsr   z#catszKhttps://www.youtube.com/results?search_query=kurzgesagt&sp=EgIQAg%253D%253D
kurzgesagtr   r   UCsXVk37bltHxD1rDPwtNM8Qz8https://www.youtube.com/channel/UCsXVk37bltHxD1rDPwtNM8Q
YoutubeTabu   Kurzgesagt – In a Nutshellz$md5:4ae48dfa9505ffc307dad26342d06bfcz@kurzgesagtz#https://www.youtube.com/@kurzgesagtT)_typer   r   ie_keychanneldescriptionr   
channel_idchannel_url
thumbnailsuploader_iduploader_urluploaderchannel_is_verifiedchannel_follower_count1)extract_flatplaylist_items)r   r   playlistparamsr%   z2https://www.youtube.com/results?q=test&sp=EgQIBBgB)r   only_matchingc           	          t        |      }|j                  d      xs |j                  d      d   }| j                  | j                  ||j                  dd      d         ||      S )Nsearch_queryqr   spN)r	   getplaylist_result_search_results)selfr   qsquerys       r!   _real_extractz YoutubeSearchURLIE._real_extract`   s`    c]'6266#;:##D$8$8tW@UVW@X$Y[`bghhr    N)r   r   r   r   r   r   
_VALID_URLlistintr   rG   r   r    r!   r#   r#      s    CG%%.GwJt),
 Y
 F
 ]!

 0Q&9E78  Z", E:'+*-#
 * $(3?;> Dq;Fzir    r#   c                   p    e Zd ZdZdZdZddddddd	d
dddddiddd
dddddidgZdddddddZd Zy)YoutubeMusicSearchURLIEz?YouTube music search URLs with selectable sections, e.g. #songszyoutube:music:search_urlzThttps?://music\.youtube\.com/search\?([^#]+&)?(?:search_query|q)=(?:[^&]+)(?:[&#]|$)z5https://music.youtube.com/search?q=royalty+free+music   zroyalty free musicr   r   zYhttps://music.youtube.com/search?q=royalty+free+music&sp=EgWKAQIIAWoKEAoQAxAEEAkQBQ%3D%3D   zroyalty free music - songsr7   in_playlist)r   r%   r   r:   zIhttps://music.youtube.com/search?q=royalty+free+music#community+playlistsz(royalty free music - community playlistszEgWKAQIYAWoKEAoQAxAEEAkQBQ==zEgWKAQIgAWoKEAoQAxAEEAkQBQ==EgeKAQQoAEABagoQChADEAQQCRAFz!EgeKAQQoADgBagwQAxAJEAQQDhAKEAU==zEgWKAQIIAWoKEAoQAxAEEAkQBQ==zEgWKAQIQAWoKEAoQAxAEEAkQBQ==)albumsartistszcommunity playlistszfeatured playlistssongsvideosc                    t        |      }|j                  d      xs |j                  d      d   }|j                  dd      d   r.t        fd| j                  j	                         D              }nbt
        j                  j                  g |j                  d      dd	         j                         }| j                  j                  |      sd }t        ||d
      }| j                  | j                  |d      ||      S )Nr=   r>   r   r?   r@   c              3   4   K   | ]  \  }}|k(  s|  y wr@   r   ).0kvr:   s      r!   	<genexpr>z8YoutubeMusicSearchURLIE._real_extract.<locals>.<genexpr>   s     P$!QAKAPs   # r   z - )delim	web_music)default_client)r	   rA   next	_SECTIONSitemsurllibparseunquote_plussplitlowerr   rB   rC   )rD   r   rE   rF   sectionr   r:   s         @r!   rG   z%YoutubeMusicSearchURLIE._real_extract   s    c]'6266#;:g&q)P$..*>*>*@PRXYGll//1F399S>1F21F0JKQQSG^^''0FeWE:##D$8$8Wb$8$cejlqrrr    N)	r   r   r   r   r   rH   r   ra   rG   r   r    r!   rL   rL   f   s    OG(GhJF&)
 k.1
 "=1 [<?
 "=1F4 11=A/0Isr    rL   )urllib.parserc   _tabr   commonr   utilsr   r	   r   r#   rL   r   r    r!   <module>rm      sB     - ( ,13F .Di4 DiN2s9 2sr    