
    i                        d Z ddlmZ ddlm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 dd	d
ddddZdZdZdZdZdZddgZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#d$d%d&d'Z%d( Z&d) Z'd* Z(d+ Z)d, Z*d- Z+d.e	fd/Z,y0)1zMojeek (general, images, news)    )datetime)	urlencode)relativedelta)html)EngineTraits)
eval_xpatheval_xpath_listextract_textzhttps://mojeek.com	Q60747299zAhttps://www.mojeek.com/support/api/search/request_parameters.htmlFHTML)websitewikidata_idofficial_api_documentationuse_official_apirequire_api_keyresultsT
   zhttps://www.mojeek.comgeneralweb z1//ul[@class="results-standard"]/li/a[@class="ob"]z./@hrefz../h2/az..//p[@class="s"]z8//div[@class="top-info"]/p[@class="top-info spell"]/em/az3//div[@id="results"]/div[contains(@class, "image")]z	./a/@hrefz./a/@data-titlez./a/img/@srcz://section[contains(@class, "news-search-result")]//articlez.//h2/a/@hrefz.//h2/az.//p[@class="s"]lbarcdaysweeksmonthsyears)dayweekmonthyearc                 8    t         dvrt        dt                y )N)r   imagesnewsInvalid search type )search_type
ValueError)_s    %/root/searxng/searx/engines/mojeek.pyinitr)   5   s#    00/}=>> 1    c                 :   d| dt        |d   d      t        t        j                  |d   t        j                  d         t
        t        j                  |d   t        j                  d         i}t        r	t        |d<   t        d	k(  r|d
   dkD  rd|d
   dz
  z  |d<   |d   rat        dk7  rXt        |d      di}t        j                         t        di |z
  j                  d      |d<   t        j                  |d          t         dt!        |       |d<   |S )Nqsafe
safesearch   searxng_localelanguage_all
region_allfmtr   pagenor   s
time_ranger"   z%Y%m%dsincez/search?url )minlanguage_paramtraitsget_languagecustomregion_param
get_regionr%   _delta_kwargsr   nowr   strftimeloggerdebugbase_urlr   )queryparamsargskwargss       r(   requestrK   :   s   UF<(!,++F3C,DfmmTbFcdf''/?(@&--P\B]^	D !U bVH-1&*Q./S	lx 7| 45q9!-*A&*AAKKHUWT']#j4(9:F5MMr*   c                 J   g }t        | t              D ]\  }|j                  t        t	        |t
                    t        t	        |t                    t        t	        |t                    d       ^ t	        | t              D ]  }|j                  dt        |      i         |S )Nr8   titlecontent
suggestion)	r	   results_xpathappendr
   r   	url_xpathtitle_xpathcontent_xpathsuggestion_xpath)domr   resultrP   s       r(   _general_resultsrY   S   s    G!#}5 
#Jvy$AB%j&EF'
6=(IJ	

 !&67 A
l:&>?@A Nr*   c                     g }t        | t              D ]e  }|j                  dt        t	        |t
                    t        t	        |t                    t        t        t	        |t                    z   dd       g |S )Nzimages.htmlr   )templater8   rN   img_srcrO   )	r	   image_results_xpathrR   r
   r   image_url_xpathimage_title_xpathrF   image_img_src_xpathrW   r   rX   s      r(   _image_resultsrb   e   sp    G!#':; 	
)#Jv$GH%j9J&KL#l:fFY3Z&[[	
	
 Nr*   c                     g }t        | t              D ]\  }|j                  t        t	        |t
                    t        t	        |t                    t        t	        |t                    d       ^ |S )NrM   )r	   news_results_xpathrR   r
   r   news_url_xpathnews_title_xpathnews_content_xpathra   s      r(   _news_resultsrh   v   se    G!#'9: 
#Jv~$FG%j9I&JK'
6;M(NO	

 Nr*   c                     t        j                  | j                        }t        dk(  rt	        |      S t        dk(  rt        |      S t        dk(  rt        |      S t        dt               )Nr   r"   r#   r$   )r   
fromstringtextr%   rY   rb   rh   r&   )resprW   s     r(   responserm      s`    
//$))
$Cb$$hc""fS!!
+K=9
::r*   engine_traitsc                 t   dd l }ddlm}m} ddlm}m} ddlm}  |t        dz   ddid	      }|j                  st        d
      t        j                  |j                        }t        |dt          d      }	|	d   | j"                  d<   |	dd  D ]=  }
|j%                  |      5   ||
      }|
| j&                  |j(                  <   d d d        ? t        |dt*         d      }|d   | j"                  d<   |dd  D ]/  }
 ||
| j&                        D ]  }|
| j,                   ||      <    1 y # 1 sw Y   xY w)Nr   )LocaleUnknownLocaleError)get_official_locales
region_tag)getz/preferenceszAccept-Languagezen-US,en;q=0.5   )headerstimeoutzResponse from Mojeek is not OK.z//select[@name="z"]/option/@valuer1   r/   r2      )
contextlibbabelrp   rq   searx.localesrr   rs   searx.networkrt   rF   okRuntimeErrorr   rj   rk   r	   r;   r>   suppress	languageslanguager?   regions)rn   ry   rp   rq   rr   rs   rt   rl   rW   r   codelocaler   s                r(   fetch_traitsr      sM   0>!>!"$45D
 77<==
//$))
$C'77GGW%XYI+4Q<M(!" <  !34 	<D\F7;M##FOO4	< 	<<
 c%5l^CS#TUG)0M& =*41H1HI 	=F8<M!!*V"45	==	< 	<s   $"D..D7	N)-__doc__r   urllib.parser   dateutil.relativedeltar   lxmlr   searx.enginelib.traitsr   searx.utilsr   r	   r
   aboutpagingr.   time_range_supportmax_pagerF   
categoriesr%   rQ   rS   rT   rU   rV   r]   r^   r_   r`   rd   re   rf   rg   r;   r?   rA   r)   rK   rY   rb   rh   rm   r   r9   r*   r(   <module>r      s    $  " 0  / A A $"e	 

 #
C	#M K % $ Q   ' (GT?
2$";"= "=r*   