Ne perdez plus de temps à chercher ici et là la recette parfaite. Utilisez ce guide pour créer votre application de recherche de recettes personnalisée.
Avec l'abondance de recettes dispersées sur Internet avec des centaines de liens et de publicités, trouver la recette parfaite peut être difficile. La création d'une application de recherche de recettes vous offre une expérience personnalisée et conviviale, ainsi qu'une conception cohérente, éliminant tous les résultats et distractions non pertinents.
.En construisant cette application, vous affinerez vos compétences dans les requêtes HTTP, la gestion des clés API, la manipulation d'images et la création d'interfaces utilisateur graphiques, y compris la mise à jour dynamique de l'interface graphique.
Installez les modules Tkinter, Requests, Pillow et Webbrowser
Pour créer une application de recherche de recettes, vous avez besoin de Tkinter, de Requests, de PIL et du module Webbrowser. Tkinter vous permet de créer des applications de bureau. Il offre une variété de widgets qui facilitent le développement d'interfaces graphiques. Pour installer Tkinter, ouvrez le terminal et exécutez :
pip install tkinter
Le module Requests simplifie la création de requêtes HTTP et renvoie un objet de réponse contenant des données telles que l'encodage et l'état. Vous pouvez l'utiliser pour récupérer les informations d'identification de l'appelant, créer un vérificateur de statut de site Web, convertisseur de devises ou une application d'actualité. Pour installer le module Requests, ouvrez le terminal et exécutez :
pip install requests
La bibliothèque Pillow - un fork de la Python Imaging Library (PIL) - fournit des capacités de traitement d'image qui aident à éditer, créer, conversion de formats de fichiers, et l'enregistrement des images. Pour installer le module Pillow, ouvrez le terminal et exécutez :
pip install Pillow
Le module Webbrowser vous aide à ouvrir n'importe quel lien dans votre navigateur par défaut. Il fait partie de la bibliothèque standard Python. Par conséquent, vous n'avez pas besoin de l'installer en externe.
Générer une clé API Edamam pour la recherche de recettes
Pour générer la clé API Edamam Recipe Search, procédez comme suit :
- Visite Edamam et cliquez sur le API d'inscription bouton. Remplissez les détails et choisissez votre plan comme API de recherche de recettes - Développeur.
- Connectez-vous à votre compte, cliquez sur les comptes bouton, puis cliquez sur le Aller au tableau de bord bouton.
- Après cela, cliquez sur le Applications puis cliquez sur l'onglet Voir bouton à côté de l'API de recherche de recettes.
- Copiez le ID d'application et le Clés d'application et stockez-le pour l'utiliser dans votre application.
Construire la fonctionnalité pour obtenir les 5 meilleures recettes
Vous pouvez trouver le code source complet pour créer une application de recherche de recettes à l'aide de Python dans ce Référentiel GitHub.
Importez les modules requis. Définir une méthode get_top_5_recipes() qui récupère les titres, les images et les liens des cinq meilleures recettes du plat recherché par l'utilisateur. Utiliser obtenir() pour extraire le nom du plat recherché par l'utilisateur.
Si l'utilisateur a saisi un nom de recette, définissez l'URL de base pour le point de terminaison de recherche de recette de l'API Edamam. Passe le app_id et app_key vous avez copié précédemment pour authentifier et autoriser les demandes d'API.
import tkinter as tk
import requests
from PIL import Image, ImageTk
import webbrowser
defget_top_5_recipes():
recipe_name = entry_recipe_name.get()
if recipe_name:
api_url = "https://api.edamam.com/search"
app_id = # Put your app id for edamam api
app_key = # Put your app key for edamam api
Créer un dictionnaire, paramètres qui contient les différents paramètres que vous devez transmettre dans le cadre de la requête API. Définissez les paires clé-valeur pour q, app_id, et app_key aux valeurs que vous avez obtenues plus tôt. Met le depuis et à paramètres pour refléter le nombre de résultats que vous voulez voir.
Envoyez une requête GET à l'API Edamam en combinant l'URL de l'API et le paramètres dictionnaire. Stockez la réponse et extrayez-la au format JSON. Appel clear_recipe_list() pour effacer les recettes présentes à l'écran des demandes précédentes.
params = {
"q": recipe_name,
"app_id": app_id,
"app_key": app_key,
"from": 0,
"to": 5,
}
response = requests.get(api_url, params=params)
data = response.json()
clear_recipe_list()
Vérifiez si la clé, les coups est présent dans les données JSON extraites et s'il contient le résultat de la recherche. Si oui, parcourez les résultats de la recherche et extrayez les informations de recette une par une. Envoyez une requête GET à l'URL de l'image avec le flux paramètre réglé sur Vrai pour permettre le streaming de données d'image.
Utilisez le module Oreiller Image class pour ouvrir l'image que vous avez reçue. Redimensionnez-le pour avoir une hauteur et une largeur de 200 pixels en utilisant le Lanczos méthode de rééchantillonnage pour un redimensionnement de haute qualité. Convertissez ceci en compatible Tkinter PhotoImage pour l'afficher sur l'interface utilisateur graphique.
if"hits"in data and data["hits"]:
for i, hit in enumerate(data["hits"]):
recipe = hit["recipe"]
recipe_list.append(recipe)
recipe_name = recipe["label"]
recipe_link = recipe["url"]
image_url = recipe["image"]
image_response = requests.get(image_url, stream=True)
image = Image.open(image_response.raw)
image = image.resize((200, 200), Image.LANCZOS)
photo_image = ImageTk.PhotoImage(image)
Construire la structure de l'application
Définissez trois étiquettes pour afficher le titre de la recette, l'image et le lien vers la recette. Définissez la fenêtre parente dans laquelle vous souhaitez la placer, le texte que vous souhaitez afficher et le style de police qu'elle doit avoir. Pour afficher l'image, réglez le image attribuer à photo_image. Met le le curseur option dans l'étiquette du lien vers main2 pour le rendre cliquable.
Liez le lien et l'événement clic gauche de la souris pour appeler le ouvrir le lien() fonction. Organisez tous les widgets à l'aide du paquet méthode, centrez-les horizontalement et ajoutez le rembourrage si nécessaire. Ajoutez le titre, les images et les liens à trois listes différentes.
recipe_title_label = tk.Label(
canvas_frame,
text=f"{i+1}. {recipe_name}",
font=("Helvetica", 12, "bold"),
)
recipe_title_label.pack(pady=(5, 0), anchor=tk.CENTER)image_response = requests.get(image_url, stream=True)
image = Image.open(image_response.raw)
image = image.resize((200, 200), Image.LANCZOS)
photo_image = ImageTk.PhotoImage(image)
image_label = tk.Label(canvas_frame, image=photo_image)
image_label.image = photo_image
image_label.pack(pady=(0, 5), anchor=tk.CENTER)link_label = tk.Label(
canvas_frame, text=recipe_link, fg="blue", cursor="hand2"
)
link_label.pack(pady=(0, 10), anchor=tk.CENTER)
link_label.bind(
"" , lambda event, link=recipe_link: open_link(link)
)
recipe_labels.append(recipe_title_label)
recipe_images.append(photo_image)
recipe_links.append(link_label)
Définir une méthode, clear_recipe_list() pour effacer tout le contenu de l'écran généré par la requête précédente. Effacez le contenu de la liste de recettes et parcourez chaque étiquette dans le étiquette_recette liste.
Appelant le pack_forget() méthode pour supprimer l'étiquette de l'affichage mais garder l'objet widget intact.
Effacer le étiquettes_recettes liste pour les nouvelles données. Répétez ce processus pour les images et les liens également. Définir une méthode, ouvrir le lien() pour ouvrir le lien de la recette dans votre navigateur Web par défaut.
defclear_recipe_list():
recipe_list.clear()
for label in recipe_labels:
label.pack_forget()
recipe_labels.clear()
for image_label in recipe_images:
image_label.pack_forget()
recipe_images.clear()
for link_label in recipe_links:
link_label.pack_forget()
recipe_links.clear()
defopen_link(link):
webbrowser.open(link)
Initialisez la fenêtre racine de Tkinter. Définissez le titre, les dimensions et la couleur d'arrière-plan de l'application. Définissez un widget de cadre et définissez son élément parent avec sa couleur d'arrière-plan. Créez une étiquette, une entrée et un bouton de recherche. Organisez tous les widgets à l'aide de paquet méthode et ajouter un rembourrage si nécessaire.
root = tk.Tk()
root.title("Recipe Finder")
root.geometry("600x600")
root.configure(bg="#F1F1F1")frame = tk.Frame(root, bg="#F1F1F1")
frame.pack(fill=tk.BOTH, expand=tk.YES, padx=20, pady=20)label_recipe_name = tk.Label(
frame, text="Enter Recipe Name:", font=("Helvetica", 14, "bold"), bg="#F1F1F1"
)
label_recipe_name.pack()entry_recipe_name = tk.Entry(frame, font=("Helvetica", 12))
entry_recipe_name.pack(pady=5)
search_button = tk.Button(
frame,
text="Search Recipes",
font=("Helvetica", 12, "bold"),
command=get_top_5_recipes,
)
search_button.pack(pady=10)
Créez un canevas avec un fond blanc pour afficher les widgets contenant des informations sur la recette. Organisez-le sur le côté gauche de la fenêtre, en prenant tout l'espace dans le cadre dans les deux sens et en l'agrandissant lors du redimensionnement.
Créez une barre de défilement verticale pour le canevas et placez-la sur son côté droit. Liez le barre de défilement.set méthode à la canvas.yview afin que le défilement de la barre de défilement fasse défiler le contenu du canevas.
Créez un cadre à l'intérieur du canevas pour servir de conteneur pour les éléments de la recette, en l'ancrant en haut à gauche de la fenêtre. Lier le événement tel qu'il garantit que la boîte peut défiler correctement lorsque son contenu change ou se redimensionne.
canvas = tk.Canvas(frame, bg="white")
canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=tk.YES)scrollbar = tk.Scrollbar(frame, orient=tk.VERTICAL, command=canvas.yview)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
canvas.configure(yscrollcommand=scrollbar.set)
canvas_frame = tk.Frame(canvas, bg="white")
canvas.create_window((0, 0), window=canvas_frame, anchor=tk.NW)
canvas_frame.bind(
"" , lambda event: canvas.configure(scrollregion=canvas.bbox("all"))
)
Définissez la liste des recettes, des étiquettes, des images et des liens. Le boucle principale() La fonction indique à Python d'exécuter la boucle d'événements Tkinter et d'écouter les événements jusqu'à ce que vous fermiez la fenêtre.
recipe_list = []
recipe_labels = []
recipe_images = []
recipe_links = []
root.mainloop()
Rassemblez le tout et découvrez les cuisines en un clic.
La sortie de l'application de recherche de recettes
En exécutant le programme et en saisissant le plat comme Chicken Burger, vous obtenez les cinq meilleurs résultats. Il contient le titre, l'image et le lien de la recette du plat que vous avez entré. En cliquant sur le lien, le navigateur Web par défaut ouvre le lien de la recette. En défilant vers le bas, la taille du contenu reste la même et affiche les différents résultats centrés horizontalement.
Amélioration de l'application de recherche de recettes
Pour améliorer votre application de recherche de recettes, vous pouvez implémenter le filtrage et le tri selon différentes préférences. Vous pouvez filtrer un plat en fonction de vos préférences alimentaires, du temps de cuisson et de la cuisine, et les trier dans n'importe quel ordre.
Créez une fonctionnalité pour mettre en signet vos recettes préférées à consulter plus tard et une option pour les partager sur les réseaux sociaux. Vous pouvez créer une catégorie pour découvrir les plats les plus recherchés, les plus marqués, etc.
En combinant vos compétences en programmation et les fonctionnalités puissantes des API, vous pouvez convertir davantage cette application de base en une application à part entière.