diff --git a/searx/engines/findthatmeme.py b/searx/engines/findthatmeme.py new file mode 100644 index 000000000..e52996d69 --- /dev/null +++ b/searx/engines/findthatmeme.py @@ -0,0 +1,54 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +"""FindThatMeme (Images)""" + +from json import dumps +from datetime import datetime +from searx.utils import humanize_bytes + +about = { + "website": 'https://findthatmeme.com', + "official_api_documentation": None, + "use_official_api": False, + "require_api_key": False, + "results": "JSON", +} + +base_url = "https://findthatmeme.com/api/v1/search" +categories = ['images'] +paging = True + + +def request(query, params): + + start_index = (params["pageno"] - 1) * 50 + data = {"search": query, "offset": start_index} + params["url"] = base_url + params["method"] = 'POST' + params['headers']['content-type'] = "application/json" + params['data'] = dumps(data) + + return params + + +def response(resp): + search_res = resp.json() + results = [] + + for item in search_res: + img = 'https://findthatmeme.us-southeast-1.linodeobjects.com/' + item['image_path'] + thumb = 'https://findthatmeme.us-southeast-1.linodeobjects.com/thumb/' + item.get('thumbnail', '') + date = datetime.strptime(item["updated_at"].split("T")[0], "%Y-%m-%d") + formatted_date = datetime.utcfromtimestamp(date.timestamp()) + + results.append( + { + 'url': item['source_page_url'], + 'title': item['source_site'], + 'img_src': img if item['type'] == 'IMAGE' else thumb, + 'filesize': humanize_bytes(item['meme_file_size']), + 'publishedDate': formatted_date, + 'template': 'images.html', + } + ) + + return results diff --git a/searx/settings.yml b/searx/settings.yml index 78279d725..859b4613d 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -727,6 +727,11 @@ engines: shortcut: fd disabled: true + - name: findthatmeme + engine: findthatmeme + shortcut: ftm + disabled: true + - name: flickr categories: images shortcut: fl