Az interneten szétszórt receptek sokaságával, linkekkel és hirdetésekkel, a tökéletes recept megtalálása kihívást jelenthet. A receptkereső alkalmazás elkészítése személyre szabott és felhasználóbarát élményt és következetes tervezést biztosít, kiküszöbölve minden irreleváns eredményt és zavaró tényezőt.
.Az alkalmazás elkészítésével fejlesztheti tudását a HTTP-kérésekben, az API-kulcsok kezelésében, a képkezelésben és a grafikus felhasználói felületek felépítésében, beleértve a dinamikus grafikus felhasználói felület frissítését.
Tartalomjegyzék
Telepítse a Tkinter, Requests, Pillow és Webbrowser modult
Receptkereső alkalmazás létrehozásához Tkinter, Requests, PIL és Webbrowser modul szükséges. A Tkinter lehetővé teszi az asztali alkalmazások létrehozását. Számos widgetet kínál, amelyek megkönnyítik a grafikus felhasználói felületek fejlesztését. A Tkinter telepítéséhez nyissa meg a terminált, és futtassa:
pip install tkinter
A Requests modul egyszerűvé teszi a HTTP-kérések létrehozását és egy olyan válaszobjektum visszaadását, amely olyan adatokat tartalmaz, mint a kódolás és az állapot. Használhatja hívóazonosító adatok lekérésére, webhelyállapot-ellenőrző, valutaváltó vagy híralkalmazás létrehozására. A Requests modul telepítéséhez nyissa meg a terminált, és futtassa:
pip install requests
A Pillow könyvtár – a Python Imaging Library (PIL) egy része – olyan képfeldolgozási képességeket biztosít, amelyek segítenek a szerkesztésben, a létrehozásban, a fájlformátumok konvertálásában és a képek mentésében. A Pillow modul telepítéséhez nyissa meg a terminált, és futtassa:
pip install Pillow
A Webböngésző modul segít bármely hivatkozás megnyitásában az alapértelmezett böngészőben. Ez a Python szabványkönyvtár része. Ezért nem kell kívülről telepítenie.
Edamam API-kulcs létrehozása a receptkereséshez
Az Edamam Recipe Search API kulcs létrehozásához kövesse az alábbi lépéseket:
A funkcionalitás kialakítása az 5 legjobb recept eléréséhez
Ebben megtalálja a teljes forráskódot a Python segítségével elkészíthető receptkereső alkalmazáshoz GitHub adattár.
Importálja a szükséges modulokat. Határozzon meg egy get_top_5_recipes() metódust, amely lekéri a felhasználó által keresett étel öt legnépszerűbb receptjének címét, képét és linkjét. A get() segítségével kivonhatja a felhasználó által keresett étel nevét.
Ha a felhasználó beírt egy receptnevet, adja meg az Edamam API receptkeresési végpontjának alap URL-címét. Adja át a korábban kimásolt app_id és app_key kulcsot az API-kérelmek hitelesítéséhez és engedélyezéséhez.
import tkinter as tk
import requests
from PIL import Image, ImageTk
import webbrowserdef get_top_5_recipes():
recipe_name = entry_recipe_name.get()
if recipe_name:
api_url = "https://api.edamam.com/search"
app_id =
app_key =
Hozzon létre egy szótárt, paramétereket, amelyek tartalmazzák az API-kérés részeként átadandó különböző paramétereket. Állítsa be a q, app_id és app_key kulcs-érték párjait a korábban kapott értékekre. Állítsa be a from és to paramétereket, hogy tükrözze a látni kívánt eredmények számát.
Küldjön egy GET kérelmet az Edamam API-nak az API URL-cím és a paraméterszótár kombinálásával. Tárolja a választ, és JSON formátumban bontsa ki. Hívja a clear_recipe_list() parancsot, hogy törölje a képernyőn lévő recepteket a korábbi kérésekből.
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()
Ellenőrizze, hogy a kulcs, találat szerepel-e a kivont JSON-adatokban, és tartalmazza-e a keresési eredményt. Ha igen, ismételje meg a keresési eredményeket, és egyenként vegye ki a receptinformációkat. A képadatok streamelésének engedélyezéséhez küldjön egy GET-kérést a kép URL-címére úgy, hogy az adatfolyam-paramétert True értékre állítsa.
Használja a Párna modul Kép osztályát a kapott kép megnyitásához. Méretezze át úgy, hogy a magassága és szélessége 200 pixel legyen a Lanczos újramintavételezési módszerrel a jó minőségű átméretezés érdekében. Konvertálja ezt Tkinter-kompatibilis PhotoImage-re, hogy megjelenítse a grafikus felhasználói felületen.
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)
Az alkalmazás szerkezetének felépítése
Határozzon meg három címkét a recept címének, a képnek és a receptre mutató hivatkozásnak a megjelenítéséhez. Állítsa be a szülőablakot, amelybe el szeretné helyezni, a megjeleníteni kívánt szöveget és a betűtípus stílusát. A kép megjelenítéséhez állítsa az image attribútumot a photo_image értékre. A hivatkozás címkéjében állítsa a kurzort hand2-re, hogy kattintható legyen.
Kösse össze a hivatkozást és a bal egérkattintás eseményét az open_link() függvény meghívásához. Rendezd az összes widgetet a csomagolás módszerével, középre igazítsd őket vízszintesen, és szükség szerint adj hozzá párnázást. Adja hozzá a címet, a képeket és a hivatkozásokat három különböző listához.
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(
"<Button-1>", lambda event, link=recipe_link: open_link(link)
)recipe_labels.append(recipe_title_label)
recipe_images.append(photo_image)
recipe_links.append(link_label)
Határozzon meg egy módszert, a clear_recipe_list() az előző kérés által generált teljes képernyőtartalom törlésére. Törölje a receptlista tartalmát, és ismételje meg az egyes címkéket a recept_címke listában.
A pack_forget() metódus meghívása a címke eltávolításához a kijelzőről, de a widget objektum érintetlen maradásához.
Törölje a recept_címkék listáját az új adatokhoz. Ismételje meg ezt a folyamatot a képeknél és a hivatkozásoknál is. Határozzon meg egy módszert, az open_link() a recepthivatkozás megnyitásához az alapértelmezett webböngészőben.
def clear_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()def open_link(link):
webbrowser.open(link)
Inicializálja a Tkinter gyökérablakát. Állítsa be az alkalmazás címét, méreteit és háttérszínét. Határozzon meg egy keret widgetet, és állítsa be a szülőelemét a háttérszínével együtt. Hozzon létre egy címkét, egy bejegyzést és egy keresőgombot. Rendszerezze az összes widgetet a csomagolás módszerével, és szükség szerint adjon hozzá párnázást.
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)
Hozzon létre egy fehér hátterű vásznat a receptinformációkat tartalmazó widgetek megjelenítéséhez. Rendezze az ablak bal oldalára úgy, hogy a keretben lévő teljes helyet mindkét irányban elfoglalja, és átméretezéskor bővítse.
Hozzon létre egy függőleges görgetősávot a vászonhoz, és helyezze a jobb oldalára. Kapcsolja össze a scrollbar.set metódust a canvas.yview metódussal, így a görgetősáv görgetése görgeti a vászon tartalmát.
Hozzon létre egy keretet a vásznon belül, amely tárolóként szolgál a receptelemek számára, rögzítve az ablak bal felső sarkában. Kösse össze a
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(
"<Configure>", lambda event: canvas.configure(scrollregion=canvas.bbox("all"))
)
Adja meg a receptek, címkék, képek és hivatkozások listáját. A mainloop() függvény arra utasítja a Pythont, hogy futtassa a Tkinter eseményhurkot, és figyelje az eseményeket, amíg be nem zárja az ablakot.
recipe_list = []
recipe_labels = []
recipe_images = []
recipe_links = []root.mainloop()
Állítsa össze az egészet, és fedezze fel a konyhákat egyetlen gombnyomással.
A Receptkereső alkalmazás kimenete
A program futtatásakor és Chicken Burger néven belépve az ételbe, az első öt eredményt kapja. Tartalmazza a beírt étel címét, képét és receptlinkjét. A hivatkozásra kattintva az alapértelmezett webböngésző megnyitja a recept linkjét. Lefelé görgetéskor a tartalom mérete változatlan marad, és a különböző eredményeket vízszintesen középre állítva jeleníti meg.
A Receptkereső alkalmazás fejlesztése
A receptkereső alkalmazás fejlesztése érdekében szűrést és rendezést hajthat végre a különböző preferenciák szerint. Az ételeket az étrendi preferenciák, a főzési idő és a konyha szerint szűrheti, és tetszőleges sorrendbe rendezheti.
Hozzon létre egy funkciót, amellyel kedvenc receptjeit könyvjelzővel láthatja el, hogy később megtekinthesse, és megoszthatja azokat a közösségi médiában. Létrehozhat egy kategóriát, hogy felfedezze a legtöbbet keresett ételeket, a legtöbb könyvjelzővel ellátott stb.
Programozási készségeit és az API-k hatékony funkcióit ötvözve tovább alakíthatja ezt az alapalkalmazást teljes értékű alkalmazássá.