mirror of
				https://github.com/searxng/searxng.git
				synced 2025-11-04 03:27:06 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			72 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# SPDX-License-Identifier: AGPL-3.0-or-later
 | 
						|
# lint: pylint
 | 
						|
"""Matrix Rooms Search - a fully-featured, standalone, matrix rooms search service.
 | 
						|
 | 
						|
Configuration
 | 
						|
=============
 | 
						|
 | 
						|
The engine has the following mandatory settings:
 | 
						|
 | 
						|
- :py:obj:`base_url`
 | 
						|
 | 
						|
.. code:: yaml
 | 
						|
 | 
						|
  - name: MRS
 | 
						|
    engine: mrs
 | 
						|
    base_url: https://mrs-host
 | 
						|
    ...
 | 
						|
 | 
						|
Implementation
 | 
						|
==============
 | 
						|
"""
 | 
						|
 | 
						|
from urllib.parse import quote_plus
 | 
						|
 | 
						|
about = {
 | 
						|
    "website": 'https://matrixrooms.info',
 | 
						|
    "wikidata_id": None,
 | 
						|
    "official_api_documentation": 'https://gitlab.com/etke.cc/mrs/api/-/blob/main/openapi.yml?ref_type=heads',
 | 
						|
    "use_official_api": True,
 | 
						|
    "require_api_key": False,
 | 
						|
    "results": 'JSON',
 | 
						|
}
 | 
						|
paging = True
 | 
						|
categories = ['social media']
 | 
						|
 | 
						|
base_url = ""
 | 
						|
matrix_url = "https://matrix.to"
 | 
						|
page_size = 20
 | 
						|
 | 
						|
 | 
						|
def init(engine_settings):  # pylint: disable=unused-argument
 | 
						|
    """The ``base_url`` must be set in the configuration, if ``base_url`` is not
 | 
						|
    set, a :py:obj:`ValueError` is raised during initialization.
 | 
						|
 | 
						|
    """
 | 
						|
    if not base_url:
 | 
						|
        raise ValueError('engine MRS, base_url is unset')
 | 
						|
 | 
						|
 | 
						|
def request(query, params):
 | 
						|
    params['url'] = f"{base_url}/search/{quote_plus(query)}/{page_size}/{(params['pageno']-1)*page_size}"
 | 
						|
    return params
 | 
						|
 | 
						|
 | 
						|
def response(resp):
 | 
						|
    results = []
 | 
						|
 | 
						|
    for result in resp.json():
 | 
						|
        results.append(
 | 
						|
            {
 | 
						|
                'url': matrix_url + '/#/' + result['alias'],
 | 
						|
                'title': result['name'],
 | 
						|
                'content': result['topic']
 | 
						|
                + f" // {result['members']} members"
 | 
						|
                + f" // {result['alias']}"
 | 
						|
                + f" // {result['server']}",
 | 
						|
                'thumbnail': result['avatar_url'],
 | 
						|
            }
 | 
						|
        )
 | 
						|
 | 
						|
    return results
 |