
    =Ґi                         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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     Y/var/www/descvideos/venv/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                   J    e Zd Zej                  dz   ZdZdZdZdddddd	gZy
)YoutubeSearchDateIEz:dateytsearchdatez#YouTube search, newest videos firstCAISAhAB8AEBz#ytsearchdate5:youtube-dl test videor   r   r   r   N)	r   r   r   r   r   r   r   r   r   r   r    r!   r#   r#      s>    %%/G K3G#N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_extracto   s`    c]'6266#;:##D$8$8tW@UVW@X$Y[`bghhr    N)r   r   r   r   r   r   
_VALID_URLlistintr   rK   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 - songsr;   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 )NrA   rB   r   rC   rD   c              3   4   K   | ]  \  }}|k(  s|  y wrD   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	   rE   next	_SECTIONSitemsurllibparseunquote_plussplitlowerr   rF   rG   )rH   r   rI   rJ   sectionr   r>   s         @r!   rK   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   rL   r   re   rK   r   r    r!   rP   rP   u   s    OG(GhJF&)
 k.1
 "=1 [<?
 "=1F4 11=A/0Isr    rP   )urllib.parserg   _tabr   commonr   utilsr   r	   r   r#   r'   rP   r   r    r!   <module>rq      sR     - ( ,13F .57J Di4 DiN2s9 2sr    