Нема више губљења времена тражећи ту и тамо савршени рецепт. Користите овај водич да бисте креирали своју персонализовану апликацију за проналажење рецепата.
Уз обиље рецепата разбацаних широм интернета са стотинама веза и реклама, проналажење савршеног рецепта може бити изазовно. Израда апликације за проналажење рецепата пружа вам прилагођено и лако корисничко искуство и доследан дизајн, елиминишући све небитне резултате и ометања
.Изградњом ове апликације, изоштрићете своје вештине у ХТТП захтевима, управљању АПИ кључевима, манипулацији сликама и изградњи графичких корисничких интерфејса укључујући динамичко ажурирање ГУИ.
Инсталирајте модул Ткинтер, Захтеви, јастук и веб претраживач
Да бисте направили апликацију за проналажење рецепата, потребни су вам Ткинтер, Рекуестс, ПИЛ и модул Веббровсер. Ткинтер вам омогућава да креирате десктоп апликације. Нуди разне виџете који олакшавају развој ГУИ-ја. Да бисте инсталирали Ткинтер, отворите терминал и покрените:
pip install tkinter
Модул Захтеви олакшава прављење ХТТП захтева и враћање објекта одговора који садржи податке као што су кодирање и статус. Можете га користити за преузимање информација о ИД-у позиваоца,
направите проверу статуса веб локације, конвертор валута, или апликација за вести. Да бисте инсталирали модул Захтеви, отворите терминал и покрените:pip install requests
Библиотека јастука — виљушка Питхон Библиотеке слика (ПИЛ) — пружа могућности обраде слика које помажу у уређивању, креирању, претварање формата датотека, и чување слика. Да бисте инсталирали Пиллов модул, отворите терминал и покрените:
pip install Pillow
Модул Веббровсер вам помаже да отворите било коју везу у вашем подразумеваном претраживачу. То је део стандардне библиотеке Пајтона. Стога, не морате да га инсталирате споља.
Генеришите Едамам АПИ кључ за претрагу рецепата
Да бисте генерисали Едамам АПИ кључ за претрагу рецепта, пратите следеће кораке:
- Посетите Едамам и кликните на АПИ за пријаву дугме. Попуните детаље и изаберите свој план као АПИ за претрагу рецепта – програмер.
- Пријавите се на свој налог, кликните на тхе Аццоунтс дугме, а затим кликните на Идите на контролну таблу дугме.
- Након тога, кликните на Апликације картицу и на крају кликните на Поглед дугме поред АПИ-ја за претрагу рецепата.
- Копирај ИД апликације анд тхе Кључеви апликације и сачувајте га да бисте га користили у својој апликацији.
Изградња функционалности за добијање 5 најбољих рецепата
Овде можете пронаћи цео изворни код за прављење апликације за проналажење рецепата користећи Питхон ГитХуб спремиште.
Увезите потребне модуле. Дефинишите метод гет_топ_5_реципес() који преузима наслове пет најбољих рецепата, слике и везе јела које корисник тражи. Користите добити() да бисте издвојили назив јела које је корисник тражио.
Ако је корисник унео име рецепта, дефинишите основни УРЛ за крајњу тачку претраге рецепта за Едамам АПИ. Пасс тхе апп_ид и апп_кеи сте копирали раније да бисте потврдили аутентичност и ауторизовали АПИ захтеве.
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
Направите речник, парамс који садржи различите параметре које морате да проследите као део АПИ захтева. Подесите парове кључ/вредност за к, апп_ид, и апп_кеи вредностима које сте раније стекли. Подесите из и до параметре који одражавају број резултата које желите да видите.
Пошаљите ГЕТ захтев Едамам АПИ-ју комбинујући АПИ УРЛ и парамс речник. Сачувајте одговор и извуците га у ЈСОН формату. Цалл цлеар_реципе_лист() да избришете рецепте присутне на екрану из ранијих захтева.
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()
Проверите да ли је кључ, хитови је присутан у екстрахованим ЈСОН подацима и ако садржи резултат претраге. Ако јесте, итерирајте резултате претраге и извуците информације о рецепту једну по једну. Пошаљите ГЕТ захтев на УРЛ слике са поток параметар постављен на Истина да омогући стримовање сликовних података.
Користите модул јастука Слика разреда да отворите слику коју сте добили. Промените величину тако да има висину и ширину од 200 пиксела користећи Ланцзос метод ресамплинга за висококвалитетно промену величине. Претворите ово у Ткинтер компатибилно ПхотоИмаге да га прикаже на графичком корисничком интерфејсу.
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)
Изградња структуре апликације
Дефинишите три ознаке за приказ наслова рецепта, слике и везе до рецепта. Подесите родитељски прозор у који желите да га поставите, текст који желите да прикажете и стил фонта који треба да има. Да бисте приказали слику, подесите слика приписати пхото_имаге. Подесите курсор опција у ознаци везе до ханд2 да би се могло кликнути.
Повежите везу и догађај кликните левим мишем да позовете Отвори линк() функција. Организујте све виџете користећи паковање методу, центрирајте их хоризонтално и додајте допуну по потреби. Додајте наслов, слике и везе на три различите листе.
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)
Дефинишите метод, цлеар_реципе_лист() да обришете цео садржај екрана генерисан претходним захтевом. Обришите садржај листе рецепата и пређите преко сваке ознаке у ознака_рецепта листа.
Позивање пацк_форгет() метод да уклоните ознаку са екрана, али да задржите објекат виџета нетакнутим.
Обришите реципе_лабелс листа за нове податке. Поновите овај поступак и за слике и везе. Дефинишите метод, Отвори линк() да бисте отворили везу за рецепт у вашем подразумеваном веб претраживачу.
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)
Иницијализујте Ткинтер роот прозор. Подесите наслов, димензије и боју позадине апликације. Дефинишите виџет оквира и поставите његов родитељски елемент заједно са бојом позадине. Направите ознаку, унос и дугме за претрагу. Организујте све виџете користећи паковање методу и додајте паддинг по потреби.
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)
Направите платно са белом позадином да бисте приказали виџете који садрже информације о рецепту. Организујте га на левој страни прозора, узимајући сав простор у оквиру у оба смера и проширивајући га при промени величине.
Направите вертикалну траку за померање за платно и поставите је на десну страну. Линк тхе трака за померање.сет метод за цанвас.ивиев метод тако да ће померање траке за померање померати садржај платна.
Направите оквир унутар платна који ће служити као контејнер за ставке рецепта, причвршћујући се у горњем левом углу прозора. Везите догађај тако да осигурава да се оквир може правилно померати када се његов садржај промени или промени величину.
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"))
)
Дефинишите листу за рецепте, етикете, слике и везе. Тхе маинлооп() функција каже Питхон-у да покрене Ткинтер петљу догађаја и ослушкује догађаје док не затворите прозор.
recipe_list = []
recipe_labels = []
recipe_images = []
recipe_links = []
root.mainloop()
Спојите све то и откријте кухиње једним кликом.
Излаз апликације за проналажење рецепата
Када покренете програм и унесете јело као Цхицкен Бургер, добијате првих пет резултата. Садржи наслов, слику и везу за рецепт јела које сте унели. Када кликнете на везу, подразумевани веб претраживач отвара везу за рецепт. Приликом померања надоле, величина садржаја остаје иста и приказује различите резултате центриране хоризонтално.
Побољшање апликације за проналажење рецепата
Да бисте побољшали своју апликацију за проналажење рецепата, можете имплементирати филтрирање и сортирање према различитим преференцијама. Можете филтрирати јело према преференцијама у исхрани, времену кувања и кухињи и сортирати их било којим редоследом.
Направите функцију за обележавање омиљених рецепата за касније гледање и опцију да их делите на друштвеним мрежама. Можете да креирате категорију да бисте открили најтраженија јела, најчешће обележена и тако даље.
Комбинујући своје вештине програмирања и моћне карактеристике АПИ-ја, можете даље да конвертујете ову основну апликацију у пуноправну.