chefkoch.py 1.8 KB

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