Nema više gubljenja vremena tražeći tu i tamo savršeni recept. Pomoću ovog vodiča izradite svoju personaliziranu aplikaciju za traženje recepata.

Uz obilje recepata razasutih po cijelom internetu sa stotinama poveznica i oglasa, pronalaženje savršenog recepta može biti izazovno. Izrada aplikacije za traženje recepata pruža vam prilagođeno i korisničko iskustvo te dosljedan dizajn, eliminirajući sve nebitne rezultate i smetnje

.Izgradnjom ove aplikacije izoštrit ćete svoje vještine u HTTP zahtjevima, upravljanju API ključevima, manipulaciji slikama i izgradnji grafičkih korisničkih sučelja uključujući dinamičko ažuriranje GUI-ja.

Instalirajte modul Tkinter, Requests, Pillow i Webbrowser

Za izradu aplikacije za traženje recepata potrebni su vam Tkinter, Zahtjevi, PIL i modul web-preglednika. Tkinter vam omogućuje stvaranje desktop aplikacija. Nudi razne widgete koji olakšavaju razvoj GUI-ja. Da biste instalirali Tkinter, otvorite terminal i pokrenite:

pip install tkinter

Modul Zahtjevi olakšava izradu HTTP zahtjeva i vraćanje objekta odgovora koji sadrži podatke kao što su kodiranje i status. Možete ga koristiti za dohvaćanje informacija o ID-u pozivatelja,

instagram viewer
izraditi alat za provjeru statusa web stranice, pretvarač valuta ili aplikacija za vijesti. Za instalaciju modula Zahtjevi otvorite terminal i pokrenite:

pip install requests

Biblioteka Pillow—odvojak Python Imaging Library (PIL)—omogućuje mogućnosti obrade slika koje pomažu u uređivanju, stvaranju, pretvaranje formata datotekai spremanje slika. Da biste instalirali Pillow modul, otvorite terminal i pokrenite:

pip install Pillow

Modul web-preglednika pomaže vam da otvorite bilo koju vezu u vašem zadanom pregledniku. Dio je Python standardne biblioteke. Stoga ga ne morate instalirati izvana.

Generirajte Edamam API ključ za pretraživanje recepata

Za generiranje API ključa Edamam Recipe Search slijedite sljedeće korake:

  1. Posjetiti Edamam i kliknite na API za prijavu dugme. Ispunite detalje i odaberite svoj plan kao API za pretraživanje recepata - programer.
  2. Prijavite se na svoj račun, kliknite na Računi gumb, a zatim kliknite na Idite na nadzornu ploču dugme.
  3. Nakon toga kliknite na Prijave i na kraju kliknite na Pogled gumb pored Recipe Search API.
  4. Kopiraj ID aplikacije i Aplikacijski ključevi i pohranite ga za korištenje u svojoj aplikaciji.

Izgradnja funkcionalnosti za dobivanje 5 najboljih recepata

Ovdje možete pronaći cijeli izvorni kod za izradu aplikacije za traženje recepata pomoću Pythona GitHub spremište.

Uvezite potrebne module. Definirajte metodu get_top_5_recipes() koji dohvaća naslove pet najboljih recepata, slike i poveznice jela koje korisnik traži. Koristiti dobiti() za izdvajanje naziva jela koje je korisnik tražio.

Ako je korisnik unio naziv recepta, definirajte osnovni URL za krajnju točku pretraživanja recepata Edamam API-ja. Dodaj app_id i app_key koje ste ranije kopirali za provjeru autentičnosti i autorizaciju API zahtjeva.

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

Napravite rječnik, parametri koji sadrži različite parametre koje morate proslijediti kao dio API zahtjeva. Postavite parove ključ-vrijednost za q, app_id, i app_key na vrijednosti koje ste ranije dobili. Postavi iz i do parametri koji odražavaju broj rezultata koje želite vidjeti.

Pošaljite GET zahtjev Edamam API-ju kombinirajući API URL i parametri rječnik. Pohranite odgovor i izdvojite ga u JSON formatu. Poziv očisti popis_recepata() kako biste izbrisali recepte prisutne na ekranu od ranijih zahtjeva.

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

Provjerite je li ključ, hitovi postoji u izdvojenim JSON podacima i sadrži li rezultat pretraživanja. Ako da, iterirajte rezultate pretraživanja i izdvojite informacije o receptu jedan po jedan. Pošaljite GET zahtjev na URL slike s potok parametar postavljen na Pravi kako biste omogućili strujanje slikovnih podataka.

Koristite modul jastuka Slika klase za otvaranje slike koju ste primili. Promijenite mu veličinu tako da ima visinu i širinu od 200 piksela pomoću Lanczos metoda ponovnog uzorkovanja za visokokvalitetnu promjenu veličine. Pretvorite ovo u Tkinter-kompatibilno PhotoImage za prikaz na grafičkom korisničkom sučelju.

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)

Izgradnja strukture aplikacije

Definirajte tri oznake za prikaz naslova recepta, slike i veze na recept. Postavite nadređeni prozor u koji ga želite smjestiti, tekst koji želite prikazati i stil fonta koji bi trebao imati. Za prikaz slike, postavite slika pripisati foto_slika. Postavi kursor opcija u oznaci veze na ruka2 da bi se moglo kliknuti.

Povežite vezu i događaj klika lijevom tipkom miša za poziv otvori link() funkcija. Organizirajte sve widgete pomoću paket centrirajte ih vodoravno i dodajte ispunu po potrebi. Dodajte naslov, slike i poveznice na tri različita popisa.

 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)

Definirajte metodu, očisti popis_recepata() za brisanje cijelog sadržaja zaslona generiranog prethodnim zahtjevom. Očistite sadržaj popisa recepata i iterirajte svaku oznaku u oznaka_recepta popis.

Pozivanje pack_forget() metoda za uklanjanje oznake s prikaza, ali zadržavanje objekta widgeta netaknutim.

Očistite naljepnice_recepata popis za nove podatke. Ponovite ovaj postupak i za slike i veze. Definirajte metodu, otvori link() da biste otvorili poveznicu na recept u svom zadanom web pregledniku.

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)

Inicijalizirajte Tkinter korijenski prozor. Postavite naslov, dimenzije i boju pozadine aplikacije. Definirajte okvirni widget i postavite njegov nadređeni element zajedno s bojom pozadine. Stvorite oznaku, unos i gumb za pretraživanje. Organizirajte sve widgete pomoću paket način i po potrebi dodajte ispune.

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)

Napravite platno s bijelom pozadinom za prikaz widgeta koji sadrže informacije o receptu. Organizirajte ga na lijevoj strani prozora, zauzimajući sav prostor u okviru u oba smjera i proširujući ga pri promjeni veličine.

Napravite okomitu traku za pomicanje za platno i postavite je na desnu stranu. Povežite traka za pomicanje.set metoda za platno.yview metodu tako da će pomicanje trake za pomicanje pomicati sadržaj platna.

Napravite okvir unutar platna koji će služiti kao spremnik za stavke recepata, usidreni u gornjem lijevom kutu prozora. Svežite događaj tako da osigurava da se okvir može ispravno pomicati kada se njegov sadržaj promijeni ili mu promijeni veličina.

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

Definirajte popis za recepte, oznake, slike i poveznice. The glavna petlja() funkcija govori Pythonu da pokrene Tkinter petlju događaja i osluškuje događaje dok ne zatvorite prozor.

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

root.mainloop()

Spojite sve zajedno i otkrijte kuhinje jednim pritiskom na gumb.

Izlaz aplikacije za traženje recepata

Kada pokrenete program i unesete jelo kao Chicken Burger, dobit ćete prvih pet rezultata. Sadrži naslov, sliku i poveznicu na recept jela koje ste unijeli. Klikom na poveznicu, zadani web preglednik otvara poveznicu na recept. Prilikom pomicanja prema dolje, veličina sadržaja ostaje ista i prikazuje različite rezultate centrirane vodoravno.

Poboljšanje aplikacije za traženje recepata

Kako biste poboljšali svoju aplikaciju za traženje recepata, možete implementirati filtriranje i sortiranje prema različitim preferencijama. Možete filtrirati jelo prema prehrambenim preferencijama, vremenu kuhanja i kuhinji te ih poredati bilo kojim redoslijedom.

Stvorite značajku za označavanje omiljenih recepata za kasniji pregled i opciju za njihovo dijeljenje na društvenim mrežama. Možete stvoriti kategoriju kako biste otkrili jela koja su najčešće pretraživana, najčešće označena i tako dalje.

Kombinirajući svoje vještine programiranja i moćne značajke API-ja, ovu osnovnu aplikaciju možete dodatno pretvoriti u potpunu.