Больше не нужно тратить время на поиски идеального рецепта здесь и там. Используйте это руководство, чтобы создать свое персонализированное приложение для поиска рецептов.
С обилием рецептов, разбросанных по всему Интернету, с сотнями ссылок и рекламных объявлений, найти идеальный рецепт может быть непросто. Создание приложения для поиска рецептов предоставляет вам индивидуальный и удобный интерфейс, а также согласованный дизайн, исключающий все нерелевантные результаты и отвлекающие факторы.
.Создав это приложение, вы улучшите свои навыки работы с HTTP-запросами, управлением ключами API, манипулированием изображениями и созданием графических пользовательских интерфейсов, включая динамическое обновление графического интерфейса.
Установите модуль Tkinter, Requests, Pillow и Webbrowser.
Чтобы создать приложение для поиска рецептов, вам потребуются Tkinter, Requests, PIL и модуль Webbrowser. Tkinter позволяет создавать настольные приложения. Он предлагает множество виджетов, упрощающих разработку графических интерфейсов. Чтобы установить Tkinter, откройте терминал и выполните:
pip install tkinter
Модуль Requests упрощает отправку HTTP-запросов и возвращает объект ответа, содержащий такие данные, как кодировка и статус. Вы можете использовать его для получения информации об идентификаторе вызывающего абонента, создать проверку статуса сайта, конвертер валют или новостное приложение. Чтобы установить модуль «Запросы», откройте терминал и выполните:
pip install requests
Библиотека Pillow — ответвление Python Imaging Library (PIL) — предоставляет возможности обработки изображений, которые помогают в редактировании, создании, конвертация форматов файлови сохранение изображений. Чтобы установить модуль Pillow, откройте терминал и выполните:
pip install Pillow
Модуль Webbrowser поможет вам открыть любую ссылку в браузере по умолчанию. Это часть стандартной библиотеки Python. Поэтому вам не нужно устанавливать его извне.
Сгенерируйте ключ API Edamam для поиска рецептов
Чтобы сгенерировать ключ API поиска рецептов Edamam, выполните следующие действия:
- Посещать Эдамам и нажмите на API регистрации кнопка. Заполните детали и выберите свой план как API поиска рецептов — Разработчик.
- Войдите в свою учетную запись, нажмите счета кнопку, а затем нажмите кнопку Перейти к приборной панели кнопка.
- После этого нажмите на Приложения вкладку и, наконец, нажмите на Вид рядом с API поиска рецептов.
- Скопируйте Идентификатор приложения и Ключи приложений и сохраните его для использования в своем приложении.
Создание функциональности для получения 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 в Edamam API, объединив 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-адрес изображения с транслировать параметр установлен на Истинный чтобы разрешить потоковую передачу данных изображения.
Используйте модуль Pillow Изображение class, чтобы открыть полученное изображение. Измените его размер, чтобы он имел высоту и ширину 200 пикселей, используя Ланцош метод повторной выборки для качественного изменения размера. Преобразуйте это в Tkinter-совместимый фотоизображение чтобы отобразить его в графическом интерфейсе пользователя.
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() для очистки всего содержимого экрана, сгенерированного предыдущим запросом. Очистите содержимое списка рецептов и переберите каждую метку в списке. recipe_label список.
Вызов упаковать_забыть() способ удалить метку с экрана, но сохранить объект виджета нетронутым.
Очистить recipe_labels список новых данных. Повторите этот процесс для изображений и ссылок. Определите метод, открыть ссылку() чтобы открыть ссылку на рецепт в веб-браузере по умолчанию.
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. Установите заголовок, размеры и цвет фона приложения. Определите виджет рамки и установите его родительский элемент вместе с цветом фона. Создайте метку, запись и кнопку поиска. Организуйте все виджеты с помощью пакет метод и добавьте отступы по мере необходимости.
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)
Создайте холст с белым фоном для отображения виджетов, содержащих информацию о рецептах. Разместите его в левой части окна, занимая все пространство в кадре в обоих направлениях и расширяя его при изменении размера.
Создайте вертикальную полосу прокрутки для холста и поместите ее с правой стороны. Связать полоса прокрутки.set метод к холст.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"))
)
Определите список рецептов, меток, изображений и ссылок. основной цикл () Функция сообщает Python запустить цикл событий Tkinter и прослушивать события, пока вы не закроете окно.
recipe_list = []
recipe_labels = []
recipe_images = []
recipe_links = []
root.mainloop()
Соберите все это вместе и откройте для себя кухню одним нажатием кнопки.
Вывод приложения для поиска рецептов
Запустив программу и введя блюдо как Чикенбургер, вы получите первые пять результатов. Он содержит название, изображение и ссылку на рецепт блюда, которое вы ввели. При нажатии на ссылку веб-браузер по умолчанию открывает ссылку на рецепт. При прокрутке вниз размер контента остается прежним, а различные результаты отображаются по центру по горизонтали.
Улучшение приложения для поиска рецептов
Чтобы улучшить приложение для поиска рецептов, вы можете реализовать фильтрацию и сортировку в соответствии с различными предпочтениями. Вы можете фильтровать блюда по диетическим предпочтениям, времени приготовления и кухне, а также сортировать их в любом порядке.
Создайте функцию добавления любимых рецептов в закладки для последующего просмотра и возможность поделиться ими в социальных сетях. Вы можете создать категорию, чтобы найти самые популярные блюда, самые закладки и так далее.
Сочетая свои навыки программирования и мощные функции API, вы можете дополнительно преобразовать это базовое приложение в полноценное.