Už nemusíte ztrácet čas hledáním dokonalého receptu sem a tam. Použijte tuto příručku k vytvoření vlastní aplikace pro vyhledávání receptů.
S množstvím receptů roztroušených po celém internetu se stovkami odkazů a reklam může být nalezení dokonalého receptu náročné. Vytvoření aplikace pro vyhledávání receptů vám poskytuje přizpůsobené a uživatelsky přívětivé prostředí a konzistentní design, který eliminuje všechny nepodstatné výsledky a rušivé vlivy
Vytvořením této aplikace si vylepšíte své dovednosti v HTTP požadavcích, správě API klíčů, manipulaci s obrázky a vytváření grafických uživatelských rozhraní včetně dynamické aktualizace GUI.
Nainstalujte modul Tkinter, Requests, Pillow a Webbrowser
K vytvoření aplikace pro vyhledávání receptů potřebujete Tkinter, Requests, PIL a modul Webbrowser. Tkinter vám umožňuje vytvářet desktopové aplikace. Nabízí řadu widgetů, které usnadňují vývoj GUI. Chcete-li nainstalovat Tkinter, otevřete terminál a spusťte:
pip install tkinter
Modul Requests usnadňuje vytváření požadavků HTTP a vracení objektu odpovědi, který obsahuje data, jako je kódování a stav. Můžete jej použít k načtení informací o ID volajícího,
vytvořit kontrolu stavu webu, převodník měn, popř zpravodajská aplikace. Chcete-li nainstalovat modul požadavků, otevřete terminál a spusťte:pip install requests
Knihovna Pillow – rozvětvení knihovny Python Imaging Library (PIL) – poskytuje možnosti zpracování obrázků, které pomáhají při úpravách, vytváření, převod formátů souborůa ukládání obrázků. Chcete-li nainstalovat modul Pillow, otevřete terminál a spusťte:
pip install Pillow
Modul Webový prohlížeč vám pomůže otevřít jakýkoli odkaz ve vašem výchozím prohlížeči. Je součástí standardní knihovny Python. Proto jej nemusíte instalovat externě.
Vygenerujte klíč API Edamam pro vyhledávání receptů
Chcete-li vygenerovat klíč rozhraní API Edamam Recipe Search, postupujte takto:
- Návštěva Edamam a klikněte na Registrační API knoflík. Vyplňte podrobnosti a vyberte svůj plán jako Recipe Search API – Developer.
- Přihlaste se ke svému účtu, klikněte na účty a poté klikněte na Přejděte na Dashboard knoflík.
- Poté klikněte na Aplikace a nakonec klikněte na Pohled vedle Recipe Search API.
- Zkopírujte ID aplikace a Aplikační klávesy a uložte jej pro použití ve vaší aplikaci.
Budování funkčnosti, abyste získali 5 nejlepších receptů
Celý zdrojový kód pro sestavení aplikace pro vyhledávání receptů pomocí Pythonu najdete v tomto úložiště GitHub.
Importujte požadované moduly. Definujte metodu get_top_5_recipes() který načte prvních pět názvů receptů, obrázky a odkazy na jídlo, které uživatel hledá. Použití dostat() extrahovat název jídla, které uživatel hledal.
Pokud uživatel zadal název receptu, definujte základní adresu URL pro koncový bod vyhledávání receptů Edamam API. Předat app_id a app_key které jste zkopírovali dříve k ověření a autorizaci požadavků 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
Vytvořte si slovník, parametry který obsahuje různé parametry, které musíte předat jako součást požadavku API. Nastavte páry klíč–hodnota pro q, app_id, a app_key k hodnotám, které jste získali dříve. Nastav z a na parametry, které odrážejí počet výsledků, které chcete vidět.
Odešlete požadavek GET do rozhraní Edamam API, který kombinuje URL API a parametry slovník. Uložte odpověď a extrahujte ji ve formátu JSON. Volání clear_recipe_list() k vymazání receptů přítomných na obrazovce z dřívějších požadavků.
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()
Zkontrolujte, zda klíč, hity je přítomen v extrahovaných datech JSON a pokud obsahuje výsledek vyhledávání. Pokud ano, iterujte výsledky vyhledávání a extrahujte informace o receptu jeden po druhém. Odešlete požadavek GET na adresu URL obrázku s příponou proud parametr nastaven na Skutečný umožňující streamování obrazových dat.
Použijte modul Polštář obraz třídy a otevřete obrázek, který jste obdrželi. Změňte jeho velikost na výšku a šířku 200 pixelů pomocí Lanczos metoda převzorkování pro vysoce kvalitní změnu velikosti. Převeďte to na kompatibilní s Tkinter PhotoImage pro zobrazení v grafickém uživatelském 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)
Budování struktury aplikace
Definujte tři štítky pro zobrazení názvu receptu, obrázku a odkazu na recept. Nastavte rodičovské okno, do kterého jej chcete umístit, text, který chcete zobrazit, a styl písma, který by měl mít. Chcete-li zobrazit obrázek, nastavte obraz přisuzovat foto_obrázek. Nastav kurzor možnost v popisku odkazu na ruka2 aby to bylo klikací.
Svažte odkaz a kliknutím levým tlačítkem myši událost zavolejte otevřít odkaz() funkce. Uspořádejte všechny widgety pomocí balíček metodou, vycentrujte je vodorovně a podle potřeby přidejte vycpávku. Připojte název, obrázky a odkazy ke třem různým seznamům.
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 metodu, clear_recipe_list() k vymazání celého obsahu obrazovky vygenerovaného předchozím požadavkem. Vymažte obsah seznamu receptů a opakujte každý štítek v recept_štítek seznam.
Volání na pack_forget() způsob, jak odstranit štítek z displeje, ale ponechat objekt widgetu nedotčený.
Vyčistěte recepty_štítky seznam pro nová data. Tento postup opakujte také pro obrázky a odkazy. Definujte metodu, otevřít odkaz() otevřete odkaz na recept ve vašem výchozím webovém prohlížeč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 kořenové okno Tkinter. Nastavte název, rozměry a barvu pozadí aplikace. Definujte widget rámečku a nastavte jeho nadřazený prvek spolu s barvou pozadí. Vytvořte štítek, položku a tlačítko vyhledávání. Uspořádejte všechny widgety pomocí balíček a podle potřeby přidejte vycpá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)
Vytvořte plátno s bílým pozadím pro zobrazení widgetů obsahujících informace o receptu. Uspořádejte jej na levou stranu okna, zabere veškerý prostor v rámu v obou směrech a rozšíří ho při změně velikosti.
Vytvořte svislý posuvník pro plátno a umístěte jej na pravou stranu. Propojit scrollbar.set metoda k canvas.yview tak, že posouváním posuvníku se bude posouvat obsah plátna.
Vytvořte rámeček uvnitř plátna, který bude fungovat jako kontejner pro položky receptu, ukotvený v levém horním rohu okna. Svažte se takovou událost, která zajistí, že se pole může správně posouvat, když se jeho obsah změní nebo změní 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"))
)
Definujte seznam receptů, štítků, obrázků a odkazů. The mainloop() Funkce říká Pythonu, aby spustil smyčku událostí Tkinter a naslouchal událostem, dokud nezavřete okno.
recipe_list = []
recipe_labels = []
recipe_images = []
recipe_links = []
root.mainloop()
Dejte to všechno dohromady a objevte kuchyně jediným kliknutím.
Výstup z aplikace Recipe Finder
Po spuštění programu a zadání pokrmu jako Chicken Burger získáte pět nejlepších výsledků. Obsahuje název, obrázek a odkaz na recept zadaného jídla. Po kliknutí na odkaz výchozí webový prohlížeč otevře odkaz na recept. Při posouvání dolů zůstává velikost obsahu stejná a různé výsledky se zobrazují vodorovně na střed.
Vylepšení aplikace Recipe Finder
Chcete-li vylepšit svou aplikaci pro vyhledávání receptů, můžete implementovat filtrování a třídění podle různých preferencí. Pokrmy můžete filtrovat podle dietních preferencí, doby vaření a kuchyně a seřadit je v libovolném pořadí.
Vytvořte funkci pro přidání oblíbených receptů do záložek, abyste si je mohli prohlédnout později, a možnost je sdílet na sociálních sítích. Můžete si vytvořit kategorii, ve které objevíte nejhledanější jídla, nejčastěji uložená v záložkách a tak dále.
Spojením vašich programátorských dovedností a výkonných funkcí API můžete tuto základní aplikaci dále převést na plnohodnotnou.