chefkoch.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. f"Schwierigkeitsstufe (1-3): {recipe['difficulty']}",
  36. f"Zubereitungszeit: {recipe['preparationTime']}min",
  37. f"Anzahl der Zutaten: {recipe['ingredientCount']}",
  38. ]
  39. if recipe['subtitle']:
  40. content.insert(0, recipe['subtitle'])
  41. results.append(
  42. {
  43. 'url': recipe['siteUrl'],
  44. 'title': recipe['title'],
  45. 'content': " | ".join(content),
  46. 'thumbnail': recipe['previewImageUrlTemplate'].replace("<format>", thumbnail_format),
  47. 'publishedDate': publishedDate,
  48. }
  49. )
  50. return results