Nu mai pierdeți timpul căutând ici și colo rețeta perfectă. Utilizați acest ghid pentru a vă crea aplicația personalizată de căutare a rețetelor.

Cu abundența de rețete împrăștiate pe tot internetul cu sute de link-uri și reclame, găsirea rețetei perfecte poate fi o provocare. Crearea unei aplicații de căutare de rețete vă oferă o experiență personalizată și ușor de utilizat și un design consistent, eliminând toate rezultatele irelevante și distragerile

.Prin construirea acestei aplicații, vă veți îmbunătăți abilitățile în cererile HTTP, gestionarea cheilor API, manipularea imaginilor și construirea de interfețe grafice cu utilizatorul, inclusiv actualizarea dinamică a GUI.

Instalați modulul Tkinter, Requests, Pillow și Webbrowser

Pentru a construi o aplicație de căutare a rețetelor, aveți nevoie de Tkinter, Requests, PIL și modulul Webbrowser. Tkinter vă permite să creați aplicații desktop. Oferă o varietate de widget-uri care facilitează dezvoltarea interfețelor grafice. Pentru a instala Tkinter, deschideți terminalul și rulați:

instagram viewer
pip install tkinter

Modulul Cereri simplifică efectuarea cererilor HTTP și returnarea unui obiect de răspuns care conține date precum codificarea și starea. Îl puteți folosi pentru a obține informații despre ID apelant, creați un verificator de stare a site-ului web, convertor valutar sau o aplicație de știri. Pentru a instala modulul Cereri, deschideți terminalul și rulați:

pip install requests

Biblioteca Pillow – o furcă a Bibliotecii de imagini Python (PIL) – oferă capabilități de procesare a imaginilor care ajută la editare, creare, conversia formatelor de fișiere, și salvarea imaginilor. Pentru a instala modulul Pillow, deschideți terminalul și rulați:

pip install Pillow

Modulul Webbrowser vă ajută să deschideți orice link în browserul dvs. implicit. Este o parte a bibliotecii standard Python. Prin urmare, nu trebuie să-l instalați extern.

Generați cheia API Edamam pentru căutarea rețetelor

Pentru a genera cheia Edamam Recipe Search API, urmați următorii pași:

  1. Vizita Edamam și faceți clic pe API de înscriere buton. Completați detaliile și alegeți planul ca Recipe Search API - Dezvoltator.
  2. Conectați-vă la contul dvs., faceți clic pe conturile butonul, apoi faceți clic pe Accesați tabloul de bord buton.
  3. După aceea, faceți clic pe Aplicații fila și în cele din urmă faceți clic pe Vedere butonul de lângă API-ul Recipe Search.
  4. Copiați ID aplicație si Chei de aplicație și stocați-l pentru a fi utilizat în aplicația dvs.

Crearea funcționalității pentru a obține primele 5 rețete

Puteți găsi întregul cod sursă pentru construirea unei aplicații de căutare a rețetei folosind Python în aceasta Depozitul GitHub.

Importați modulele necesare. Definiți o metodă get_top_5_rețete() care preia titlurile primelor cinci rețete, imaginile și linkurile preparatului pe care îl caută utilizatorul. Utilizare obține() pentru a extrage numele felului de mâncare căutat de utilizator.

Dacă utilizatorul a introdus un nume de rețetă, definiți adresa URL de bază pentru punctul final de căutare a rețetei Edamam API. Treceți app_id și app_key ați copiat mai devreme pentru a autentifica și autoriza solicitările 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

Creați un dicționar, parametrii care conține diferiți parametri pe care trebuie să îi transmiteți ca parte a solicitării API. Setați perechile cheie-valoare pentru q, app_id, și app_key la valorile pe care le-ai primit mai devreme. Seteaza din și la parametri pentru a reflecta numărul de rezultate pe care doriți să le vedeți.

Trimiteți o solicitare GET către API-ul Edamam combinând adresa URL a API-ului și parametrii dicţionar. Stocați răspunsul și extrageți-l în format JSON. Apel clear_recipe_list() pentru a șterge rețetele prezente pe ecran de solicitările anterioare.

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

Verificați dacă cheia, lovituri este prezent în datele JSON extrase și dacă conține rezultatul căutării. Dacă da, repetați rezultatele căutării și extrageți pe rând informațiile rețetei. Trimiteți o solicitare GET la adresa URL a imaginii cu curent parametrul setat la Adevărat pentru a permite transmiterea în flux a datelor de imagine.

Utilizați modulul de pernă Imagine clasă pentru a deschide imaginea primită. Redimensionați-l pentru a avea o înălțime și lățime de 200 de pixeli folosind Lanczos metoda de reeșantionare pentru redimensionare de înaltă calitate. Convertiți acest lucru în compatibil Tkinter PhotoImage pentru a-l afișa pe interfața grafică cu utilizatorul.

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)

Construirea structurii aplicației

Definiți trei etichete pentru a afișa titlul rețetei, imaginea și linkul către rețetă. Setați fereastra părinte în care doriți să o plasați, textul pe care doriți să-l afișați și stilul de font pe care ar trebui să-l aibă. Pentru a afișa imaginea, setați imagine atribuit lui imagine_foto. Seteaza cursor opțiunea din eticheta linkului către mana2 pentru a face clic pe acesta.

Legați linkul și evenimentul clic stânga al mouse-ului pentru a apela deschide link-ul() funcţie. Organizați toate widget-urile folosind ambalaj metoda, centrați-le pe orizontală și adăugați umplutura după cum este necesar. Adăugați titlul, imaginile și linkurile la trei liste diferite.

 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)

Definiți o metodă, clear_recipe_list() pentru a șterge întregul conținut al ecranului generat de solicitarea anterioară. Ștergeți conținutul listei de rețete și repetați peste fiecare etichetă din etichetă_rețetă listă.

Apelând la pachet_uita() metodă de a elimina eticheta de pe afișaj, dar păstrați obiectul widget intact.

Ștergeți etichete_rețete lista pentru date noi. Repetați acest proces și pentru imagini și linkuri. Definiți o metodă, deschide link-ul() pentru a deschide linkul rețetei în browserul dvs. web implicit.

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)

Inițializați fereastra rădăcină Tkinter. Setați titlul, dimensiunile și culoarea de fundal ale aplicației. Definiți un widget cadru și setați elementul părinte împreună cu culoarea de fundal. Creați o etichetă, o intrare și un buton de căutare. Organizați toate widget-urile folosind ambalaj metoda și adăugați umplutură după cum este necesar.

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)

Creați o pânză cu un fundal alb pentru a afișa widget-urile care conțin informații despre rețetă. Organizați-l în partea stângă a ferestrei, luând tot spațiul din cadru în ambele direcții și extinzându-l la redimensionare.

Creați o bară de defilare verticală pentru pânză și plasați-o pe partea dreaptă. Legați scrollbar.set metoda la canvas.yview astfel încât derularea barei de defilare va derula conținutul pânzei.

Creați un cadru în interiorul pânzei pentru a acționa ca un container pentru articolele rețetei, ancorat în partea stângă sus a ferestrei. Leagă eveniment astfel încât să se asigure că caseta poate derula corect atunci când conținutul său se schimbă sau redimensionează.

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

Definiți lista pentru rețete, etichete, imagini și link-uri. The mainloop() funcția îi spune lui Python să ruleze bucla de evenimente Tkinter și să asculte evenimente până când închideți fereastra.

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

root.mainloop()

Pune totul împreună și descoperă bucătării cu un singur clic.

Ieșirea aplicației Recipe Finder

La rularea programului și la introducerea preparatului ca Chicken Burger, obțineți primele cinci rezultate. Conține titlul, imaginea și linkul rețetei preparatului pe care l-ați introdus. Făcând clic pe link, browserul web implicit deschide linkul rețetei. La derularea în jos, dimensiunea conținutului rămâne aceeași și afișează diferitele rezultate centrate orizontal.

Îmbunătățirea aplicației Recipe Finder

Pentru a vă îmbunătăți aplicația de căutare a rețetelor, puteți implementa filtrarea și sortarea în funcție de diferite preferințe. Puteți filtra un fel de mâncare în funcție de preferințele dietetice, timpul de gătire și bucătăria și le puteți sorta în orice ordine.

Creați o funcție pentru a marca rețetele preferate pentru a le vizualiza mai târziu și o opțiune pentru a le partaja pe rețelele sociale. Puteți crea o categorie pentru a descoperi cele mai căutate preparate, cele mai marcate și așa mai departe.

Combinându-vă abilitățile de programare și caracteristicile puternice ale API-urilor, puteți converti în continuare această aplicație de bază într-una cu drepturi depline.