forked from Ponysearch/Ponysearch
[mod] tootfinder: implement python module
This commit is contained in:
parent
0bcff32dd7
commit
3bc85c511c
2 changed files with 61 additions and 14 deletions
60
searx/engines/tootfinder.py
Normal file
60
searx/engines/tootfinder.py
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
# lint: pylint
|
||||||
|
"""Tootfinder (social media)
|
||||||
|
"""
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
from json import loads
|
||||||
|
from searx.utils import html_to_text
|
||||||
|
|
||||||
|
about = {
|
||||||
|
'website': "https://www.tootfinder.ch",
|
||||||
|
'official_api_documentation': "https://wiki.tootfinder.ch/index.php?name=the-tootfinder-rest-api",
|
||||||
|
'use_official_api': True,
|
||||||
|
'require_api_key': False,
|
||||||
|
'results': "JSON",
|
||||||
|
}
|
||||||
|
categories = ['social media']
|
||||||
|
|
||||||
|
base_url = "https://www.tootfinder.ch"
|
||||||
|
|
||||||
|
|
||||||
|
def request(query, params):
|
||||||
|
params['url'] = f"{base_url}/rest/api/search/{query}"
|
||||||
|
return params
|
||||||
|
|
||||||
|
|
||||||
|
def response(resp):
|
||||||
|
results = []
|
||||||
|
|
||||||
|
# the API of tootfinder has an issue that errors on server side are appended to the API response as HTML
|
||||||
|
# thus we're only looking for the line that contains the actual json data and ignore everything else
|
||||||
|
json_str = ""
|
||||||
|
for line in resp.text.split("\n"):
|
||||||
|
if line.startswith("[{"):
|
||||||
|
json_str = line
|
||||||
|
break
|
||||||
|
|
||||||
|
for result in loads(json_str):
|
||||||
|
thumbnail = None
|
||||||
|
|
||||||
|
attachments = result.get('media_attachments', [])
|
||||||
|
images = [attachment['preview_url'] for attachment in attachments if attachment['type'] == 'image']
|
||||||
|
if len(images) > 0:
|
||||||
|
thumbnail = images[0]
|
||||||
|
|
||||||
|
title = result.get('card', {}).get('title')
|
||||||
|
if not title:
|
||||||
|
title = html_to_text(result['content'])[:75]
|
||||||
|
|
||||||
|
results.append(
|
||||||
|
{
|
||||||
|
'url': result['url'],
|
||||||
|
'title': title,
|
||||||
|
'content': html_to_text(result['content']),
|
||||||
|
'thumbnail': thumbnail,
|
||||||
|
'publishedDate': datetime.strptime(result['created_at'], '%Y-%m-%d %H:%M:%S'),
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
return results
|
|
@ -2035,21 +2035,8 @@ engines:
|
||||||
disabled: true
|
disabled: true
|
||||||
|
|
||||||
- name: tootfinder
|
- name: tootfinder
|
||||||
engine: json_engine
|
engine: tootfinder
|
||||||
categories: ['social media']
|
|
||||||
paging: false
|
|
||||||
search_url: https://www.tootfinder.ch/rest/api/search/{query}
|
|
||||||
url_query: uri
|
|
||||||
title_query: card/title
|
|
||||||
content_query: content
|
|
||||||
thumbnail_query: card/image
|
|
||||||
shortcut: toot
|
shortcut: toot
|
||||||
about:
|
|
||||||
website: https://tootfinder.ch/
|
|
||||||
official_api_documentation: https://wiki.tootfinder.ch/index.php?name=the-tootfinder-rest-api
|
|
||||||
use_official_api: true
|
|
||||||
require_api_key: false
|
|
||||||
results: 'JSON'
|
|
||||||
|
|
||||||
- name: wallhaven
|
- name: wallhaven
|
||||||
engine: wallhaven
|
engine: wallhaven
|
||||||
|
|
Loading…
Reference in a new issue