get-your-recipes / api /spoonacular_api.py
Dieu-Sang's picture
update edamam api
211b763
import requests
import json
import os
READ_KEY_FROM_FILE = True
def read_json_to_dict(file_path) -> dict:
try:
with open(file_path, 'r') as file:
data = json.load(file)
return data
except FileNotFoundError:
print("File not found at the specified path.")
return {}
except json.JSONDecodeError:
print("Error decoding JSON file.")
return {}
def get_recipes_by_macronutrients(spoonacular_api_key: str, calories: int, protein_grams: int, carbs_grams: int, fat_grams: int, nb_recipes: int) -> list:
if not spoonacular_api_key:
return []
params = {
'apiKey': spoonacular_api_key,
'minCalories': int(calories) - 50,
'maxCalories': int(calories) + 50,
'minProtein': int(protein_grams) - 5,
'maxProtein': int(protein_grams) + 5,
'minCarbs': int(carbs_grams) - 5,
'maxCarbs': int(carbs_grams) + 5,
'minFat': int(fat_grams) - 5,
'maxFat': int(fat_grams) + 5,
'number': nb_recipes,
}
response = requests.get(url='https://api.spoonacular.com/recipes/findByNutrients', params=params)
if response.status_code == 200:
recipes = response.json()
if recipes:
return recipes
else:
return []
else:
print(f"Error {response.status_code}: {response.text}")
return []
def get_recipe_information_by_id(spoonacular_api_key, id) -> dict:
if not spoonacular_api_key:
return {}
params = {
'apiKey': spoonacular_api_key,
}
response = requests.get(url=f'https://api.spoonacular.com/recipes/{id}/information', params=params)
if response.status_code == 200:
information = response.json()
return information if information else {}
else:
print(f"Error {response.status_code}: {response.text}")
return {}
def print_recipe_macronutrients(recipe):
if recipe:
print(f"Recipe: {recipe['title']}")
print(f"Calories: {recipe['calories']}")
print(f"Protein: {recipe['protein']}")
print(f"Carbs: {recipe['carbs']}")
print(f"Fat: {recipe['fat']}")
else:
print("No recipe found")
def print2string_recipe_macronutrients(recipe) -> str:
string = f""
if recipe:
string += f"Recipe: {recipe['title']}\n"
string += f"Calories: {recipe['calories']}\n"
string += f"Protein: {recipe['protein']}\n"
string += f"Carbs: {recipe['carbs']}\n"
string += f"Fat: {recipe['fat']}\n"
else:
string += "No recipe found\n"
return string
def print_recipe_information(recipe_info):
if recipe_info:
print(f"Ingredients:")
for ingredient in recipe_info["extendedIngredients"]:
print(f"- {ingredient['original']}")
url = recipe_info['spoonacularSourceUrl']
print(f"URL: {url}\n")
else:
print("No recipe information found")
def print2string_recipe_information(recipe_info) -> str:
string = ""
if recipe_info:
string += f"Ingredients:\n"
for ingredient in recipe_info["extendedIngredients"]:
string += f"- {ingredient['original']}\n"
url = recipe_info['spoonacularSourceUrl']
string += f"URL: {url}\n"
else:
string += "No recipe information found\n"
return string
def print_recipe(recipe, recipe_info):
if recipe:
print_recipe_macronutrients(recipe)
else:
print("No recipe found")
if recipe_info:
print_recipe_information(recipe_info)
else:
print("No recipe information found")
def print2string_recipe(recipe, recipe_info) -> str:
string = ""
if recipe:
string += print2string_recipe_macronutrients(recipe)
else:
string += "No recipe found\n"
if recipe_info:
string += print2string_recipe_information(recipe_info)
else:
string += "No recipe information found\n"
return string
if __name__ == "__main__":
if READ_KEY_FROM_FILE:
CURRENT_DIR = os.path.dirname(os.path.realpath(__file__))
spoonacular_api_key = read_json_to_dict(file_path=f"{CURRENT_DIR}/api_key.json")['spoonacular_api_key']
else:
spoonacular_api_key = input('Enter your spoonacular api key: ')
recipes = get_recipes_by_macronutrients(
spoonacular_api_key=spoonacular_api_key,
calories=600,
protein_grams=25,
carbs_grams=50,
fat_grams=25,
nb_recipes=3)
for recipe in recipes:
recipe_info = get_recipe_information_by_id(
spoonacular_api_key=spoonacular_api_key,
id=recipe['id'])
print()
print(print2string_recipe(recipe, recipe_info))