From 51236ae47ae24f489f85d63db90302c2d75b8129 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Mon, 18 Sep 2023 11:02:01 +0200 Subject: [PATCH] [feat] engine: implementation of chefkoch.de --- searx/engines/chefkoch.py | 72 +++++++++++++++++++++++++++++++++++++++ searx/settings.yml | 6 ++++ 2 files changed, 78 insertions(+) create mode 100644 searx/engines/chefkoch.py diff --git a/searx/engines/chefkoch.py b/searx/engines/chefkoch.py new file mode 100644 index 000000000..9dc6ae0dd --- /dev/null +++ b/searx/engines/chefkoch.py @@ -0,0 +1,72 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# lint: pylint +"""Chefkoch is a German database of recipes. +""" + +from datetime import datetime +from urllib.parse import urlencode + +about = { + 'website': "https://www.chefkoch.de", + 'official_api_documentation': None, + 'use_official_api': False, + 'require_api_key': False, + 'results': 'JSON', + 'language': 'de', +} + +paging = True +categories = [] + +number_of_results = 20 +skip_premium = True + + +base_url = "https://api.chefkoch.de" +thumbnail_format = "crop-240x300" + + +def request(query, params): + args = {'query': query, 'limit': number_of_results, 'offset': (params['pageno'] - 1) * number_of_results} + params['url'] = f"{base_url}/v2/search-gateway/recipes?{urlencode(args)}" + return params + + +def response(resp): + results = [] + + json = resp.json() + + for result in json['results']: + recipe = result['recipe'] + + if skip_premium and (recipe['isPremium'] or recipe['isPlus']): + continue + + publishedDate = None + if recipe['submissionDate']: + publishedDate = datetime.strptime(result['recipe']['submissionDate'][:19], "%Y-%m-%dT%H:%M:%S") + + content = ( + "difficulity: " + + str(recipe['difficulty']) + + " / preparation time: " + + str(recipe['preparationTime']) + + "min / ingredient count: " + + str(recipe['ingredientCount']) + ) + + if recipe['subtitle']: + content = f"{recipe['subtitle']} / {content}" + + results.append( + { + 'url': recipe['siteUrl'], + 'title': recipe['title'], + 'content': content, + 'thumbnail': recipe['previewImageUrlTemplate'].replace("", thumbnail_format), + 'publishedDate': publishedDate, + } + ) + + return results diff --git a/searx/settings.yml b/searx/settings.yml index 2736cc150..6946b89db 100644 --- a/searx/settings.yml +++ b/searx/settings.yml @@ -448,6 +448,12 @@ engines: categories: images shortcut: opv + - name: chefkoch + engine: chefkoch + shortcut: chef + # to show premium or plus results too: + # skip_premium: false + # - name: core.ac.uk # engine: core # categories: science