chefkoch.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. # lint: pylint
  3. """Chefkoch is a German database of recipes.
  4. """
  5. from datetime import datetime
  6. from urllib.parse import urlencode
  7. about = {
  8. 'website': "https://www.chefkoch.de",
  9. 'official_api_documentation': None,
  10. 'use_official_api': False,
  11. 'require_api_key': False,
  12. 'results': 'JSON',
  13. 'language': 'de',
  14. }
  15. paging = True
  16. categories = []
  17. number_of_results = 20
  18. skip_premium = True
  19. base_url = "https://api.chefkoch.de"
  20. thumbnail_format = "crop-240x300"
  21. def request(query, params):
  22. args = {'query': query, 'limit': number_of_results, 'offset': (params['pageno'] - 1) * number_of_results}
  23. params['url'] = f"{base_url}/v2/search-gateway/recipes?{urlencode(args)}"
  24. return params
  25. def response(resp):
  26. results = []
  27. json = resp.json()
  28. for result in json['results']:
  29. recipe = result['recipe']
  30. if skip_premium and (recipe['isPremium'] or recipe['isPlus']):
  31. continue
  32. publishedDate = None
  33. if recipe['submissionDate']:
  34. publishedDate = datetime.strptime(result['recipe']['submissionDate'][:19], "%Y-%m-%dT%H:%M:%S")
  35. content = (
  36. "difficulity: "
  37. + str(recipe['difficulty'])
  38. + " / preparation time: "
  39. + str(recipe['preparationTime'])
  40. + "min / ingredient count: "
  41. + str(recipe['ingredientCount'])
  42. )
  43. if recipe['subtitle']:
  44. content = f"{recipe['subtitle']} / {content}"
  45. results.append(
  46. {
  47. 'url': recipe['siteUrl'],
  48. 'title': recipe['title'],
  49. 'content': content,
  50. 'thumbnail': recipe['previewImageUrlTemplate'].replace("<format>", thumbnail_format),
  51. 'publishedDate': publishedDate,
  52. }
  53. )
  54. return results