1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- # SPDX-License-Identifier: AGPL-3.0-or-later
- """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
|