
    i                         d Z ddlZddlmZmZmZmZ ddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZmZmZmZmZ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dZ ej:                  d      ZdefdZ d Z!d Z"y)am  This is the implementation of the Google Videos engine.

.. admonition:: Content-Security-Policy (CSP)

   This engine needs to allow images from the `data URLs`_ (prefixed with the
   ``data:`` scheme)::

     Header set Content-Security-Policy "img-src 'self' data: ;"

.. _data URLs:
   https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URIs
    N)	urlencodeurlparseparse_qsunquote)html)eval_xpath_listeval_xpath_getindexextract_text)fetch_traits)get_google_infotime_range_dictfilter_mappingsuggestion_xpathdetect_google_sorryui_async)get_embeded_stream_urlzhttps://www.google.comQ219885z+https://developers.google.com/custom-searchFHTML)websitewikidata_idofficial_api_documentationuse_official_apirequire_api_keyresultsvideoswebT2   z-"(dimg_[^"]*)"[^;]*;(data:image[^;]*;[^;]*);?textc                     i }t         j                  |       D ](  \  }}|j                  d      }|dkD  r|d |dz    }|||<   * t        j	                  dt        |j                                      |S )N=r      zdata:image objects --> %s)RE_DATA_IMAGEfindallrfindloggerdebuglistkeys)r   data_image_mapimg_id
data_imageend_poss        ,/root/searxng/searx/engines/google_videos.pyparse_data_imagesr.   ;   s|    N+33D9 ,
""3'Q;#Mgk2J!+v	,
 LL,d>3F3F3H.IJ    c           	      ~   t        |t              }|d   dz
  dz  }d|d   z   dz   dz   t        | d|d	|d
   dt        |      d      z   }|d   t        v r |dt        ddt        |d      z   i      z   z  }d|v r|dt        dt
        |d      i      z   z  }||d<   |d   |d<   |d   j                  |d          |S )zGoogle-Video search requestpagenor!   
   zhttps://	subdomainz/search?vid)qtbmstartparamsarc)asearchasync
time_range&tbszqdr:
safesearchsafeurlcookiesheaders)r   traitsr   r   r   r   update)queryr9   google_infor8   	query_urls        r-   requestrJ   G   s   !&&1KH!R'E 	
k
"	#
	 	  h'	
 !!%	
		
 " l.S9eVof\FZ6[-[%\]]]	vS9fnVL=Q.R%STTT	F5M#I.F9
9[34Mr/   c                    g }t        |        t        | j                        }t        j                  | j                        }t        |d      }|D ]  }t        t        |ddd      d      }t        |ddd      }|r1|j                  d	      r t        |d
d j                  d      d         }t        t        |ddd      d      }t        t        |ddd      d      }	t        |ddd      }
t        t        |ddd      d      }t        |ddd      }|s:|r8d|v r4t        |      }t        |j                        j                  ddg      d   }|
r.|
j                  d      rt        |ddd      }|r
||v r||   }
nd}
|
s|rd| d}
d}|rt        d|       }n|rt        |      }|sf|sj|j!                  |||xs d|	|
||dd        t        |t"              D ]  }|j!                  dt        |      i         |S )z)Get response from google's search requestz!//div[contains(@class, "MjjYud")]z;.//h3[contains(@class, "LC20lb")] | .//div[@role="heading"]r   N)defaultT)
allow_nonezE.//a[@jsname="UWckNb"]/@href | .//a[contains(@href, "/url?q=")]/@hrefz/url?q=   z&sa=Uz".//div[contains(@class, "ITZIwc")]zG.//div[contains(@class, "gqF9jc")] | .//div[contains(@class, "WRu9Cd")]z.//img/@srcz#.//span[contains(@class, "k1U36b")]z(.//div[@jscontroller="rTuANe"]/@data-vidzyoutube.comvz
data:imagez
.//img/@idzhttps://img.youtube.com/vi/z/hqdefault.jpgz https://www.youtube.com/watch?v= zvideos.html)rB   titlecontentauthor	thumbnaillength
iframe_srctemplate
suggestion)r   r.   r   r   
fromstringr   r
   r	   
startswithr   splitr   r   rG   getr   appendr   )respr   r)   domresult_divsresultrQ   rB   rR   pub_inforT   durationvideo_id
parsed_urlr*   	embed_urlrX   s                    r-   responserg   h   s[   G&tyy1N //$))
$C!#'JKK  >(eghrvw
 "[]^hl
 3>>),#ab'--034C(LaY]^ko
  acdnr 	
 (q$O	(MqZ^_lp
 'v/Y[\fjk CMS$8!#J
 0 0155cD6B1EH --l;(q$OF&N2*62	 	X5hZ~NI 	.1QRZQ[/\]I.s3I SNN"&}"&!*&"+ -	g>B &c+;< A
l:&>?@A Nr/   )#__doc__reurllib.parser   r   r   r   lxmlr   searx.utilsr   r	   r
   searx.engines.googler   r   r   r   r   r   r   r   about
categoriespagingmax_pagelanguage_supporttime_range_supportr@   compiler"   strr.   rJ   rg    r/   r-   <module>rw      s    
 ? ?   .  / ("O	 
	  

 

KL	C 	BQr/   