Vairs netērējiet laiku, meklējot šeit un tur, lai atrastu ideālo recepti. Izmantojiet šo rokasgrāmatu, lai izveidotu personalizētu recepšu meklētāja lietojumprogrammu.

Tā kā ir daudz recepšu, kas ir izkaisītas visā internetā ar simtiem saišu un sludinājumu, ideālās receptes atrašana var būt sarežģīta. Recepšu meklētāja lietotnes izveide nodrošina jums pielāgotu un lietotājam draudzīgu pieredzi un konsekventu dizainu, novēršot visus nebūtiskos rezultātus un traucējošos.

.Izveidojot šo lietojumprogrammu, jūs uzlabosit savas prasmes HTTP pieprasījumos, API atslēgu pārvaldībā, attēlu manipulācijās un grafisko lietotāja saskarņu veidošanā, tostarp dinamiskā GUI atjaunināšanā.

Instalējiet Tkinter, Requests, Pillow un Webbrowser Module

Lai izveidotu recepšu meklētāja lietojumprogrammu, ir nepieciešams Tkinter, Requests, PIL un Web Browser modulis. Tkinter ļauj izveidot darbvirsmas lietojumprogrammas. Tas piedāvā dažādus logrīkus, kas atvieglo GUI izstrādi. Lai instalētu Tkinter, atveriet termināli un palaidiet:

instagram viewer
pip install tkinter

Pieprasījumu modulis ļauj vienkārši veikt HTTP pieprasījumus un atgriezt atbildes objektu, kurā ir dati, piemēram, kodējums un statuss. Varat to izmantot, lai iegūtu zvanītāja ID informāciju, izveidot vietnes statusa pārbaudītāju, valūtas konvertētājs vai ziņu aplikācija. Lai instalētu pieprasījumu moduli, atveriet termināli un palaidiet:

pip install requests

Pillow bibliotēka — Python Imaging Library (PIL) daļa — nodrošina attēlu apstrādes iespējas, kas palīdz rediģēt, izveidot, failu formātu konvertēšanaun attēlu saglabāšana. Lai instalētu spilvenu moduli, atveriet termināli un palaidiet:

pip install Pillow

Tīmekļa pārlūkprogrammas modulis palīdz atvērt jebkuru saiti noklusējuma pārlūkprogrammā. Tā ir daļa no Python standarta bibliotēkas. Tāpēc jums tas nav jāinstalē ārēji.

Ģenerējiet Edamam API atslēgu recepšu meklēšanai

Lai ģenerētu Edamam Recipe Search API atslēgu, veiciet tālāk norādītās darbības.

  1. Apmeklējums Edamam un noklikšķiniet uz Reģistrācijas API pogu. Aizpildiet informāciju un izvēlieties savu plānu kā Recepšu meklēšanas API — izstrādātājs.
  2. Piesakieties savā kontā, noklikšķiniet uz konti pogu un pēc tam noklikšķiniet uz Dodieties uz informācijas paneli pogu.
  3. Pēc tam noklikšķiniet uz Lietojumprogrammas cilni un visbeidzot noklikšķiniet uz Skatīt pogu blakus Recipe Search API.
  4. Kopējiet Lietojumprogrammas ID un Lietojumprogrammu atslēgas un saglabājiet to izmantošanai savā lietojumprogrammā.

Izveidojiet funkcionalitāti, lai iegūtu 5 labākās receptes

Šeit varat atrast visu avota kodu recepšu meklētāja lietojumprogrammas izveidei, izmantojot Python GitHub repozitorijs.

Importējiet nepieciešamos moduļus. Definējiet metodi get_top_5_recipes() kas izgūst piecu populārāko recepšu nosaukumus, attēlus un lietotāja meklētā ēdiena saites. Izmantot gūt() lai izvilktu lietotāja meklētā ēdiena nosaukumu.

Ja lietotājs ievadīja receptes nosaukumu, definējiet pamata URL Edamam API recepšu meklēšanas galapunktam. Paiet garām app_id un app_key jūs iepriekš nokopējāt, lai autentificētu un autorizētu API pieprasījumus.

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

Izveidojiet vārdnīcu, parametri kas satur dažādus parametrus, kas jums ir jānodod kā daļa no API pieprasījuma. Iestatiet atslēgu un vērtību pārus q, app_id, un app_key vērtībām, kuras ieguvāt agrāk. Iestatiet no un uz parametrus, lai atspoguļotu vēlamo rezultātu skaitu.

Nosūtiet GET pieprasījumu uz Edamam API, apvienojot API URL un parametri vārdnīca. Saglabājiet atbildi un izvelciet to JSON formātā. Zvaniet skaidrs_recepšu_saraksts() lai notīrītu ekrānā esošās receptes no iepriekšējiem pieprasījumiem.

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

Pārbaudiet, vai atslēga, hits atrodas izvilktajos JSON datos un ja tajā ir ietverts meklēšanas rezultāts. Ja jā, atkārtojiet meklēšanas rezultātus un pa vienam izņemiet informāciju par recepti. Nosūtiet GET pieprasījumu uz attēla URL ar straume parametrs iestatīts uz Taisnība lai atļautu attēla datu straumēšanu.

Izmantojiet spilvena moduli Attēls klasē, lai atvērtu saņemto attēlu. Mainiet tā izmēru, lai tā augstums un platums būtu 200 pikseļi, izmantojot Lanczos atkārtotas paraugu ņemšanas metode augstas kvalitātes izmēru maiņai. Konvertējiet to uz saderīgu ar Tkinter Fotoattēls lai to parādītu grafiskajā lietotāja interfeisā.

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)

Lietojumprogrammas struktūras izveide

Definējiet trīs etiķetes, lai parādītu receptes nosaukumu, attēlu un saiti uz recepti. Iestatiet vecāklogu, kurā vēlaties to ievietot, tekstu, kuru vēlaties parādīt, un fonta stilu tam vajadzētu būt. Lai parādītu attēlu, iestatiet attēlu piedēvēt foto_attēls. Iestatiet kursors opcija saites apzīmējumā uz roka2 lai tas būtu klikšķināms.

Saistiet saiti un ar peles kreiso taustiņu noklikšķiniet uz notikumu, lai izsauktu atvērt saiti() funkciju. Sakārtojiet visus logrīkus, izmantojot komplekts metodi, centrējiet tos horizontāli un pēc vajadzības pievienojiet polsterējumu. Pievienojiet nosaukumu, attēlus un saites trīs dažādiem sarakstiem.

 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)

Definējiet metodi, skaidrs_recepšu_saraksts() lai notīrītu visu ekrāna saturu, ko ģenerējis iepriekšējais pieprasījums. Notīriet recepšu saraksta saturu un atkārtojiet katru etiķeti receptes_etiķete sarakstu.

Zvanot uz pack_forget() metode, lai noņemtu etiķeti no displeja, bet saglabātu logrīka objektu neskartu.

Notīriet receptes_etiķetes jaunu datu saraksts. Atkārtojiet šo procesu arī attēliem un saitēm. Definējiet metodi, atvērt saiti() lai atvērtu receptes saiti noklusējuma tīmekļa pārlūkprogrammā.

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)

Inicializējiet Tkinter saknes logu. Iestatiet lietojumprogrammas nosaukumu, izmērus un fona krāsu. Definējiet rāmja logrīku un iestatiet tā vecākelementu kopā ar tā fona krāsu. Izveidojiet etiķeti, ierakstu un meklēšanas pogu. Sakārtojiet visus logrīkus, izmantojot komplekts metodi un pēc vajadzības pievienojiet polsterējumu.

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)

Izveidojiet audeklu ar baltu fonu, lai parādītu logrīkus, kuros ir informācija par recepti. Sakārtojiet to loga kreisajā pusē, aizņemot visu rāmī esošo vietu abos virzienos un paplašinot to, mainot izmēru.

Izveidojiet audekla vertikālu ritjoslu un novietojiet to labajā pusē. Saistiet ritjosla.komplekts metode uz canvas.yview metodi, lai, ritinot ritjoslu, ritinātu kanvas saturu.

Izveidojiet rāmi audekla iekšpusē, lai tas darbotos kā konteiners receptes vienumiem, noenkuroties loga augšējā kreisajā stūrī. Saistīt notikums tā, lai nodrošinātu, ka lodziņa var ritināt pareizi, kad mainās tā saturs vai tiek mainīts izmērs.

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

Definējiet recepšu, etiķešu, attēlu un saišu sarakstu. The mainloop() funkcija liek Python palaist Tkinter notikumu cilpu un klausīties notikumus, līdz aizverat logu.

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

root.mainloop()

Salieciet to visu kopā un atklājiet virtuves ēdienus ar vienu pogas klikšķi.

Recepšu meklētāja lietojumprogrammas izvade

Palaižot programmu un ievadot ēdienu kā vistas burgeru, jūs saņemat piecus labākos rezultātus. Tajā ir jūsu ievadītā ēdiena nosaukums, attēls un receptes saite. Noklikšķinot uz saites, noklusējuma tīmekļa pārlūkprogramma atver receptes saiti. Ritinot uz leju, satura lielums paliek nemainīgs, un dažādi rezultāti tiek rādīti horizontāli centrēti.

Recepšu meklētāja lietojumprogrammas uzlabošana

Lai uzlabotu savu recepšu meklētāja lietojumprogrammu, varat ieviest filtrēšanu un kārtošanu atbilstoši dažādām vēlmēm. Varat filtrēt ēdienu atbilstoši uztura izvēlei, gatavošanas laikam un virtuvei un kārtot tos jebkurā secībā.

Izveidojiet funkciju, lai atzīmētu iecienītākās receptes, lai tās vēlāk skatītu, un iespēju tās kopīgot sociālajos saziņas līdzekļos. Varat izveidot kategoriju, lai atklātu visvairāk meklētos ēdienus, visvairāk atzīmētos ar grāmatzīmēm utt.

Apvienojot savas programmēšanas prasmes un jaudīgās API funkcijas, jūs varat tālāk pārveidot šo pamata lietojumprogrammu par pilnvērtīgu.