Už nemusíte strácať čas sem-tam hľadaním dokonalého receptu. Pomocou tohto sprievodcu si vytvorte vlastnú aplikáciu na vyhľadávanie receptov.

S množstvom receptov roztrúsených po celom internete so stovkami odkazov a reklám môže byť hľadanie dokonalého receptu náročné. Vytvorenie aplikácie na vyhľadávanie receptov vám poskytuje prispôsobený a užívateľsky prívetivý zážitok a konzistentný dizajn, ktorý eliminuje všetky nepodstatné výsledky a rušivé prvky

Vytvorením tejto aplikácie si vylepšíte svoje zručnosti v HTTP požiadavkách, správe kľúčov API, manipulácii s obrázkami a vytváraní grafických používateľských rozhraní vrátane dynamickej aktualizácie GUI.

Nainštalujte modul Tkinter, Requests, Vankúš a Webový prehliadač

Na vytvorenie aplikácie na vyhľadávanie receptov potrebujete Tkinter, Requests, PIL a modul Webbrowser. Tkinter vám umožňuje vytvárať desktopové aplikácie. Ponúka množstvo miniaplikácií, ktoré uľahčujú vývoj GUI. Ak chcete nainštalovať Tkinter, otvorte terminál a spustite:

pip install tkinter
instagram viewer

Modul Requests zjednodušuje vytváranie požiadaviek HTTP a vrátenie objektu odpovede, ktorý obsahuje údaje, ako je kódovanie a stav. Môžete ho použiť na získanie informácií o identifikácii volajúceho, vytvoriť kontrolu stavu webových stránok, prevodník mien, príp spravodajská aplikácia. Ak chcete nainštalovať modul požiadaviek, otvorte terminál a spustite:

pip install requests

Knižnica Pillow – vidlica knižnice Python Imaging Library (PIL) – poskytuje možnosti spracovania obrázkov, ktoré pomáhajú pri úpravách, vytváraní, konvertovanie formátov súborova ukladanie obrázkov. Ak chcete nainštalovať vankúšový modul, otvorte terminál a spustite:

pip install Pillow

Modul Webový prehliadač vám pomôže otvoriť akýkoľvek odkaz vo vašom predvolenom prehliadači. Je súčasťou štandardnej knižnice Pythonu. Preto ho nemusíte inštalovať externe.

Vygenerujte kľúč Edamam API pre vyhľadávanie receptov

Ak chcete vygenerovať kľúč rozhrania Edamam Recipe Search API, postupujte podľa nasledujúcich krokov:

  1. Navštívte Edamam a kliknite na Registračné rozhranie API tlačidlo. Vyplňte podrobnosti a vyberte si plán ako API na vyhľadávanie receptov – vývojár.
  2. Prihláste sa do svojho účtu, kliknite na účtov a potom kliknite na Prejdite na informačný panel tlačidlo.
  3. Potom kliknite na Aplikácie a nakoniec kliknite na vyhliadka vedľa položky Recipe Search API.
  4. Skopírujte ID aplikácie a Aplikačné klávesy a uložte ho na použitie vo svojej aplikácii.

Budovanie funkčnosti na získanie 5 najlepších receptov

Celý zdrojový kód na zostavenie aplikácie na vyhľadávanie receptov pomocou Pythonu nájdete v tomto úložisko GitHub.

Importujte požadované moduly. Definujte metódu get_top_5_recipes() ktorý načítava názvy piatich najlepších receptov, obrázky a odkazy na jedlo, ktoré používateľ hľadá. Použite dostať () extrahovať názov jedla, ktoré používateľ hľadal.

Ak používateľ zadal názov receptu, definujte základnú adresu URL pre koncový bod vyhľadávania receptov Edamam API. Prejdite app_id a app_key ktoré ste skopírovali skôr na overenie a autorizáciu požiadaviek 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

Vytvorte si slovník, parametre ktorý obsahuje rôzne parametre, ktoré musíte odovzdať ako súčasť požiadavky API. Nastavte páry kľúč – hodnota pre q, app_id, a app_key k hodnotám, ktoré ste získali predtým. Nastaviť od a do parametre, aby odrážali počet výsledkov, ktoré chcete vidieť.

Pošlite požiadavku GET do rozhrania Edamam API kombinujúc URL API a parametre slovník. Uložte odpoveď a extrahujte ju vo formáte JSON. Zavolajte clear_recipe_list() na vymazanie receptov prítomných na obrazovke z predchádzajúcich požiadaviek.

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

Skontrolujte, či kľúč, hity je prítomný v extrahovaných údajoch JSON a ak obsahuje výsledok vyhľadávania. Ak áno, opakujte si výsledky vyhľadávania a extrahujte informácie o recepte jeden po druhom. Pošlite požiadavku GET na adresu URL obrázka s príponou Prúd parameter nastavený na Pravda aby ste umožnili streamovanie obrazových údajov.

Použite vankúšový modul Obrázok triedy, aby ste otvorili obrázok, ktorý ste dostali. Zmeňte jeho veľkosť tak, aby mala výšku a šírku 200 pixelov pomocou Lanczos metóda prevzorkovania pre kvalitnú zmenu veľkosti. Preveďte ho na kompatibilný s Tkinter PhotoImage na jeho zobrazenie v grafickom používateľskom rozhraní.

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)

Budovanie štruktúry aplikácie

Definujte tri štítky na zobrazenie názvu receptu, obrázku a prepojenia na recept. Nastavte rodičovské okno, do ktorého ho chcete umiestniť, text, ktorý chcete zobraziť, a štýl písma, ktorý by mal mať. Ak chcete zobraziť obrázok, nastavte obrázok pripisovať foto_obrázok. Nastaviť kurzor možnosť v štítku odkazu na ruka2 aby sa dalo kliknúť.

Zviažte odkaz a kliknutím ľavým tlačidlom myši zavolajte udalosť otvoriť odkaz() funkciu. Usporiadajte všetky miniaplikácie pomocou balenie metódou, vycentrujte ich vodorovne a podľa potreby pridajte vypchávku. Pridajte názov, obrázky a odkazy do troch rôznych zoznamov.

 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)

Definujte metódu, clear_recipe_list() na vymazanie celého obsahu obrazovky vygenerovaného predchádzajúcou požiadavkou. Vymažte obsah zoznamu receptov a opakujte každý štítok v recept_štítok zoznam.

Volanie na pack_forget() spôsob, ako odstrániť štítok z displeja, ale ponechať objekt widgetu nedotknutý.

Vyčistite recepty_štítky zoznam pre nové údaje. Tento postup zopakujte aj pre obrázky a odkazy. Definujte metódu, otvoriť odkaz() otvorte odkaz na recept vo vašom predvolenom webovom prehliadači.

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)

Inicializujte koreňové okno Tkinter. Nastavte názov, rozmery a farbu pozadia aplikácie. Definujte miniaplikáciu rámu a nastavte jeho rodičovský prvok spolu s farbou pozadia. Vytvorte štítok, položku a tlačidlo vyhľadávania. Usporiadajte všetky miniaplikácie pomocou balenie a podľa potreby pridajte vypchávku.

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)

Vytvorte plátno s bielym pozadím na zobrazenie miniaplikácií obsahujúcich informácie o recepte. Usporiadajte ho na ľavú stranu okna, pričom zaberte všetok priestor v ráme v oboch smeroch a rozšírte ho pri zmene veľkosti.

Vytvorte zvislý posuvník pre plátno a umiestnite ho na pravú stranu. Prepojiť scrollbar.set metóda k canvas.yview tak, že posúvaním posúvača sa bude posúvať obsah plátna.

Vytvorte rám vo vnútri plátna, ktorý bude slúžiť ako kontajner na položky receptu, ukotvený v ľavej hornej časti okna. Zviazať takú udalosť, ktorá zaisťuje, že pole sa môže správne posúvať, keď sa jeho obsah zmení alebo zmení veľkosť.

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

Definujte zoznam pre recepty, štítky, obrázky a odkazy. The mainloop() funkcia hovorí Pythonu, aby spustil slučku udalostí Tkinter a počúval udalosti, kým nezatvoríte okno.

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

root.mainloop()

Dajte to všetko dokopy a objavte kuchyne jediným kliknutím.

Výstup z aplikácie Recipe Finder

Po spustení programu a zadaní jedla ako Chicken Burger získate päť najlepších výsledkov. Obsahuje názov, obrázok a odkaz na recept zadaného jedla. Po kliknutí na odkaz predvolený webový prehliadač otvorí odkaz na recept. Pri posúvaní nadol zostáva veľkosť obsahu rovnaká a rôzne výsledky sa zobrazujú vodorovne na stred.

Vylepšenie aplikácie Recipe Finder

Ak chcete vylepšiť svoju aplikáciu na vyhľadávanie receptov, môžete implementovať filtrovanie a triedenie podľa rôznych preferencií. Jedlo môžete filtrovať podľa diétnych preferencií, času varenia a kuchyne a triediť ich v ľubovoľnom poradí.

Vytvorte si funkciu na uloženie obľúbených receptov do záložiek, aby ste si ich mohli pozrieť neskôr, a možnosť zdieľať ich na sociálnych sieťach. Môžete vytvoriť kategóriu na objavovanie najvyhľadávanejších jedál, najčastejšie uložených medzi záložky atď.

Spojením vašich programátorských zručností a výkonných funkcií API môžete túto základnú aplikáciu ďalej previesť na plnohodnotnú.