
    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dd	d
ddZd	Z	dgZ
dZ	 dZ	 d Zd Zd Zd Zd Zd Zy)ay  This engine uses the Lemmy API (https://lemmy.ml/api/v3/search), which is
documented at `lemmy-js-client`_ / `Interface Search`_.  Since Lemmy is
federated, results are from many different, independent lemmy instances, and not
only the official one.

.. _lemmy-js-client: https://join-lemmy.org/api/modules.html
.. _Interface Search: https://join-lemmy.org/api/interfaces/Search.html

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

The engine has the following additional settings:

- :py:obj:`base_url`
- :py:obj:`lemmy_type`

This implementation is used by different lemmy engines in the :ref:`settings.yml
<settings engines>`:

.. code:: yaml

  - name: lemmy communities
    lemmy_type: Communities
    ...
  - name: lemmy users
    lemmy_type: Users
    ...
  - name: lemmy posts
    lemmy_type: Posts
    ...
  - name: lemmy comments
    lemmy_type: Comments
    ...

Implementations
===============

    )datetime)	urlencode)gettext)markdown_to_textzhttps://lemmy.ml/	Q84777032zhttps://join-lemmy.org/api/TFJSON)websitewikidata_idofficial_api_documentationuse_official_apirequire_api_keyresultszsocial mediaCommunitiesc                 N    | |d   t         d}t         dt        |       |d<   |S )Npageno)qpagetype_zapi/v3/search?url)
lemmy_typebase_urlr   )queryparamsargss      $/root/searxng/searx/engines/lemmy.pyrequestr   D   s7    x D  jy.?@F5MM    c                    g }| d   D ]  }|d   }t        d       d|j                  dd       dt        d       d|j                  dd       dt        d       d|j                  d	d       }|j                  |d
   d   |d
   d   t        |d
   j                  dd            |d
   j                  d|d
   j                  d            t	        j
                  |d   d d d      |d        |S )Ncommunitiescountssubscribers: r    | postszactive usersusers_active_half_year	communityactor_idtitledescription iconbanner	published   %Y-%m-%dT%H:%M:%Sr   r(   content	thumbnailpublishedDatemetadata)r   getappendr   r   strptime)jsonr   resultr    r4   s        r   _get_communitiesr:   O   s"   G}% 
!}%&bM1)E(F''"#2fjj!&<%='.)*"VZZ8PRS-T,UW 	
 	k*:6,W5+F;,?,C,CMSU,VW#K044VVK=P=T=TU]=^_!)!2!26+3Fs3KM`!a$		

" Nr   c                     g }| d   D ]?  }|j                  |d   d   |d   d   t        |d   j                  dd            d       A |S )Nuserspersonr'   namebior*   )r   r(   r1   )r6   r   r5   )r8   r   r9   s      r   
_get_usersr@   f   sf    Gw- 
h'
3)&1+F8,<,@,@,KL	

 Nr   c                    g }| d   D ]  }|d   j                  d|d   d         }d }|d   j                  d      r|d   d   dz   }d|d	   d
    d|d	   d    dt        d       d| dt        d       d|d	   d    dt        d       d|d   d    }|d   j                  dd      j                         }|rt        |      }|j	                  |d   d   |d   d   ||t        j                  |d   d   d d d      |d        |S )Nr$   creatordisplay_namer>   postthumbnail_urlz?format=webp&thumbnail=208	&#x25B2; r    upvotes
 &#x25BC; 	downvotesr#   userr"   commentsr&   r(   bodyr*   ap_idr-   r.   r/   r0   )r5   r   stripr   r6   r   r7   )r8   r   r9   rJ   r2   r4   r1   s          r   
_get_postsrO   u   sn   Gw- 
i $$^VI5Fv5NO	&>o.v7:VVI x(34Jvh?OP[?\>]'&/""TF'*%&b)9*)E(F'+&'r&*=g*F)GI 	 .$$VR0668&w/Gf~g./"&!)!2!26&>+3NsPR3SUh!i$		
%
: Nr   c                    g }| d   D ]  }|d   j                  d|d   d         }|d   j                  dd      j                         }|rt        |      }d|d	   d
    d|d	   d    dt        d       d| dt        d       d|d   d    }|j	                  |d   d   |d   d   t        |d   d         t        j                  |d   d   d d d      |d        |S )NrK   rB   rC   r>   commentr1   r*   rF   r    rG   rH   rI   r#   rJ   r"   r&   r(   rM   rD   r-   r.   r/   )r   r(   r1   r3   r4   )r5   rN   r   r   r6   r   r7   )r8   r   r9   rJ   r1   r4   s         r   _get_commentsrR      s6   Gz" 
i $$^VI5Fv5NO#''	26<<>&w/G x(34Jvh?OP[?\>]'&/""TF'+&'r&*=g*F)GI 	 	i(1/+F9,=i,HI!)!2!26)3D[3QRUSU3VXk!l$	

. Nr   c                     | j                         }t        dk(  rt        |      S t        dk(  rt        |      S t        dk(  rt	        |      S t        dk(  rt        |      S t        dt               )Nr   UsersPostsCommentszUnsupported lemmy type: )r8   r   r:   r@   rO   rR   
ValueError)respr8   s     r   responserY      sl    99;D]"%%W$W$ZT""
/
|<
==r   N)__doc__r   urllib.parser   flask_babelr   searx.utilsr   aboutpaging
categoriesr   r   r   r:   r@   rO   rR   rY    r   r   <module>rb      sv   %N  "  ( #"?	 

 
 @. F:>r   