Ikke mer å kaste bort tid på å lete her og der etter den perfekte oppskriften. Bruk denne veiledningen til å lage din personlige oppskriftsøkerapplikasjon.
Med overfloden av oppskrifter spredt over hele internett med hundrevis av lenker og annonser, kan det være utfordrende å finne den perfekte oppskriften. Å bygge en app for oppskriftssøk gir deg en skreddersydd og brukervennlig opplevelse og konsekvent design, og eliminerer alle irrelevante resultater og distraksjoner
.Ved å bygge denne applikasjonen vil du skjerpe ferdighetene dine i HTTP-forespørsler, API-nøkkelhåndtering, bildemanipulering og bygge grafiske brukergrensesnitt inkludert dynamisk GUI-oppdatering.
Installer Tkinter, Requests, Pillow og nettlesermodulen
For å bygge et oppskriftsøkerprogram trenger du Tkinter, Requests, PIL og nettlesermodulen. Tkinter lar deg lage skrivebordsapplikasjoner. Den tilbyr en rekke widgets som gjør det enklere å utvikle GUIer. For å installere Tkinter, åpne terminalen og kjør:
pip install tkinter
Requests-modulen gjør det enkelt å lage HTTP-forespørsler og returnere et svarobjekt som inneholder data som koding og status. Du kan bruke den til å hente anrops-ID-informasjon, opprette en nettstedstatuskontroller, valutaomregner, eller en nyhetsapplikasjon. For å installere Requests-modulen, åpne terminalen og kjør:
pip install requests
Pillow-biblioteket – en gaffel fra Python Imaging Library (PIL) – gir bildebehandlingsfunksjoner som hjelper til med redigering, opprettelse, konvertere filformater, og lagre bilder. For å installere putemodulen, åpne terminalen og kjør:
pip install Pillow
Nettlesermodulen hjelper deg med å åpne en hvilken som helst lenke i standardnettleseren. Det er en del av Python-standardbiblioteket. Derfor trenger du ikke installere den eksternt.
Generer Edamam API-nøkkel for oppskriftssøk
For å generere Edamam Recipe Search API-nøkkelen, følg følgende trinn:
- Besøk Edamam og klikk på Registrerings-API knapp. Fyll inn detaljene, og velg planen din som Recipe Search API - Utvikler.
- Logg inn på kontoen din, klikk på regnskapet -knappen, og klikk deretter på Gå til Dashboard knapp.
- Etter det klikker du på applikasjoner og klikk til slutt på Utsikt knappen ved siden av Recipe Search API.
- Kopier Applikasjons-ID og Applikasjonsnøkler og lagre den for bruk i applikasjonen din.
Bygg funksjonaliteten for å få de 5 beste oppskriftene
Du kan finne hele kildekoden for å bygge et oppskriftsøkerprogram ved hjelp av Python i denne GitHub-depot.
Importer de nødvendige modulene. Definer en metode get_top_5_recipes() som henter de fem beste oppskriftenes titler, bilder og lenker til retten brukeren søker etter. Bruk få() for å trekke ut navnet på retten brukeren søkte etter.
Hvis brukeren skrev inn et oppskriftsnavn, definer basis-URLen for Edamam APIs endepunkt for oppskriftsøk. Send meg app_id og app_key du kopierte tidligere for å autentisere og autorisere API-forespørsler.
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
Lag en ordbok, params som inneholder de forskjellige parameterne du må sende som en del av API-forespørselen. Angi nøkkelverdi-parene for q, app_id, og app_key til verdiene du fikk tidligere. Sett fra og til parametere for å gjenspeile antall resultater du vil se.
Send en GET-forespørsel til Edamam API ved å kombinere API URL og params ordbok. Lagre svaret og pakk det ut i JSON-format. Anrop clear_recipe_list() for å fjerne oppskriftene på skjermen fra tidligere forespørsler.
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()
Sjekk om nøkkelen, treff er tilstede i de utpakkede JSON-dataene og hvis den inneholder søkeresultatet. Hvis ja, gjenta søkeresultatene og trekke ut oppskriftsinformasjonen én etter én. Send en GET-forespørsel til bilde-URLen med strøm parameter satt til ekte for å tillate strømming av bildedata.
Bruk putemodulene Bilde klasse for å åpne bildet du mottok. Endre størrelsen til å ha en høyde og bredde på 200 piksler ved hjelp av Lanczos resampling-metode for å endre størrelse av høy kvalitet. Konverter denne til Tkinter-kompatibel PhotoImage for å vise den på det grafiske brukergrensesnittet.
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)
Bygge strukturen til applikasjonen
Definer tre etiketter for å vise oppskriftstittelen, bildet og lenken til oppskriften. Angi det overordnede vinduet du vil plassere det i, teksten du vil vise og skriftstilen det skal ha. For å vise bildet, still inn bilde tilskrive photo_image. Sett markøren alternativet i lenkeetiketten til hånd2 for å gjøre det klikkbart.
Bind lenken og hendelsen med venstre museklikk for å ringe åpen lenke() funksjon. Organiser alle widgetene ved å bruke pakke metoden, sentrer dem horisontalt og legg til polstringen etter behov. Legg til tittel, bilder og lenker til tre forskjellige 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 å fjerne hele skjerminnholdet generert av forrige forespørsel. Fjern innholdet i oppskriftslisten og gjenta over hver etikett i oppskriftsetikett liste.
Ringer til pack_forget() metode for å fjerne etiketten fra skjermen, men beholde widgetobjektet intakt.
Fjern oppskriftsetiketter liste for nye data. Gjenta denne prosessen for bildene og koblingene også. Definer en metode, åpen lenke() for å åpne oppskriftslenken i standard nettleser.
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-rotvinduet. Angi tittel, dimensjoner og bakgrunnsfarge for programmet. Definer en rammewidget og angi dets overordnede element sammen med bakgrunnsfargen. Lag en etikett, en oppføring og en søkeknapp. Organiser alle widgetene ved hjelp av pakke metode og legg til polstring etter 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)
Lag et lerret med hvit bakgrunn for å vise widgetene som inneholder oppskriftsinformasjon. Organiser den til venstre i vinduet, ta all plass i rammen i begge retninger og utvide den ved å endre størrelse.
Lag et vertikalt rullefelt for lerretet og plasser det på høyre side. Koble til rullefelt.sett metoden til canvas.yview metode slik at rulling av rullefeltet vil rulle lerretsinnholdet.
Lag en ramme inne i lerretet for å fungere som en beholder for oppskriftselementene, forankret øverst til venstre i vinduet. Bind den hendelse slik at den sikrer at boksen kan rulle riktig når innholdet endres eller endre 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 oppskrifter, etiketter, bilder og lenker. De mainloop() funksjonen forteller Python å kjøre Tkinter-hendelsesløkken og lytte etter hendelser til du lukker vinduet.
recipe_list = []
recipe_labels = []
recipe_images = []
recipe_links = []
root.mainloop()
Sett alt sammen og oppdag kjøkken med et klikk på en knapp.
Utdataene fra Recipe Finder-applikasjonen
Når du kjører programmet og går inn i retten som kyllingburger, får du de fem beste resultatene. Den inneholder tittelen, bildet og oppskriftslenken til retten du skrev inn. Når du klikker på lenken, åpner standard nettleser oppskriftslenken. Når du ruller nedover, forblir innholdsstørrelsen den samme og viser de forskjellige resultatene sentrert horisontalt.
Forbedring av Recipe Finder-applikasjonen
For å forbedre oppskriftsøkerapplikasjonen din, kan du implementere filtrering og sortering i henhold til forskjellige preferanser. Du kan filtrere en rett etter kostholdspreferanser, koketid og mat, og sortere dem i hvilken som helst rekkefølge.
Lag en funksjon for å bokmerke favorittoppskriftene dine for å se dem senere, og et alternativ for å dele dem på sosiale medier. Du kan opprette en kategori for å finne de mest søkte rettene, de fleste bokmerkede og så videre.
Ved å kombinere dine programmeringskunnskaper og de kraftige funksjonene til APIer, kan du konvertere denne grunnleggende applikasjonen til en fullverdig applikasjon.