No pierda más tiempo buscando aquí y allá la receta perfecta. Utilice esta guía para crear su aplicación de búsqueda de recetas personalizada.

Con la abundancia de recetas esparcidas por Internet con cientos de enlaces y anuncios, encontrar la receta perfecta puede ser un desafío. La creación de una aplicación de búsqueda de recetas le brinda una experiencia personalizada y fácil de usar, y un diseño consistente, eliminando todos los resultados irrelevantes y las distracciones.

Al crear esta aplicación, mejorará sus habilidades en solicitudes HTTP, administración de claves API, manipulación de imágenes y creación de interfaces gráficas de usuario, incluida la actualización dinámica de GUI.

Instale el módulo Tkinter, Requests, Pillow y Webbrowser

Para crear una aplicación de búsqueda de recetas, necesita Tkinter, Requests, PIL y el módulo Webbrowser. Tkinter te permite crear aplicaciones de escritorio. Ofrece una variedad de widgets que facilitan el desarrollo de GUI. Para instalar Tkinter, abre la terminal y ejecuta:

instagram viewer
pip install tkinter

El módulo Solicitudes simplifica la realización de solicitudes HTTP y devuelve un objeto de respuesta que contiene datos como la codificación y el estado. Puede usarlo para obtener información de identificación de llamadas, crear un verificador de estado del sitio web, convertidor de moneda, o una aplicación de noticias. Para instalar el módulo de Solicitudes, abra la terminal y ejecute:

pip install requests

La biblioteca Pillow, una bifurcación de Python Imaging Library (PIL), brinda capacidades de procesamiento de imágenes que ayudan a editar, crear, convertir formatos de archivoy guardar imágenes. Para instalar el módulo Pillow, abra la terminal y ejecute:

pip install Pillow

El módulo Webbrowser lo ayuda a abrir cualquier enlace en su navegador predeterminado. Es una parte de la biblioteca estándar de Python. Por lo tanto, no necesita instalarlo externamente.

Genere la clave API de Edamam para la búsqueda de recetas

Para generar la clave API de búsqueda de recetas de Edamam, siga los siguientes pasos:

  1. Visita edamam y haga clic en el API de registro botón. Rellena los datos, y elige tu plan como API de búsqueda de recetas - Desarrollador.
  2. Inicie sesión en su cuenta, haga clic en las cuentas y luego haga clic en el botón Ir al panel de control botón.
  3. Después de eso, haga clic en el Aplicaciones pestaña y finalmente haga clic en el Vista junto a la API de búsqueda de recetas.
  4. Copia el ID de aplicación y el Claves de aplicación y guárdelo para usarlo en su aplicación.

Construyendo la funcionalidad para obtener las 5 mejores recetas

Puede encontrar el código fuente completo para crear una aplicación de búsqueda de recetas usando Python en este repositorio GitHub.

Importe los módulos requeridos. Definir un método obtener_top_5_recetas() que recupera los títulos, imágenes y enlaces de las cinco recetas principales del plato que busca el usuario. Usar conseguir() para extraer el nombre del plato que el usuario buscó.

Si el usuario ingresó un nombre de receta, defina la URL base para el punto final de búsqueda de recetas de la API de Edamam. Pasa el id_aplicación y clave_aplicación que copió anteriormente para autenticar y autorizar solicitudes de 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

Crear un diccionario, parámetros que contiene los diferentes parámetros que debe pasar como parte de la solicitud de API. Establecer los pares clave-valor para q, id_aplicación, y clave_aplicación a los valores que obtuviste antes. Selecciona el de y a parámetros para reflejar el número de resultados que desea ver.

Envíe una solicitud GET a la API de Edamam combinando la URL de la API y el parámetros diccionario. Almacene la respuesta y extráigala en formato JSON. Llamar borrar_lista_de_recetas() para borrar las recetas presentes en la pantalla de solicitudes anteriores.

 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()

Compruebe si la llave, golpes está presente en los datos JSON extraídos y si contiene el resultado de la búsqueda. En caso afirmativo, repita los resultados de la búsqueda y extraiga la información de la receta una por una. Envíe una solicitud GET a la URL de la imagen con el arroyo parámetro establecido en Verdadero para permitir la transmisión de datos de imágenes.

Utilice el módulo de la almohada Imagen class para abrir la imagen que recibió. Cambie su tamaño para que tenga una altura y un ancho de 200 píxeles usando el Lanczos método de remuestreo para cambiar el tamaño de alta calidad. Convierta esto a compatible con Tkinter FotoImagen para mostrarlo en la interfaz gráfica de usuario.

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)

Construcción de la estructura de la aplicación

Defina tres etiquetas para mostrar el título de la receta, la imagen y el enlace a la receta. Establezca la ventana principal en la que desea colocarlo, el texto que desea mostrar y el estilo de fuente que debe tener. Para mostrar la imagen, ajuste el imagen atribuir a foto_imagen. Selecciona el cursor opción en la etiqueta del enlace a mano2 para que se pueda hacer clic.

Enlace el enlace y el evento de clic izquierdo del mouse para llamar al enlace abierto() función. Organiza todos los widgets usando el embalar método, céntrelos horizontalmente y agregue el relleno según sea necesario. Agregue el título, las imágenes y los enlaces a tres listas diferentes.

 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)

Definir un método, borrar_lista_de_recetas() para borrar todo el contenido de la pantalla generado por la solicitud anterior. Borre el contenido de la lista de recetas e itere sobre cada etiqueta en el receta_etiqueta lista.

llamando al paquete_olvidar() método para eliminar la etiqueta de la pantalla pero mantener intacto el objeto widget.

Limpiar el recetas_etiquetas lista de nuevos datos. Repita este proceso para las imágenes y los enlaces también. Definir un método, enlace abierto() para abrir el enlace de la receta en su navegador web predeterminado.

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)

Inicialice la ventana raíz de Tkinter. Establezca el título, las dimensiones y el color de fondo de la aplicación. Defina un widget de marco y establezca su elemento principal junto con su color de fondo. Cree una etiqueta, una entrada y un botón de búsqueda. Organice todos los widgets usando el embalar método y agregue relleno según sea necesario.

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)

Cree un lienzo con un fondo blanco para mostrar los widgets que contienen información de recetas. Organízalo en el lado izquierdo de la ventana, tomando todo el espacio del marco en ambas direcciones y ampliándolo al cambiar el tamaño.

Cree una barra de desplazamiento vertical para el lienzo y colóquela en su lado derecho. Vincular el barra de desplazamiento.set método a la lienzo.yview método para que al desplazar la barra de desplazamiento se desplace el contenido del lienzo.

Cree un marco dentro del lienzo para que actúe como un contenedor para los elementos de la receta, anclado en la parte superior izquierda de la ventana. Atar el evento tal que asegure que el cuadro se pueda desplazar correctamente cuando su contenido cambie o cambie de tamaño.

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"))
)

Defina la lista de recetas, etiquetas, imágenes y enlaces. El bucle principal() La función le dice a Python que ejecute el ciclo de eventos de Tkinter y escuche los eventos hasta que cierre la ventana.

recipe_list = []
recipe_labels = []
recipe_images = []
recipe_links = []

root.mainloop()

Póngalo todo junto y descubra cocinas con solo hacer clic en un botón.

El resultado de la aplicación del buscador de recetas

Al ejecutar el programa e ingresar el plato como Chicken Burger, obtienes los cinco primeros resultados. Contiene el título, la imagen y el enlace de la receta del plato que ingresó. Al hacer clic en el enlace, el navegador web predeterminado abre el enlace de la receta. Al desplazarse hacia abajo, el tamaño del contenido sigue siendo el mismo y muestra los distintos resultados centrados horizontalmente.

Mejora de la aplicación del buscador de recetas

Para mejorar su aplicación de búsqueda de recetas, puede implementar el filtrado y la clasificación según diferentes preferencias. Puede filtrar un plato según la preferencia dietética, el tiempo de cocción y la cocina, y clasificarlos en cualquier orden.

Cree una función para marcar sus recetas favoritas para verlas más tarde y una opción para compartirlas en las redes sociales. Puedes crear una categoría para descubrir los platos más buscados, más marcados, etc.

Combinando sus habilidades de programación y las potentes funciones de las API, puede convertir aún más esta aplicación básica en una completa.