Край на губенето на време в търсене тук и там на идеалната рецепта. Използвайте това ръководство, за да създадете свое персонализирано приложение за търсене на рецепти.

С изобилието от рецепти, разпръснати из интернет със стотици връзки и реклами, намирането на перфектната рецепта може да бъде предизвикателство. Създаването на приложение за намиране на рецепти ви осигурява персонализирано и удобно за потребителя изживяване и последователен дизайн, елиминирайки всички неуместни резултати и разсейващи фактори

.Като създадете това приложение, вие ще изострите уменията си в HTTP заявки, управление на API ключове, манипулиране на изображения и изграждане на графични потребителски интерфейси, включително динамично актуализиране на GUI.

Инсталирайте модула Tkinter, Requests, Pillow и Webbrowser

За да създадете приложение за намиране на рецепти, имате нужда от Tkinter, Requests, PIL и модула Webbrowser. Tkinter ви позволява да създавате настолни приложения. Той предлага разнообразие от джаджи, които улесняват разработването на GUI. За да инсталирате Tkinter, отворете терминала и стартирайте:

instagram viewer
pip install tkinter

Модулът Requests улеснява отправянето на HTTP заявки и връщането на обект за отговор, който съдържа данни като кодиране и състояние. Можете да го използвате, за да извлечете информация за идентификатора на обаждащия се, създайте инструмент за проверка на състоянието на уебсайта, валутен конвертор или приложение за новини. За да инсталирате модула Заявки, отворете терминала и стартирайте:

pip install requests

Библиотеката Pillow—разклонение на Python Imaging Library (PIL)—осигурява възможности за обработка на изображения, които помагат при редактиране, създаване, конвертиране на файлови форматии запазване на изображения. За да инсталирате модула Pillow, отворете терминала и стартирайте:

pip install Pillow

Модулът Webbrowser ви помага да отворите всяка връзка в браузъра си по подразбиране. Той е част от стандартната библиотека на Python. Следователно не е необходимо да го инсталирате външно.

Генерирайте API ключ на Edamam за търсене на рецепти

За да генерирате API ключа за търсене на рецепти Edamam, изпълнете следните стъпки:

  1. Посетете Едамам и щракнете върху API за регистрация бутон. Попълнете подробностите и изберете вашия план като API за търсене на рецепти - Разработчик.
  2. Влезте в акаунта си, щракнете върху сметките и след това щракнете върху Отиди до таблото бутон.
  3. След това щракнете върху Приложения и накрая щракнете върху Преглед бутон до API за търсене на рецепти.
  4. Копирайте ID на приложението и на Ключове за приложения и го съхранявайте, за да го използвате във вашето приложение.

Изграждане на функционалността за получаване на Топ 5 рецепти

Тук можете да намерите целия изходен код за създаване на приложение за търсене на рецепти с помощта на Python GitHub хранилище.

Импортирайте необходимите модули. Определете метод get_top_5_recipes() който извлича заглавията, изображенията и връзките на първите пет рецепти на ястието, което потребителят търси. Използвайте получи() за да извлечете името на ястието, което потребителят е търсил.

Ако потребителят е въвел име на рецепта, дефинирайте основния URL адрес за крайната точка за търсене на рецепти на Edamam API. Преминете app_id и app_key копирахте по-рано, за да удостоверите и упълномощите API заявки.

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

Създайте речник, параметри който съдържа различните параметри, които трябва да подадете като част от заявката за API. Задайте двойките ключ-стойност за р, app_id, и app_key към стойностите, които сте получили по-рано. Нагласи от и да се параметри, за да отразите броя на резултатите, които искате да видите.

Изпратете GET заявка до API на Edamam, като комбинирате URL адреса на API и параметри речник. Съхранявайте отговора и го извличайте във формат JSON. Обадете се clear_recipe_list() за да изчистите наличните на екрана рецепти от предишни заявки.

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

Проверете дали ключът, хитове присъства в извлечените JSON данни и дали съдържа резултата от търсенето. Ако да, прегледайте резултатите от търсенето и извлечете информацията за рецептата една по една. Изпратете GET заявка до URL адреса на изображението с поток параметърът е зададен на Вярно за да разрешите поточно предаване на данни за изображения.

Използвайте модула на възглавницата Изображение клас, за да отворите изображението, което сте получили. Преоразмерете го, за да има височина и ширина от 200 пиксела, като използвате Ланцос метод за преоразмеряване за висококачествено преоразмеряване. Преобразувайте това в съвместимо с Tkinter PhotoImage за да го покажете в графичния потребителски интерфейс.

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)

Определете метод, clear_recipe_list() за да изчистите цялото съдържание на екрана, генерирано от предишната заявка. Изчистете съдържанието на списъка с рецепти и повторете всеки етикет в рецепта_етикет списък.

Обаждане на pack_forget() метод за премахване на етикета от дисплея, но запазване на обекта на притурката непокътнат.

Изчистете рецепти_етикети списък за нови данни. Повторете този процес и за изображенията и връзките. Определете метод, отвори линк() за да отворите връзката към рецептата във вашия уеб браузър по подразбиране.

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)

Инициализирайте главния прозорец на Tkinter. Задайте заглавието, размерите и цвета на фона на приложението. Дефинирайте widget с рамка и задайте неговия родителски елемент заедно с цвета на фона му. Създайте етикет, запис и бутон за търсене. Организирайте всички джаджи с помощта на опаковка метод и добавете подложка, ако е необходимо.

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)

Създайте платно с бял фон, за да покажете уиджетите, съдържащи информация за рецепта. Организирайте го от лявата страна на прозореца, като заемате цялото пространство в рамката в двете посоки и го разширявате при преоразмеряване.

Създайте вертикална лента за превъртане за платното и я поставете от дясната му страна. Свържете scrollbar.set метод към canvas.yview метод, така че превъртането на лентата за превъртане ще превърта съдържанието на платното.

Създайте рамка вътре в платното, която да действа като контейнер за елементите на рецептата, като се закотвите в горния ляв ъгъл на прозореца. Свържете събитие, така че да гарантира, че полето може да се превърта правилно, когато съдържанието му се промени или преоразмери.

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

Дефинирайте списъка за рецепти, етикети, изображения и връзки. The mainloop() функцията казва на Python да стартира цикъла на събитията на Tkinter и да слуша за събития, докато затворите прозореца.

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

root.mainloop()

Съберете всичко заедно и открийте кухни с едно натискане на бутон.

Резултатът от приложението за търсене на рецепти

При стартиране на програмата и въвеждане на ястието като пилешки бургер получавате първите пет резултата. Той съдържа заглавието, изображението и връзката към рецептата на ястието, което сте въвели. При щракване върху връзката уеб браузърът по подразбиране отваря връзката към рецептата. При превъртане надолу размерът на съдържанието остава същият и показва различните резултати, центрирани хоризонтално.

Подобряване на приложението за търсене на рецепти

За да подобрите вашето приложение за търсене на рецепти, можете да приложите филтриране и сортиране според различни предпочитания. Можете да филтрирате ястие според хранителните предпочитания, времето за готвене и кухнята и да ги сортирате в произволен ред.

Създайте функция за отбелязване на любимите си рецепти, за да ги видите по-късно, и опция за споделянето им в социалните медии. Можете да създадете категория, за да откриете най-търсените ястия, най-маркираните и т.н.

Комбинирайки уменията си за програмиране и мощните функции на API, можете допълнително да конвертирате това основно приложение в пълноценно.