
    i                         U d 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	 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	 g Zee   ez  ed<   	 d ZdefdZd Zd Zy)aT  YaCy_ is a free distributed search engine, built on the principles of
peer-to-peer (P2P) networks.

API: Dev:APIyacysearch_

Releases:

- https://github.com/yacy/yacy_search_server/tags
- https://download.yacy.net/

.. _Yacy: https://yacy.net/
.. _Dev:APIyacysearch: https://wiki.yacy.net/index.php/Dev:APIyacysearch

Configuration
=============

The engine has the following (additional) settings:

- :py:obj:`http_digest_auth_user`
- :py:obj:`http_digest_auth_pass`
- :py:obj:`search_mode`
- :py:obj:`search_type`

The :py:obj:`base_url` has to be set in the engine named `yacy` and is used by
all yacy engines (unless an individual value for ``base_url`` is configured for
the engine).

.. code:: yaml

  - name: yacy
    engine: yacy
    categories: general
    search_type: text
    shortcut: ya
    base_url:
      - https://yacy.searchlab.eu
      - https://search.lomig.me
      - https://yacy.ecosys.eu
      - https://search.webproject.link

  - name: yacy images
    engine: yacy
    categories: images
    search_type: image
    shortcut: yai
    disabled: true


Implementations
===============
    N)loads)	urlencode)parser)
DigestAuth)html_to_textzhttps://yacy.net/Q1759675z'https://wiki.yacy.net/index.php/Dev:APITFJSON)websitewikidata_idofficial_api_documentationuse_official_apirequire_api_keyresultsgeneral
    globaltextbase_urlc                 F    ddg}t         |vrt        dt         d|      y )Nr   imagezsearch_type "z" is  not one of )search_type
ValueError)_valid_typess     #/root/searxng/searx/engines/yacy.pyinitr   i   s.    K
 +%kZ[[ &    returnc                      ddl m}  t        xs | d   j                  }t        |t              rt        j                  |      }|j                  d      r|d d }|S )Nr   )enginesyacy/)searx.enginesr!   r   
isinstancelistrandomchoiceendswith)r!   urls     r   	_base_urlr,   s   sM    %#?wv'?'?C#tmmC 
||C#2hJr   c                    |d   dz
  t         z  }| |t         t        t        d}|d   dk7  rd|d   j                  d      d   z   |d	<   t	                d
t        |       |d<   t        rt        rt        t        t              |d<   |S )Npageno   )querystartRecordmaximumRecords
contentdomresourcelanguagealllang_-r   lrz/yacysearch.json?r+   auth)	number_of_resultsr   search_modesplitr,   r   http_digest_auth_userhttp_digest_auth_passr   )r0   paramsoffsetargss       r   requestrC   ~   s    X"&77F+!D jU"vj177<Q??T
 {m#4Yt_4EFF5M!6#$9;PQvMr   c           	         g }t        | j                        }|sg S |j                  dg       }t        |      dk(  rg S |d   j                  dg       D ]  }t        dk(  r5d}d|v r|d   }nd|v r|d   }n#|j                  ||d   d|d   d	d
       Ad }d|v rt        j                  |d         }|j                  |d   xs d|d   t        |d         |d        |S )Nchannelsr   itemsr   r   r+   linktitlezimages.html)r+   rH   contentimg_srctemplatepubDatedescription)r+   rH   rI   publishedDate)	r   r   getlenr   appendr   parser   )respr   raw_search_resultssearch_resultsresult
result_urlrN   s          r   responserX      s    Gtyy) 	'++J;N
>a	 #''4 $'!J#E]
6!#F^
 NN%#G_!%g - !MF" &VI-> ? NN!&>/R#G_+F=,AB%2	;$P Nr   )__doc__r(   jsonr   urllib.parser   dateutilr   httpxr   searx.utilsr   about
categoriespagingr;   r>   r?   r<   r   r   r'   str__annotations__r   r,   rC   rX    r   r   <module>re      s   2l   "   $ #"K	 [
	   2  6  $s)c/ 
\3 .6r   