Nebereikia gaišti laiko ieškant čia ir ten tobulo recepto. Naudokite šį vadovą, kad sukurtumėte asmeninę receptų paieškos programą.

Kadangi receptų gausa visame internete su šimtais nuorodų ir skelbimų, rasti tobulą receptą gali būti sudėtinga. Sukūrę receptų ieškiklio programą galėsite naudotis pritaikyta ir patogia patirtimi bei nuoseklų dizainą, pašalindami visus nereikšmingus rezultatus ir trukdžius.

Kurdami šią programą patobulinsite HTTP užklausų, API raktų valdymo, vaizdo manipuliavimo ir grafinių vartotojo sąsajų kūrimo, įskaitant dinaminį GUI atnaujinimą, įgūdžius.

Įdiekite „Tkinter“, „Requests“, „Pillow“ ir „Webbrowser Module“.

Norėdami sukurti receptų ieškiklio programą, jums reikia Tkinter, Requests, PIL ir žiniatinklio naršyklės modulio. „Tkinter“ leidžia kurti darbalaukio programas. Jame siūlomi įvairūs valdikliai, kurie palengvina GUI kūrimą. Norėdami įdiegti „Tkinter“, atidarykite terminalą ir paleiskite:

pip install tkinter

Užklausų modulis leidžia paprastai pateikti HTTP užklausas ir grąžinti atsakymo objektą, kuriame yra duomenų, tokių kaip kodavimas ir būsena. Galite naudoti jį norėdami gauti skambintojo ID informaciją,

instagram viewer
sukurti svetainės būsenos tikrintuvą, valiutos keitiklis arba naujienų programa. Norėdami įdiegti užklausų modulį, atidarykite terminalą ir paleiskite:

pip install requests

„Pillow“ biblioteka – „Python Imaging Library“ (PIL) šakutė – suteikia vaizdo apdorojimo galimybes, kurios padeda redaguoti, kurti, failų formatų konvertavimasir išsaugoti vaizdus. Norėdami įdiegti pagalvės modulį, atidarykite terminalą ir paleiskite:

pip install Pillow

Žiniatinklio naršyklės modulis padeda atidaryti bet kurią nuorodą numatytojoje naršyklėje. Tai yra standartinės Python bibliotekos dalis. Todėl jums nereikia jo įdiegti iš išorės.

Sukurkite Edamam API raktą receptų paieškai

Norėdami sugeneruoti Edamam Recipe Search API raktą, atlikite šiuos veiksmus:

  1. Apsilankykite Edamam ir spustelėkite Registracijos API mygtuką. Įveskite išsamią informaciją ir pasirinkite savo planą kaip Receptų paieškos API – kūrėjas.
  2. Prisijunkite prie savo paskyros, spustelėkite sąskaitos mygtuką, tada spustelėkite Pereiti prie prietaisų skydelio mygtuką.
  3. Po to spustelėkite Programos skirtuką ir galiausiai spustelėkite Žiūrėti mygtuką šalia Receptų paieškos API.
  4. Nukopijuokite Programos ID ir Programos raktai ir išsaugokite jį, kad galėtumėte naudoti savo programoje.

Sukurkite funkcionalumą, kad gautumėte 5 geriausius receptus

Čia galite rasti visą receptų ieškiklio programos kūrimo šaltinio kodą naudojant Python GitHub saugykla.

Importuokite reikiamus modulius. Apibrėžkite metodą get_top_5_recipes() kuris nuskaito penkių populiariausių receptų pavadinimus, vaizdus ir patiekalo, kurio ieško naudotojas, nuorodas. Naudokite gauti () norėdami išgauti patiekalo, kurio ieškojo vartotojas, pavadinimą.

Jei vartotojas įvedė recepto pavadinimą, nustatykite pagrindinį Edamam API recepto paieškos galutinio taško URL. Praleiskite app_id ir app_key nukopijavote anksčiau, kad patvirtintumėte ir patvirtintumėte API užklausas.

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

Sukurti žodyną, parametrai kuriame yra skirtingi parametrai, kuriuos turite perduoti kaip API užklausos dalį. Nustatykite rakto-reikšmių poras q, app_id, ir app_key prie anksčiau įgytų vertybių. Nustatyti ir į parametrus, kad atspindėtų norimų matyti rezultatų skaičių.

Išsiųskite GET užklausą į Edamam API, sujungdami API URL ir parametrai žodynas. Išsaugokite atsakymą ir ištraukite jį JSON formatu. Skambinti clear_recipe_list() norėdami išvalyti ekrane pateiktus receptus iš ankstesnių užklausų.

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

Patikrinkite, ar raktas, hitai yra išgautuose JSON duomenyse ir jei jame yra paieškos rezultatas. Jei taip, kartokite paieškos rezultatus ir po vieną ištraukite recepto informaciją. Išsiųskite GET užklausą į vaizdo URL su srautas parametras nustatytas į Tiesa kad būtų galima srautiniu būdu perduoti vaizdo duomenis.

Naudokite pagalvės modulį Vaizdas klasėje, kad atidarytumėte gautą vaizdą. Pakeiskite jo dydį, kad jo aukštis ir plotis būtų 200 pikselių, naudodami Lanczos atrankos metodas aukštos kokybės dydžiui keisti. Konvertuokite tai į suderinamą su Tkinter PhotoImage kad jis būtų rodomas grafinėje vartotojo sąsajoje.

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)

Programos struktūros kūrimas

Apibrėžkite tris etiketes, kad būtų rodomas recepto pavadinimas, vaizdas ir nuoroda į receptą. Nustatykite pagrindinį langą, kuriame norite jį įdėti, tekstą, kurį norite rodyti, ir šrifto stilių, kurį jis turėtų turėti. Norėdami rodyti vaizdą, nustatykite vaizdas priskirti foto_vaizdas. Nustatyti žymeklį parinktis nuorodos etiketėje į ranka2 kad jį būtų galima spustelėti.

Susiekite nuorodą ir kairiuoju pelės klavišu spustelėkite įvykį, kad iškviestumėte atidaryti nuorodą() funkcija. Tvarkykite visus valdiklius naudodami paketas metodu, centruokite juos horizontaliai ir, jei reikia, pridėkite kamšalą. Pridėkite pavadinimą, vaizdus ir nuorodas į tris skirtingus sąrašus.

 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)

Apibrėžkite metodą, clear_recipe_list() Norėdami išvalyti visą ekrano turinį, sugeneruotą pagal ankstesnę užklausą. Išvalykite receptų sąrašo turinį ir pakartokite kiekvieną etiketę recepto_etiketė sąrašą.

Skambindamas į pack_forget () būdas pašalinti etiketę iš ekrano, bet išlaikyti valdiklio objektą nepažeistą.

Išvalykite recepto_etiketes naujų duomenų sąrašas. Pakartokite šį procesą ir vaizdams bei nuorodoms. Apibrėžkite metodą, atidaryti nuorodą() kad atidarytumėte recepto nuorodą numatytojoje žiniatinklio naršyklėje.

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)

Inicijuoti Tkinter šakninį langą. Nustatykite programos pavadinimą, matmenis ir fono spalvą. Apibrėžkite rėmelio valdiklį ir nustatykite jo pagrindinį elementą kartu su fono spalva. Sukurkite etiketę, įrašą ir paieškos mygtuką. Sutvarkykite visus valdiklius naudodami paketas metodą ir prireikus pridėkite kamšalo.

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)

Sukurkite drobę baltu fonu, kad būtų rodomi valdikliai, kuriuose yra recepto informacija. Sutvarkykite jį kairėje lango pusėje, užimdami visą rėmo erdvę į abi puses ir išplėsdami ją keičiant dydį.

Sukurkite vertikalią drobės slinkties juostą ir padėkite ją dešinėje pusėje. Susieti slinkties juosta.set metodas prie canvas.yview metodą, kad slinkus slinkties juosta būtų slinktas drobės turinys.

Drobės viduje sukurkite rėmelį, kuris veiktų kaip recepto elementų talpykla, pritvirtintas lango viršuje, kairėje. Surišti įvykis, kad būtų užtikrinta, jog dėžutė galėtų tinkamai slinkti, kai pasikeičia jo turinys arba keičiasi jo dydis.

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

Apibrėžkite receptų, etikečių, vaizdų ir nuorodų sąrašą. The mainloop () funkcija liepia Python paleisti Tkinter įvykių kilpą ir klausytis įvykių, kol uždarysite langą.

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

root.mainloop()

Sudėkite viską ir atraskite virtuves vienu mygtuko paspaudimu.

Programos „Receptų ieškiklis“ išvestis

Vykdydami programą ir įvedę patiekalą kaip vištienos mėsainį, gausite penkis geriausius rezultatus. Jame yra jūsų įvesto patiekalo pavadinimas, vaizdas ir recepto nuoroda. Spustelėjus nuorodą, numatytoji žiniatinklio naršyklė atidaro recepto nuorodą. Slenkant žemyn, turinio dydis išlieka toks pat, o įvairūs rezultatai rodomi horizontaliai.

Receptų ieškiklio programos tobulinimas

Norėdami patobulinti receptų ieškiklio programą, galite įdiegti filtravimą ir rūšiavimą pagal skirtingas nuostatas. Galite filtruoti patiekalą pagal dietą, gaminimo laiką ir virtuvę ir rūšiuoti juos bet kokia tvarka.

Sukurkite funkciją, kad galėtumėte pažymėti mėgstamus receptus, kad galėtumėte peržiūrėti vėliau, ir parinktį bendrinti juos socialinėje žiniasklaidoje. Galite sukurti kategoriją ir atrasti dažniausiai ieškomus patiekalus, dažniausiai pažymėtus ir pan.

Sujungę savo programavimo įgūdžius ir galingas API funkcijas, galite toliau konvertuoti šią pagrindinę programą į visavertę programą.