Ikke mere spildtid på at søge her og der efter den perfekte opskrift. Brug denne guide til at oprette din personlige opskriftsfinderapplikation.
Med overfloden af opskrifter spredt over hele internettet med hundredvis af links og annoncer, kan det være en udfordring at finde den perfekte opskrift. Opbygning af en opskriftsfinder-app giver dig en skræddersyet og brugervenlig oplevelse og ensartet design, der eliminerer alle irrelevante resultater og distraktioner
.Ved at bygge denne applikation skærper du dine færdigheder inden for HTTP-anmodninger, API-nøglehåndtering, billedmanipulation og opbygning af grafiske brugergrænseflader, herunder dynamisk GUI-opdatering.
Installer modulet Tkinter, Requests, Pillow og Webbrowser
For at bygge en opskriftssøgningsapplikation kræver du Tkinter, Requests, PIL og webbrowsermodulet. Tkinter giver dig mulighed for at oprette desktop-applikationer. Det tilbyder en række widgets, der gør det nemmere at udvikle GUI'er. For at installere Tkinter skal du åbne terminalen og køre:
pip install tkinter
Requests-modulet gør det nemt at lave HTTP-anmodninger og returnere et svarobjekt, der indeholder data såsom kodning og status. Du kan bruge det til at hente opkalds-id-oplysninger, oprette en hjemmesidestatuskontrol, valutaomregner eller en nyhedsapplikation. For at installere Requests-modulet skal du åbne terminalen og køre:
pip install requests
Pillow-biblioteket – en forgrening af Python Imaging Library (PIL) – giver billedbehandlingsfunktioner, der hjælper med at redigere, skabe, konvertering af filformaterog gemme billeder. For at installere pudemodulet skal du åbne terminalen og køre:
pip install Pillow
Webbrowsermodulet hjælper dig med at åbne ethvert link i din standardbrowser. Det er en del af Python-standardbiblioteket. Derfor behøver du ikke installere den eksternt.
Generer Edamam API-nøgle til opskriftssøgning
For at generere Edamam Recipe Search API-nøglen skal du følge følgende trin:
- Besøg Edamam og klik på Tilmeldings-API knap. Udfyld detaljerne, og vælg din plan som Recipe Search API - Udvikler.
- Log ind på din konto, klik på regnskabet knappen, og klik derefter på Gå til dashboard knap.
- Derefter skal du klikke på Ansøgninger fanen og til sidst klik på Udsigt knappen ved siden af Recipe Search API.
- Kopier Ansøgnings-id og Applikationsnøgler og gem det til brug i din applikation.
Opbygning af funktionaliteten for at få de 5 bedste opskrifter
Du kan finde hele kildekoden til at bygge et opskriftsfinderprogram ved hjælp af Python i denne GitHub-depot.
Importer de nødvendige moduler. Definer en metode get_top_5_recipes() der henter de fem bedste opskrifters titler, billeder og links til den ret, brugeren søger efter. Brug få() for at udtrække navnet på den ret, brugeren søgte efter.
Hvis brugeren indtastede et opskriftsnavn, skal du definere basis-URL'en for Edamam API's opskriftssøgningsslutpunkt. Bestå app_id og app_nøgle du kopierede tidligere for at godkende og godkende API-anmodninger.
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
Lav en ordbog, params der indeholder de forskellige parametre, du skal videregive som en del af API-anmodningen. Indstil nøgleværdi-parrene for q, app_id, og app_nøgle til de værdier, du fik tidligere. Indstil fra og til parametre for at afspejle antallet af resultater, du ønsker at se.
Send en GET-anmodning til Edamam API'et ved at kombinere API URL'en og params ordbog. Gem svaret og udpak det i JSON-format. Opkald clear_recipe_list() at rydde opskrifterne på skærmen ud fra tidligere anmodninger.
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()
Tjek om nøglen, hits er til stede i de udtrukne JSON-data, og hvis det indeholder søgeresultatet. Hvis ja, gentag søgeresultaterne og udtræk opskriftsoplysningerne én efter én. Send en GET-anmodning til billed-URL'en med strøm parameter sat til Rigtigt for at tillade streaming af billeddata.
Brug pudemodulet Billede klasse for at åbne det billede, du har modtaget. Tilpas størrelsen til at have en højde og bredde på 200 pixels ved hjælp af Lanczos gensamplingsmetode til ændring af størrelse af høj kvalitet. Konverter dette til Tkinter-kompatibelt PhotoImage for at vise det på den grafiske brugergrænseflade.
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)
Opbygning af applikationens struktur
Definer tre etiketter for at vise opskriftens titel, billedet og linket til opskriften. Indstil det overordnede vindue, du vil placere det i, den tekst, du vil vise, og den skrifttype, den skal have. For at vise billedet skal du indstille billede tilskrive foto_billede. Indstil cursoren mulighed i linketiketten til hånd 2 for at gøre det klikbart.
Bind linket og venstre museklik begivenhed for at kalde Åben link() fungere. Organiser alle widgets ved hjælp af pakke centrer dem vandret, og tilføj polstringen efter behov. Føj titlen, billederne og links til tre forskellige lister.
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)
Definer en metode, clear_recipe_list() for at rydde hele skærmindholdet, der blev genereret af den tidligere anmodning. Ryd indholdet af opskriftslisten og gentag over hver etiket i opskrift_etiket liste.
Ringer til pack_forget() metode til at fjerne etiketten fra skærmen, men holde widgetobjektet intakt.
Ryd opskriftsetiketter liste for nye data. Gentag også denne proces for billederne og linkene. Definer en metode, Åben link() for at åbne opskriftslinket i din standard webbrowser.
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)
Initialiser Tkinter-rodvinduet. Indstil applikationens titel, dimensioner og baggrundsfarve. Definer en ramme-widget, og indstil dets overordnede element sammen med dets baggrundsfarve. Opret en etiket, en post og en søgeknap. Organiser alle widgets ved hjælp af pakke metode og tilføj polstring efter behov.
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)
Opret et lærred med en hvid baggrund for at vise de widgets, der indeholder opskriftsoplysninger. Organiser den til venstre i vinduet, tag al pladsen i rammen i begge retninger og udvid den ved ændring af størrelse.
Opret en lodret rullebjælke til lærredet og placer den på dets højre side. Link til scrollbar.set metode til canvas.yview metode, så rulning af rullepanelet vil rulle gennem lærredets indhold.
Opret en ramme inde i lærredet, der fungerer som en beholder til opskriftsgenstandene, forankret øverst til venstre i vinduet. Bind den hændelse sådan, at den sikrer, at boksen kan rulle korrekt, når dens indhold ændres eller ændres størrelse.
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"))
)
Definer listen for opskrifter, etiketter, billeder og links. Det mainloop() funktion fortæller Python at køre Tkinter-hændelsesløkken og lytte efter hændelser, indtil du lukker vinduet.
recipe_list = []
recipe_labels = []
recipe_images = []
recipe_links = []
root.mainloop()
Sæt det hele sammen, og opdag køkkener med et enkelt klik på en knap.
Outputtet af Recipe Finder-applikationen
Når du kører programmet og går ind i retten som kyllingeburger, får du de fem bedste resultater. Den indeholder titlen, billedet og opskriftslinket for den ret, du indtastede. Når du klikker på linket, åbner standardwebbrowseren opskriftslinket. Når du ruller ned, forbliver indholdsstørrelsen den samme og viser de forskellige resultater centreret vandret.
Forbedring af Recipe Finder-applikationen
For at forbedre din opskriftsfinderapplikation kan du implementere filtrering og sortering efter forskellige præferencer. Du kan filtrere en ret efter diætpræferencer, tilberedningstid og køkken og sortere dem i vilkårlig rækkefølge.
Opret en funktion til at bogmærke dine yndlingsopskrifter for at se dem senere, og en mulighed for at dele dem på sociale medier. Du kan oprette en kategori for at finde de mest søgte retter, de fleste bogmærkede og så videre.
Ved at kombinere dine programmeringsevner og de kraftfulde funktioner i API'er kan du yderligere konvertere denne grundlæggende applikation til en fuldgyldig.