Verschwenden Sie keine Zeit mehr damit, hier und da nach dem perfekten Rezept zu suchen. Verwenden Sie diese Anleitung, um Ihre personalisierte Rezeptfinder-Anwendung zu erstellen.
Angesichts der Fülle an Rezepten im Internet mit Hunderten von Links und Anzeigen kann es schwierig sein, das perfekte Rezept zu finden. Durch die Erstellung einer Rezeptfinder-App erhalten Sie ein maßgeschneidertes und benutzerfreundliches Erlebnis sowie ein einheitliches Design, das alle irrelevanten Ergebnisse und Ablenkungen eliminiert
Durch die Erstellung dieser Anwendung vertiefen Sie Ihre Fähigkeiten in HTTP-Anfragen, API-Schlüsselverwaltung, Bildbearbeitung und dem Erstellen grafischer Benutzeroberflächen einschließlich dynamischer GUI-Aktualisierung.
Installieren Sie das Tkinter-, Requests-, Pillow- und Webbrowser-Modul
Um eine Rezeptfinder-Anwendung zu erstellen, benötigen Sie Tkinter, Requests, PIL und das Webbrowser-Modul. Mit Tkinter können Sie Desktop-Anwendungen erstellen. Es bietet eine Vielzahl von Widgets, die die Entwicklung von GUIs erleichtern. Um Tkinter zu installieren, öffnen Sie das Terminal und führen Sie Folgendes aus:
pip install tkinter
Mit dem Requests-Modul ist es einfach, HTTP-Anfragen zu stellen und ein Antwortobjekt zurückzugeben, das Daten wie Codierung und Status enthält. Sie können damit Anrufer-ID-Informationen abrufen, Erstellen Sie einen Website-Statusprüfer, Währungsumrechner, oder eine Nachrichtenanwendung. Um das Requests-Modul zu installieren, öffnen Sie das Terminal und führen Sie Folgendes aus:
pip install requests
Die Pillow-Bibliothek – ein Zweig der Python Imaging Library (PIL) – bietet Bildverarbeitungsfunktionen, die beim Bearbeiten, Erstellen, Konvertieren von Dateiformaten, und Speichern von Bildern. Um das Pillow-Modul zu installieren, öffnen Sie das Terminal und führen Sie Folgendes aus:
pip install Pillow
Das Webbrowser-Modul hilft Ihnen, jeden Link in Ihrem Standardbrowser zu öffnen. Es ist Teil der Python-Standardbibliothek. Daher ist keine externe Installation erforderlich.
Generieren Sie einen Edamam-API-Schlüssel für die Rezeptsuche
Um den API-Schlüssel für die Edamam-Rezeptsuche zu generieren, führen Sie die folgenden Schritte aus:
- Besuchen Edamam und klicken Sie auf Anmelde-API Taste. Geben Sie die Details ein und wählen Sie Ihren Plan aus Rezeptsuch-API – Entwickler.
- Melden Sie sich bei Ihrem Konto an und klicken Sie auf Die Accounts Klicken Sie dann auf die Schaltfläche Gehen Sie zum Dashboard Taste.
- Klicken Sie anschließend auf Anwendungen Tab und klicken Sie abschließend auf Sicht Schaltfläche neben der Rezeptsuch-API.
- Kopiere das Anwendungs-ID und das Anwendungsschlüssel und speichern Sie es zur Verwendung in Ihrer Anwendung.
Aufbau der Funktionalität, um die 5 besten Rezepte zu erhalten
Den gesamten Quellcode zum Erstellen einer Rezeptfinder-Anwendung mit Python finden Sie hier GitHub-Repository.
Importieren Sie die erforderlichen Module. Definieren Sie eine Methode get_top_5_recipes() Dadurch werden die Titel, Bilder und Links der fünf besten Rezepte des Gerichts abgerufen, nach dem der Benutzer sucht. Verwenden erhalten() um den Namen des Gerichts zu extrahieren, nach dem der Benutzer gesucht hat.
Wenn der Benutzer einen Rezeptnamen eingegeben hat, definieren Sie die Basis-URL für den Rezeptsuch-Endpunkt der Edamam-API. Übergeben Sie die app_id Und app_key Sie haben zuvor kopiert, um API-Anfragen zu authentifizieren und zu autorisieren.
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
Erstellen Sie ein Wörterbuch, Parameter das die verschiedenen Parameter enthält, die Sie als Teil der API-Anfrage übergeben müssen. Legen Sie die Schlüssel-Wert-Paare fest Q, app_id, Und app_key zu den Werten, die Sie zuvor erhalten haben. Stellen Sie die ein aus Und Zu Parameter, um die Anzahl der Ergebnisse widerzuspiegeln, die Sie sehen möchten.
Senden Sie eine GET-Anfrage an die Edamam-API und kombinieren Sie dabei die API-URL und die Parameter Wörterbuch. Speichern Sie die Antwort und extrahieren Sie sie im JSON-Format. Anruf clear_recipe_list() um die auf dem Bildschirm angezeigten Rezepte aus früheren Anfragen zu löschen.
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()
Überprüfen Sie, ob der Schlüssel Treffer in den extrahierten JSON-Daten vorhanden ist und das Suchergebnis enthält. Wenn ja, durchlaufen Sie die Suchergebnisse und extrahieren Sie die Rezeptinformationen einzeln. Senden Sie eine GET-Anfrage an die Bild-URL mit dem Strom Parameter eingestellt auf WAHR um das Streamen von Bilddaten zu ermöglichen.
Verwenden Sie die Kissenmodule Bild Klasse, um das Bild zu öffnen, das Sie erhalten haben. Ändern Sie die Größe mithilfe von auf eine Höhe und Breite von 200 Pixeln Lanczos Resampling-Methode für hochwertige Größenänderungen. Konvertieren Sie dies in Tkinter-kompatibel FotoBild um es auf der grafischen Benutzeroberfläche anzuzeigen.
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)
Aufbau der Struktur der Anwendung
Definieren Sie drei Beschriftungen, um den Rezepttitel, das Bild und den Link zum Rezept anzuzeigen. Legen Sie das übergeordnete Fenster fest, in dem Sie es platzieren möchten, den anzuzeigenden Text und den Schriftstil, den es haben soll. Um das Bild anzuzeigen, stellen Sie die ein Bild zuschreiben foto_bild. Stellen Sie die ein Mauszeiger Option im Link-Label zu Hand2 um es anklickbar zu machen.
Binden Sie den Link und das Ereignis mit dem linken Mausklick, um das aufzurufen Verbindung öffnen() Funktion. Organisieren Sie alle Widgets mit dem Pack Methode, zentrieren Sie sie horizontal und fügen Sie die Polsterung nach Bedarf hinzu. Hängen Sie den Titel, die Bilder und die Links an drei verschiedene Listen an.
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)
Definieren Sie eine Methode, clear_recipe_list() um den gesamten durch die vorherige Anfrage generierten Bildschirminhalt zu löschen. Löschen Sie den Inhalt der Rezeptliste und durchlaufen Sie jedes Etikett in der Rezeptetikett Liste.
Rufen Sie an pack_forget() Methode, um die Beschriftung aus der Anzeige zu entfernen, das Widget-Objekt jedoch intakt zu lassen.
Löschen Sie das Rezeptetiketten Liste für neue Daten. Wiederholen Sie diesen Vorgang auch für die Bilder und die Links. Definieren Sie eine Methode, Verbindung öffnen() um den Rezeptlink in Ihrem Standard-Webbrowser zu öffnen.
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)
Initialisieren Sie das Tkinter-Root-Fenster. Legen Sie den Titel, die Abmessungen und die Hintergrundfarbe der Anwendung fest. Definieren Sie ein Rahmen-Widget und legen Sie sein übergeordnetes Element zusammen mit seiner Hintergrundfarbe fest. Erstellen Sie eine Beschriftung, einen Eintrag und eine Suchschaltfläche. Organisieren Sie alle Widgets mit Pack Methode und fügen Sie bei Bedarf Polsterung hinzu.
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)
Erstellen Sie eine Leinwand mit weißem Hintergrund, um die Widgets mit Rezeptinformationen anzuzeigen. Ordnen Sie es auf der linken Seite des Fensters an, nehmen Sie den gesamten Platz im Rahmen in beide Richtungen ein und vergrößern Sie ihn bei der Größenänderung.
Erstellen Sie eine vertikale Bildlaufleiste für die Leinwand und platzieren Sie sie auf der rechten Seite. Verknüpfen Sie die scrollbar.set Methode zur canvas.yview Methode, sodass durch Scrollen der Bildlaufleiste der Leinwandinhalt gescrollt wird.
Erstellen Sie innerhalb der Leinwand einen Rahmen, der als Container für die Rezeptelemente dient und oben links im Fenster verankert wird. Binden Sie die Ereignis, das sicherstellt, dass die Box korrekt scrollen kann, wenn sich ihr Inhalt oder ihre Größe ändert.
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"))
)
Definieren Sie die Liste für Rezepte, Etiketten, Bilder und Links. Der Hauptschleife() Die Funktion weist Python an, die Tkinter-Ereignisschleife auszuführen und auf Ereignisse zu warten, bis Sie das Fenster schließen.
recipe_list = []
recipe_labels = []
recipe_images = []
recipe_links = []
root.mainloop()
Fügen Sie alles zusammen und entdecken Sie Küchen auf Knopfdruck.
Die Ausgabe der Recipe Finder-Anwendung
Wenn Sie das Programm ausführen und das Gericht als Chicken Burger eingeben, erhalten Sie die besten fünf Ergebnisse. Es enthält den Titel, das Bild und den Rezeptlink des von Ihnen eingegebenen Gerichts. Beim Klicken auf den Link öffnet der Standard-Webbrowser den Rezeptlink. Beim Scrollen nach unten bleibt die Inhaltsgröße gleich und die verschiedenen Ergebnisse werden horizontal zentriert angezeigt.
Verbesserung der Rezeptfinder-Anwendung
Um Ihre Rezeptfinder-Anwendung zu verbessern, können Sie Filter und Sortierung nach unterschiedlichen Vorlieben implementieren. Sie können ein Gericht nach Ernährungspräferenz, Garzeit und Küche filtern und in beliebiger Reihenfolge sortieren.
Erstellen Sie eine Funktion, um Ihre Lieblingsrezepte mit Lesezeichen zu versehen, um sie später anzusehen, und eine Option, um sie in sozialen Medien zu teilen. Sie können eine Kategorie erstellen, um die am häufigsten gesuchten, mit Lesezeichen versehenen Gerichte usw. zu entdecken.
Durch die Kombination Ihrer Programmierkenntnisse und der leistungsstarken Funktionen von APIs können Sie diese Basisanwendung weiter in eine vollwertige Anwendung umwandeln.