
    i                     ~   d Z ddlmZmZ ddlZddlmZ ddlm	Z	 ddl
mZ ddlmZmZmZ ej                   rddlmZ dd	lmZ d
ddddddZdgZdZdZdZdZdZdZdddddZddddZd Zde dd d!dfd"Z!d#e d!e dz  fd$Z"d%ejF                  d!efd&Z$d%ejF                  d!efd'Z%d%ejF                  d!efd(Z&d)d*d!efd+Z'y),af  AOL supports WEB, image, and video search.  Internally, it uses the Bing
index.

AOL doesn't seem to support setting the language via request parameters, instead
the results are based on the URL.  For example, there is

- `search.aol.com <https://search.aol.com>`_ for English results
- `suche.aol.de <https://suche.aol.de>`_ for German results

However, AOL offers its services only in a few regions:

- en-US: search.aol.com
- de-DE: suche.aol.de
- fr-FR: recherche.aol.fr
- en-GB: search.aol.co.uk
- en-CA: search.aol.ca

In order to still offer sufficient support for language and region, the `search
keywords`_ known from Bing, ``language`` and ``loc`` (region), are added to the
search term (AOL is basically just a proxy for Bing).

.. _search keywords:
    https://support.microsoft.com/en-us/topic/advanced-search-keywords-ea595928-5d63-4a0b-9c6b-0b769865e78a

    )	urlencodeunquote_plusN)html)parser)EngineResults)eval_xpath_list
eval_xpathextract_text)SXNG_Response)OnlineParamszhttps://www.aol.comQ2407FHTML)websitewikidata_idofficial_api_documentationuse_official_apirequire_api_keyresultsgeneralsearchT
   zhttps://search.aol.com1d1w1m1y)dayweekmonthyearpri)r         c                 8    t         dvrt        dt                y )N)r   imagevideozunsupported search type )search_type
ValueError)_s    "/root/searxng/searx/engines/aol.pyinitr,   @   s#    663K=ABB 7    queryparamsr   returnc                 \   |d   j                  d      d gz   d d \  }}|r|dk7  r|  d| } |r|  d| } | |d   t        z  dz   t        d	}|d
   rd|d<   |d
   |d<   nd|d<   dt        |d       |d   d<   t         dt         dt        |       |d<   t        j                  |       y )Nsearxng_locale-r$   allz
 language:z loc:pagenor#   )qbpz
time_rangetimefr2agezsb-top-searchzvm=
safesearchcookiessBz/aol/?url)splitresults_per_pagesafesearch_mapbase_urlr(   r   loggerdebug)r.   r/   languageregionargss        r+   requestrK   E   s    /066s;tfDbqIHfH%'H:.'vh' H 0014)D lU\*U%U #N6,3G$H#IJF9djk]!IdO3DEF5M
LLr-   obfuscated_urlc                 z    | sy | j                  d      D ]#  }|j                  d      st        |dd        c S  | S )N/zRU=   )rB   
startswithr   )rL   parts     r+   _deobfuscate_urlrR   ^   sG    $$S) *??5!QR))* r-   docc                 n   t               }t        | d      D ]  }t        t        |d            }|st	        |      }|s)|j                  |j                  j                  |t        t        |d            xs dt        t        |d            xs dt        t        |d            xs d              |S )Nz7//div[@id='web']//ol/li[not(contains(@class, 'first'))]z.//h3/a/@hrefz.//h3/a $.//div[contains(@class, 'compText')]z+.//a[contains(@class, 'thm')]/img/@data-src)rA   titlecontent	thumbnail)r   r   r
   r	   rR   addtypes
MainResultrS   resresultrL   rA   s        r+   _general_resultsr`   j   s    
/C!#'`a 
%j&IJ~.II  ":fi#@AGR$Z8^%_`fdf&z&:g'hiomo	 ! 	

" Jr-   c                    t               }t        | d      D ]  }t        t        |d            }|st	        |      }|s)t        t        |d            }	 t        j                  |xs d      }|j                  |j                  j                  d|t        t        |d            t        t        |d            t        t        |d            t        t        |d	            |d
              |S # t
        j                  $ r d }Y w xY w)Nz)//div[contains(@class, 'results')]//ol/liz
.//a/@hrefz!.//div[contains(@class, 'v-age')]rU   zvideos.htmlz.//h3rV   z$.//img[contains(@class, 'thm')]/@srcz#.//span[contains(@class, 'v-time')])templaterA   rW   rX   rY   lengthpublishedDate)r   r   r
   r	   rR   r   parseParserErrorrZ   r[   LegacyResult)rS   r^   r_   rL   rA   published_date_rawpublished_dates          r+   _video_resultsrj      s   
/C!#'RS 
%j&FG~.)*V=`*ab	"#\\*<*BCN 	II"" -)*VW*EF+Jv?e,fg!-jAg.h!i*:f>c+de%3
	

: J# !! 	"!N	"s   C11D	D	c                 4   t               }t        | d      D ]~  }t        t        |d            }|st	        |      }|s)|j                  |j                  j                  d|t        t        |d            t        t        |d            |d              |S )Nz//section[@id='results']//ul/liz	./a/@hrefzimages.htmlz.//a/@aria-labelz.//img/@src)rb   rA   rW   thumbnail_srcimg_src)r   r   r
   r	   rR   rZ   r[   rg   r]   s        r+   _image_resultsrn      s    
/C!#'HI 
%j&EF~.II"" -)*V=O*PQ%1*V]2S%T"		

, Jr-   respr   c           	      Z   t        j                  | j                        }t        xdk(  r t	        |      }n.xdk(  r t        |      }ndk(  rt        |      }n	 t        d      t        |d      D ]7  }|j                  |j                  j                  dt        |      i             9 |S )Nr   r&   r'   zunsupported search typez6.//ol[contains(@class, 'searchRightBottom')]//table//a
suggestion)r   
fromstringtextr(   r`   rn   rj   r)   r   rZ   r[   rg   r
   )ro   rS   r   rq   s       r+   responsert      s    
//$))
$C
&s+G$S)G$S)G677%c+cd Z
GMM..l:>V/WXYZ Nr-   )(__doc__urllib.parser   r   typingtlxmlr   dateutilr   searx.result_typesr   searx.utilsr   r	   r
   TYPE_CHECKINGsearx.extended_typesr   searx.search.processorsr   about
categoriesr(   pagingr=   time_range_supportrC   rE   time_range_maprD   r,   strrK   rR   HtmlElementr`   rj   rn   rt    r-   r+   <module>r      s$  4 1    , A A??24 %"&	 [
	
   $tdDISS)C
3  4 2	S 	S4Z 	$** } . ((  ]  F(( ] 8? } r-   