
    i                         d Z ddlmZ ddlmZmZ ddlmZ ddlm	Z	 dddd	d	d
dZ
ddgZdZd	ZdZdZedz   ZdZdZdddddZdZd Zd Zd Zd Zd Zy)zYoutube (Videos)    )reduce)loadsdumps)
quote_plus)extrzhttps://www.youtube.com/Q866zChttps://developers.google.com/youtube/v3/docs/search/list?apix=trueFHTML)websitewikidata_idofficial_api_documentationuse_official_apirequire_api_keyresultsvideosmusicTzhttps://www.youtube.com/resultsz!?search_query={query}&page={page}z&sp=EgII{time_range}%253D%253DzVhttps://www.youtube.com/youtubei/v1/search?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8AgAwBABQ)dayweekmonthyearz https://www.youtube.com/watch?v=c                 ^   d|d   d<   |d   j                  d      s^t        j                  t        |       |d         |d<   |d	   t        v r+|dxx   t
        j                  t        |d	      
      z  cc<   |S t        |d<   d|d<   t        ddddi|d   d   d      |d<   d|d   d<   |S )NzYES+cookiesCONSENTengine_datanext_page_tokenpageno)querypageurl
time_range)r#   POSTmethodclientWEBz2.20210310.12.01)
clientNameclientVersion)contextcontinuationdatazapplication/jsonheaderszContent-Type)get
search_urlformatr   time_range_dicttime_range_urlnext_page_urlr   )r    paramss     ,/root/searxng/searx/engines/youtube_noapi.pyrequestr6   &   s    #)F9i - $$%67"))
50AxHX)Yu,?25M^22ofUaNb>c2ddM M &u!x$UM_&`a &} 56G H
v -?y.)M    c                     | j                   j                  d      rt        | j                        S t	        | j                        S )Nr   )search_paramsr.   parse_next_page_responsetextparse_first_page_response)resps    r5   responser>   ;   s4    m,'		22$TYY//r7   c                 h   g }t        |       }|d   d   j                  d      d   d   j                  d      d   D ]  }d|vr|d   }d}d	|v rd
j                  d |d	   d   D              }|j                  t        |d   z   d
j                  d |d   d   D              ||d   d   d   d   |d   d   dd|d   z   |d   d   d   d   d        	 |d   d   j                  d      d   d   j                  d      d   j                  d      d   }|j                  |d d!       |S #  Y |S xY w)"NonResponseReceivedCommandsr   appendContinuationItemsActioncontinuationItemsitemSectionRenderercontentsvideoRenderer-descriptionSnippet c              3   &   K   | ]	  }|d      ywr;   N .0xs     r5   	<genexpr>z+parse_next_page_response.<locals>.<genexpr>N   s     XQqyX   runsvideoIdc              3   &   K   | ]	  }|d      ywrJ   rK   rL   s     r5   rO   z+parse_next_page_response.<locals>.<genexpr>R   s     !N!F)!NrP   title	ownerTextr;   
lengthText
simpleTextvideos.html'https://www.youtube-nocookie.com/embed/	thumbnail
thumbnailsr"   r"   rT   contentauthorlengthtemplate
iframe_srcrZ      continuationItemRenderercontinuationEndpointcontinuationCommandtokenr   r   key)r   r.   joinappendbase_youtube_url)response_textr   result_jsonsectionr^   rg   s         r5   r:   r:   A   s   G&K01!4	,	-.A	CCD	F	"	#J	0

 ')/*7*hhX':N2OPV2WXXG'')*<<!NWW5Ef5M!NN"!+.v6q9&A!,/=)G'R[J\\$[1,?CEJ		

.45a8S012EGGHJS+,-CE S&'1 	 	$(	
 NNs   AD, ,D1c                 d   g }t        | dd      }|rt        |      ni }|j                  di       j                  di       j                  di       j                  di       j                  dg       }|D ]9  }d|v rK|d   j                  di       j                  d	i       j                  d
d      }|r|j                  |dd       |j                  di       j                  dg       D ]  }|j                  di       }|j                  d      }	|	)t        |	z   }
d|	z   dz   }t        |j                  di             }t        |j                  di             }t        |j                  di             }t        |j                  di             }|j                  |
||||dd|	z   |d        < |S )NzytInitialData = z
;</script>rD   twoColumnSearchResultsRendererprimaryContentssectionListRendererrd   re   rf   rg    r   rh   rC   rE   rR   zhttps://i.ytimg.com/vi/z/hqdefault.jpgrT   rG   rU   rV   rX   rY   r]   )r   r   r.   rk   rl   get_text_from_json)rm   r   results_dataresults_jsonsectionsro   r   video_containervideovideoidr"   rZ   rT   r^   r_   r`   s                   r5   r<   r<   n   s   G'9<HL*65&BLR(	-r	2		#	"B	'	Z	   &%023+R0*B/Wb!	  '60  '{{+@"EII*VXY 	O#''<Eii	*G"&05?BRR	*599Wb+AB,UYY7KR-PQ+EIIk2,FG+EIIlB,GH "!&#*"("($1&ORY&Y%.		&R Nr7   c                 h    d| v rt        d | j                  d      d      S | j                  dd      S )NrQ   c                 ,    | |j                  dd      z   S )Nr;   rt   )r.   )abs     r5   <lambda>z$get_text_from_json.<locals>.<lambda>   s    1quuVR'8#8 r7   rt   rW   )r   r.   )elements    r5   ru   ru      s4    8'++f:MrRR;;|R((r7   N)__doc__	functoolsr   jsonr   r   urllib.parser   searx.utilsr   about
categoriespaginglanguage_supporttime_range_supportbase_urlr/   r2   r3   r1   rl   r6   r>   r:   r<   ru   rK   r7   r5   <module>r      s       #  *"g	  
	   -;;
1htTJ5 *0*Z6r)r7   