72 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			72 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|  | # SPDX-License-Identifier: AGPL-3.0-or-later | ||
|  | """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("<format>", thumbnail_format), | ||
|  |                 'publishedDate': publishedDate, | ||
|  |             } | ||
|  |         ) | ||
|  | 
 | ||
|  |     return results |