Nič več izgubljanja časa z iskanjem popolnega recepta tu in tam. S tem priročnikom ustvarite svojo prilagojeno aplikacijo za iskanje receptov.

Z obilico receptov, raztresenih po vsem internetu s stotinami povezav in oglasov, je iskanje popolnega recepta lahko izziv. Izdelava aplikacije za iskanje receptov vam nudi prilagojeno in uporabniku prijazno izkušnjo ter dosleden dizajn, ki odpravlja vse nepomembne rezultate in motnje

.Z izgradnjo te aplikacije boste izostrili svoje spretnosti pri zahtevah HTTP, upravljanju ključev API, obdelavi slik in gradnji grafičnih uporabniških vmesnikov, vključno z dinamičnim posodabljanjem GUI.

Namestite modul Tkinter, Requests, Pillow in Webbrowser

Če želite zgraditi aplikacijo za iskanje receptov, potrebujete Tkinter, Requests, PIL in modul Webbrowser. Tkinter omogoča ustvarjanje namiznih aplikacij. Ponuja različne pripomočke, ki olajšajo razvoj GUI. Če želite namestiti Tkinter, odprite terminal in zaženite:

pip install tkinter

Modul Zahteve poenostavi izdelavo zahtev HTTP in vrnitev odzivnega objekta, ki vsebuje podatke, kot sta kodiranje in status. Uporabite ga lahko za pridobivanje podatkov o ID-ju klicatelja,

instagram viewer
ustvarite preverjalnik statusa spletnega mesta, pretvornik valut, oz aplikacija za novice. Za namestitev modula Requests odprite terminal in zaženite:

pip install requests

Knjižnica Pillow—razcep Python Imaging Library (PIL)—zagotavlja zmožnosti obdelave slik, ki pomagajo pri urejanju, ustvarjanju, pretvorbo formatov datotekin shranjevanje slik. Za namestitev modula Pillow odprite terminal in zaženite:

pip install Pillow

Modul Webbrowser vam pomaga odpreti katero koli povezavo v privzetem brskalniku. Je del standardne knjižnice Python. Zato vam ga ni treba namestiti zunaj.

Ustvari ključ API Edamam za iskanje receptov

Če želite ustvariti ključ API za iskanje receptov Edamam, sledite naslednjim korakom:

  1. Obisk Edamam in kliknite na API za prijavo gumb. Izpolnite podrobnosti in izberite svoj načrt kot API za iskanje receptov – razvijalec.
  2. Prijavite se v svoj račun, kliknite na Računi in nato kliknite na Pojdite na nadzorno ploščo gumb.
  3. Po tem kliknite na Aplikacije in na koncu kliknite na Pogled poleg API-ja za iskanje receptov.
  4. Kopiraj ID aplikacije in Ključi aplikacij in ga shranite za uporabo v svoji aplikaciji.

Izgradnja funkcionalnosti za pridobitev najboljših 5 receptov

Tukaj lahko najdete celotno izvorno kodo za izdelavo aplikacije za iskanje receptov z uporabo Pythona Repozitorij GitHub.

Uvozite zahtevane module. Določite metodo get_top_5_recipes() ki pridobi naslove petih najboljših receptov, slike in povezave do jedi, ki jo uporabnik išče. Uporaba dobiti () da izvleče ime jedi, ki jo je uporabnik iskal.

Če je uporabnik vnesel ime recepta, definirajte osnovni URL za končno točko iskanja receptov API-ja Edamam. Predaj app_id in app_key ste prej kopirali za preverjanje pristnosti in avtorizacijo zahtev 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

Ustvari slovar, params ki vsebuje različne parametre, ki jih morate posredovati kot del zahteve API. Nastavite pare ključ-vrednost za q, app_id, in app_key na vrednosti, ki ste jih dobili prej. Nastavite od in do parametre, ki odražajo število rezultatov, ki jih želite videti.

Pošljite zahtevo GET API-ju Edamam, ki združuje URL API-ja in params slovar. Shranite odgovor in ga ekstrahirajte v formatu JSON. Pokliči počisti seznam_receptov() da počistite recepte, ki so na zaslonu, iz prejšnjih zahtev.

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

Preverite, ali je ključ, zadetkov je prisoten v ekstrahiranih podatkih JSON in če vsebuje rezultat iskanja. Če je odgovor pritrdilen, preglejte rezultate iskanja in enega za drugim izvlecite informacije o receptih. Pošljite zahtevo GET na URL slike z tok parameter nastavljen na Prav da omogočite pretakanje slikovnih podatkov.

Uporabite modul Pillow Slika razred, da odprete prejeto sliko. Spremenite velikost, da ima višino in širino 200 slikovnih pik z uporabo Lanczos metoda ponovnega vzorčenja za visokokakovostno spreminjanje velikosti. Pretvorite to v Tkinter-združljivo PhotoImage da ga prikažete na grafičnem uporabniškem vmesniku.

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)

Gradnja strukture aplikacije

Določite tri oznake za prikaz naslova recepta, slike in povezave do recepta. Nastavite nadrejeno okno, v katerega ga želite postaviti, besedilo, ki ga želite prikazati, in slog pisave, ki naj ga ima. Za prikaz slike nastavite slika pripisati fotografija_slika. Nastavite kazalec možnost v oznaki povezave do roka2 da ga je mogoče klikniti.

Povežite povezavo in dogodek z levim klikom miške, da pokličete odprta_povezava() funkcijo. Organizirajte vse pripomočke z uporabo paket jih centrirajte vodoravno in po potrebi dodajte oblazinjenje. Pripnite naslov, slike in povezave na tri različne sezname.

 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)

Določite metodo, počisti seznam_receptov() da počistite celotno vsebino zaslona, ​​ki jo je ustvarila prejšnja zahteva. Počistite vsebino seznama receptov in ponovite vsako oznako v oznaka_recepta seznam.

Klicanje pack_forget() metodo za odstranitev oznake z zaslona, ​​vendar ohranite objekt gradnika nedotaknjen.

Počistite nalepke_receptov seznam za nove podatke. Ta postopek ponovite tudi za slike in povezave. Določite metodo, odprta_povezava() da odprete povezavo do recepta v privzetem spletnem brskalniku.

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)

Inicializirajte korensko okno Tkinter. Nastavite naslov, dimenzije in barvo ozadja aplikacije. Definirajte okvirni gradnik in nastavite njegov nadrejeni element skupaj z barvo ozadja. Ustvarite oznako, vnos in gumb za iskanje. Organizirajte vse pripomočke z uporabo paket in po potrebi dodajte oblazinjenje.

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)

Ustvarite platno z belim ozadjem za prikaz pripomočkov s podatki o receptih. Organizirajte ga na levi strani okna, zavzemite ves prostor v okvirju v obe smeri in ga razširite pri spreminjanju velikosti.

Ustvarite navpični drsni trak za platno in ga postavite na njegovo desno stran. Poveži scrollbar.set metoda za canvas.yview metodo, tako da se pomikanje po drsnem traku pomika po vsebini platna.

Znotraj platna ustvarite okvir, ki bo deloval kot vsebnik za elemente receptov, zasidran v zgornjem levem kotu okna. Zaveži tako, da zagotovi, da se polje lahko pravilno pomika, ko se njegova vsebina spremeni ali spremeni velikost.

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

Določite seznam za recepte, oznake, slike in povezave. The glavna zanka() funkcija pove Pythonu, naj zažene zanko dogodkov Tkinter in posluša dogodke, dokler ne zaprete okna.

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

root.mainloop()

Sestavite vse skupaj in odkrijte kuhinje s pritiskom na gumb.

Rezultat aplikacije Recipe Finder

Ko zaženete program in vnesete jed kot Chicken Burger, dobite prvih pet rezultatov. Vsebuje naslov, sliko in povezavo do recepta jedi, ki ste jo vnesli. Ob kliku na povezavo privzeti spletni brskalnik odpre povezavo do recepta. Ko se pomaknete navzdol, ostane velikost vsebine enaka in prikaže različne rezultate, ki so na sredini vodoravno.

Izboljšanje aplikacije za iskanje receptov

Če želite izboljšati svojo aplikacijo za iskanje receptov, lahko implementirate filtriranje in razvrščanje glede na različne nastavitve. Jed lahko filtrirate glede na prehranske nastavitve, čas kuhanja in kuhinjo ter jih razvrstite v poljubnem vrstnem redu.

Ustvarite funkcijo za dodajanje priljubljenih receptov med zaznamke za poznejši ogled in možnost, da jih delite v družabnih omrežjih. Ustvarite lahko kategorijo, da odkrijete najbolj iskane jedi, najbolj dodane med zaznamke itd.

Če združite svoje veščine programiranja in zmogljive funkcije API-jev, lahko to osnovno aplikacijo dodatno pretvorite v popolno.