Non dovrai più perdere tempo a cercare qua e là la ricetta perfetta. Usa questa guida per creare la tua applicazione per la ricerca di ricette personalizzata.

Con l'abbondanza di ricette sparse su Internet con centinaia di link e pubblicità, trovare la ricetta perfetta può essere difficile. La creazione di un'app per la ricerca di ricette ti offre un'esperienza su misura e di facile utilizzo e un design coerente, eliminando tutti i risultati e le distrazioni irrilevanti

.Creando questa applicazione, affinerai le tue abilità nelle richieste HTTP, nella gestione delle chiavi API, nella manipolazione delle immagini e nella creazione di interfacce utente grafiche, incluso l'aggiornamento dinamico della GUI.

Installa il modulo Tkinter, Requests, Pillow e Webbrowser

Per creare un'applicazione per la ricerca di ricette, sono necessari Tkinter, Requests, PIL e il modulo Web browser. Tkinter ti consente di creare applicazioni desktop. Offre una varietà di widget che semplificano lo sviluppo di GUI. Per installare Tkinter, apri il terminale ed esegui:

instagram viewer
pip install tkinter

Il modulo Requests semplifica l'esecuzione di richieste HTTP e la restituzione di un oggetto risposta che contiene dati come la codifica e lo stato. Puoi usarlo per recuperare le informazioni sull'ID chiamante, creare un controllo dello stato del sito web, convertitore di valuta o un'applicazione di notizie. Per installare il modulo Richieste, apri il terminale ed esegui:

pip install requests

La libreria Pillow, un fork della Python Imaging Library (PIL), fornisce capacità di elaborazione delle immagini che aiutano a modificare, creare, convertire formati di filee salvare le immagini. Per installare il modulo Pillow, apri il terminale ed esegui:

pip install Pillow

Il modulo Web browser ti aiuta ad aprire qualsiasi link nel tuo browser predefinito. Fa parte della libreria standard di Python. Pertanto, non è necessario installarlo esternamente.

Genera la chiave API Edamam per la ricerca delle ricette

Per generare la chiave API Edamam Recipe Search, procedi nel seguente modo:

  1. Visita Edamam e clicca sul API di registrazione pulsante. Compila i dettagli e scegli il tuo piano come API Ricerca ricette - Sviluppatore.
  2. Accedi al tuo account, clicca su i Conti pulsante, quindi fare clic sul pulsante Vai a CRUSCOTTO pulsante.
  3. Successivamente, fai clic su Applicazioni scheda e infine fare clic su Visualizzazione pulsante accanto all'API di ricerca delle ricette.
  4. Copia il ID applicazione e il Chiavi dell'applicazione e salvalo per usarlo nella tua applicazione.

Costruire la funzionalità per ottenere le 5 migliori ricette

Puoi trovare l'intero codice sorgente per creare un'applicazione di ricerca di ricette usando Python in questo Deposito GitHub.

Importa i moduli richiesti. Definire un metodo get_top_5_ricette() che recupera titoli, immagini e collegamenti delle prime cinque ricette del piatto che l'utente cerca. Utilizzo Ottenere() per estrarre il nome del piatto cercato dall'utente.

Se l'utente ha immesso il nome di una ricetta, definisci l'URL di base per l'endpoint di ricerca delle ricette dell'API Edamam. Passa il app_id E chiave_app copiato in precedenza per autenticare e autorizzare le richieste 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

Crea un dizionario, parametri che contiene i diversi parametri che devi passare come parte della richiesta API. Imposta le coppie chiave-valore per Q, app_id, E chiave_app ai valori che hai ottenuto in precedenza. Impostare il da E A parametri per riflettere il numero di risultati che desideri visualizzare.

Invia una richiesta GET all'API Edamam combinando l'URL dell'API e il file parametri dizionario. Memorizza la risposta ed estraila in formato JSON. Chiamata clear_recipe_list() per cancellare le ricette presenti sullo schermo dalle richieste precedenti.

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

Controlla se la chiave, colpi è presente nei dati JSON estratti e se contiene il risultato della ricerca. In caso affermativo, scorrere i risultati della ricerca ed estrarre le informazioni sulla ricetta una per una. Invia una richiesta GET all'URL dell'immagine con l'estensione flusso parametro impostato su VERO per consentire lo streaming di dati immagine.

Usa i moduli del cuscino Immagine class per aprire l'immagine che hai ricevuto. Ridimensionalo per avere un'altezza e una larghezza di 200 pixel utilizzando il file Lanczos metodo di ricampionamento per il ridimensionamento di alta qualità. Convertilo in compatibile con Tkinter FotoImmagine per visualizzarlo sull'interfaccia utente grafica.

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)

Costruire la struttura dell'applicazione

Definisci tre etichette per visualizzare il titolo della ricetta, l'immagine e il link alla ricetta. Imposta la finestra principale in cui desideri inserirla, il testo che desideri visualizzare e lo stile del carattere che dovrebbe avere. Per visualizzare l'immagine, impostare il Immagine attribuire a foto_immagine. Impostare il cursore opzione nell'etichetta del collegamento a mano2 per renderlo cliccabile.

Associare il collegamento e l'evento clic sinistro del mouse per chiamare il file link aperto() funzione. Organizza tutti i widget utilizzando il file pacchetto metodo, centrarli orizzontalmente e aggiungere il padding se necessario. Aggiungi il titolo, le immagini e i collegamenti a tre diversi elenchi.

 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)

Definire un metodo, clear_recipe_list() per cancellare l'intero contenuto dello schermo generato dalla richiesta precedente. Cancella il contenuto dell'elenco delle ricette e ripeti ogni etichetta nel file etichetta_ricetta elenco.

Chiamando il pack_forget() metodo per rimuovere l'etichetta dal display ma mantenere intatto l'oggetto widget.

Cancella il ricette_etichette elenco per i nuovi dati. Ripeti questo processo anche per le immagini e i link. Definire un metodo, link aperto() per aprire il collegamento alla ricetta nel browser Web predefinito.

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)

Inizializza la finestra root di Tkinter. Imposta il titolo, le dimensioni e il colore di sfondo dell'applicazione. Definisci un widget frame e imposta il suo elemento genitore insieme al suo colore di sfondo. Crea un'etichetta, una voce e un pulsante di ricerca. Organizza tutti i widget utilizzando il pacchetto metodo e aggiungere il padding se necessario.

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)

Crea una tela con uno sfondo bianco per visualizzare i widget contenenti le informazioni sulla ricetta. Organizzalo sul lato sinistro della finestra, occupando tutto lo spazio nella cornice in entrambe le direzioni ed espandendolo al ridimensionamento.

Crea una barra di scorrimento verticale per la tela e posizionala sul lato destro. Collega il scrollbar.set metodo al canvas.yview metodo in modo che lo scorrimento della barra di scorrimento scorra il contenuto dell'area di disegno.

Crea una cornice all'interno della tela per fungere da contenitore per gli elementi della ricetta, ancorando nella parte superiore sinistra della finestra. Lega il evento tale da garantire che la casella possa scorrere correttamente quando il suo contenuto cambia o si ridimensiona.

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

Definisci l'elenco per ricette, etichette, immagini e collegamenti. IL ciclo principale() La funzione dice a Python di eseguire il ciclo di eventi Tkinter e di ascoltare gli eventi finché non chiudi la finestra.

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

root.mainloop()

Metti tutto insieme e scopri le cucine con un clic di un pulsante.

L'output dell'applicazione Trova ricetta

Eseguendo il programma e inserendo il piatto come Chicken Burger, ottieni i primi cinque risultati. Contiene il titolo, l'immagine e il link alla ricetta del piatto che hai inserito. Facendo clic sul collegamento, il browser Web predefinito apre il collegamento della ricetta. Scorrendo verso il basso, la dimensione del contenuto rimane la stessa e visualizza i vari risultati centrati orizzontalmente.

Miglioramento dell'applicazione Trova ricette

Per migliorare la tua applicazione per la ricerca di ricette, puoi implementare il filtraggio e l'ordinamento in base alle diverse preferenze. Puoi filtrare un piatto in base alle preferenze dietetiche, al tempo di cottura e alla cucina e ordinarli in qualsiasi ordine.

Crea una funzione per aggiungere ai segnalibri le tue ricette preferite da visualizzare in un secondo momento e un'opzione per condividerle sui social media. Puoi creare una categoria per scoprire i piatti più cercati, più segnalati e così via.

Combinando le tue capacità di programmazione e le potenti funzionalità delle API, puoi convertire ulteriormente questa applicazione di base in una vera e propria.