Enam pole vaja aega raisata siit-sealt ideaalse retsepti otsimisele. Kasutage seda juhendit oma isikupärastatud retseptiotsija rakenduse loomiseks.

Kuna Internetis on sadu linke ja reklaame laiali retseptide rohkus, võib täiusliku retsepti leidmine olla keeruline. Retseptiotsija rakenduse loomine pakub teile kohandatud ja kasutajasõbralikku kogemust ning ühtlast disaini, kõrvaldades kõik ebaolulised tulemused ja segavad asjaolud

. Selle rakenduse loomisega täiustate oma oskusi HTTP-päringute, API-võtmehalduse, pilditöötluse ja graafiliste kasutajaliideste, sealhulgas dünaamilise GUI värskendamise, loomisel.

Installige Tkinteri, taotluste, padja ja veebibrauseri moodul

Retseptiotsija rakenduse loomiseks vajate Tkinterit, taotlusi, PIL-i ja veebibrauseri moodulit. Tkinter võimaldab teil luua töölauarakendusi. See pakub mitmesuguseid vidinaid, mis muudavad GUI-de arendamise lihtsamaks. Tkinteri installimiseks avage terminal ja käivitage:

pip install tkinter

Taotluste moodul muudab HTTP-päringute tegemise ja vastuseobjekti tagastamise lihtsaks, mis sisaldab selliseid andmeid nagu kodeering ja olek. Saate seda kasutada helistaja ID teabe toomiseks,

instagram viewer
luua veebisaidi oleku kontrollija, valuuta konverter või uudiste rakendus. Taotluste mooduli installimiseks avage terminal ja käivitage:

pip install requests

Pillow teek – Pythoni pildiraamatukogu (PIL) hark – pakub pilditöötlusvõimalusi, mis aitavad redigeerida, luua, failivormingute teisendamineja piltide salvestamine. Padjamooduli installimiseks avage terminal ja käivitage:

pip install Pillow

Veebibrauseri moodul aitab teil vaikebrauseris mis tahes linki avada. See on Pythoni standardteegi osa. Seetõttu ei pea te seda väliselt installima.

Looge retseptiotsingu jaoks Edamam API võti

Edamam Recipe Search API võtme genereerimiseks toimige järgmiselt.

  1. Külastage Edamam ja klõpsake nuppu Registreerumise API nuppu. Täitke üksikasjad ja valige oma plaan Retseptiotsingu API – arendaja.
  2. Logige oma kontole sisse, klõpsake nuppu kontosid nuppu ja seejärel nuppu Minge juhtpaneelile nuppu.
  3. Pärast seda klõpsake nuppu Rakendused vahekaarti ja lõpuks klõpsake nuppu Vaade nuppu Retseptiotsingu API kõrval.
  4. Kopeerige Rakenduse ID ja Rakenduse võtmed ja salvestage see oma rakenduses kasutamiseks.

Funktsionaalsuse loomine, et saada 5 parimat retsepti

Siit leiate kogu lähtekoodi Pythoni abil retseptiotsija rakenduse loomiseks GitHubi hoidla.

Importige vajalikud moodulid. Määratlege meetod get_top_5_recipes() mis toob välja viie populaarseima retsepti pealkirjad, pildid ja lingid roa kohta, mida kasutaja otsib. Kasutage saada () et eraldada kasutaja otsitud roa nimi.

Kui kasutaja sisestas retsepti nime, määrake Edamam API retseptiotsingu lõpp-punkti baas-URL. Mööda rakenduse_id ja rakenduse_võti kopeerisite varem API taotluste autentimiseks ja autoriseerimiseks.

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

Loo sõnaraamat, parameetrid mis sisaldab erinevaid parameetreid, mille peate API päringu osana edastama. Määrake võtme-väärtuse paarid q, rakenduse_id, ja rakenduse_võti väärtustele, mille saite varem. Määrake alates ja juurde parameetrid, et kajastada soovitud tulemuste arvu.

Saatke Edamam API-le GET-i päring, ühendades API URL-i ja parameetrid sõnastik. Salvestage vastus ja eraldage see JSON-vormingus. Helistama clear_recipe_list() ekraanil olevate retseptide eemaldamiseks varasematest päringutest.

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

Kontrollige, kas võti, tabamust on ekstraktitud JSON-andmetes olemas ja kui see sisaldab otsingutulemust. Kui jah, korrake otsingutulemusi ja eraldage retseptiteave ükshaaval. Saatke GET-i päring pildi URL-ile koos oja parameeter seatud väärtusele Tõsi pildiandmete voogesituse võimaldamiseks.

Kasutage padjamoodulit Pilt klassis, et avada saadud pilt. Muutke selle suurust, et selle kõrgus ja laius oleks 200 pikslit, kasutades Lanczos resampling meetod kvaliteetseks suuruse muutmiseks. Teisendage see Tkinteriga ühilduvaks PhotoImage selle kuvamiseks graafilisel kasutajaliidesel.

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)

Rakenduse struktuuri loomine

Määrake kolm silti, et kuvada retsepti pealkiri, pilt ja retsepti link. Määrake ülemaken, kuhu soovite selle asetada, kuvatav tekst ja fondi stiil. Pildi kuvamiseks seadke pilt omistada foto_pilt. Määrake kursor lingi sildis olev valik käsi2 et see oleks klõpsatav.

Siduge link ja hiire vasaku klõpsuga sündmus, et helistada open_link() funktsiooni. Korraldage kõik vidinad kasutades pakkima meetodil, tsentreerige need horisontaalselt ja lisage vajadusel polster. Lisage pealkiri, pildid ja lingid kolmele erinevale loendile.

 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)

Määratlege meetod, clear_recipe_list() kogu eelmise päringu loodud ekraani sisu kustutamiseks. Tühjendage retseptiloendi sisu ja korrake iga sildi üle retsepti_silt nimekirja.

Helistades pack_forget() meetod sildi eemaldamiseks ekraanilt, kuid vidina objekti puutumatuna hoidmiseks.

Tühjendage retsepti_sildid uute andmete loend. Korrake seda protsessi ka piltide ja linkide puhul. Määratlege meetod, open_link() et avada vaikeveebibrauseris retsepti link.

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)

Initsialiseerige Tkinteri juuraken. Määrake rakenduse pealkiri, mõõtmed ja taustavärv. Määrake raami vidin ja määrake selle põhielement koos taustavärviga. Looge silt, kirje ja otsingunupp. Korraldage kõik vidinad kasutades pakkima meetod ja lisage vajadusel polsterdus.

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)

Looge valge taustaga lõuend, et kuvada retseptiteavet sisaldavad vidinad. Korraldage see akna vasakusse serva, võttes kogu raami ruumi mõlemas suunas ja laiendades seda suuruse muutmisel.

Looge lõuendi jaoks vertikaalne kerimisriba ja asetage see selle paremale küljele. Linkige kerimisriba.komplekt meetodit canvas.yview meetod, nii et kerimisriba kerimine kerib lõuendi sisu.

Looge lõuendi sees raam, mis toimib retseptitoodete konteinerina, ankurdades akna vasakusse ülaossa. Siduge sündmus nii, et see tagab kasti korrektse kerimise, kui selle sisu muutub või suurust muudetakse.

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

Määratlege retseptide, siltide, piltide ja linkide loend. The mainloop() funktsioon käsib Pythonil käivitada Tkinteri sündmusetsükli ja kuulata sündmusi, kuni sulgete akna.

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

root.mainloop()

Pange see kõik kokku ja avastage kööki ühe nupuvajutusega.

Rakenduse Retseptileidja väljund

Kui käivitate programmi ja sisestate roogi kanaburgerina, saate viis parimat tulemust. See sisaldab sisestatud roa pealkirja, pilti ja retsepti linki. Lingil klõpsates avab vaikeveebibrauser retsepti lingi. Alla kerimisel jääb sisu suurus samaks ja kuvatakse erinevad tulemused horisontaalselt keskele.

Retseptiotsija rakenduse täiustamine

Retseptiotsija rakenduse täiustamiseks saate rakendada filtreerimist ja sortimist vastavalt erinevatele eelistustele. Saate filtreerida roogi toitumiseelistuste, küpsetusaja ja köögi järgi ning sorteerida need suvalises järjekorras.

Looge funktsioon lemmikretseptide lisamiseks järjehoidjatesse, et neid hiljem vaadata, ja võimalus neid sotsiaalmeedias jagada. Saate luua kategooria, et avastada enimotsitud roogasid, enim järjehoidjaid ja nii edasi.

Kombineerides oma programmeerimisoskused ja API võimsad funktsioonid, saate selle põhirakenduse täieõiguslikuks muuta.