Chega de perder tempo procurando aqui e ali a receita perfeita. Use este guia para criar seu aplicativo localizador de receitas personalizado.
Com a abundância de receitas espalhadas por toda a internet com centenas de links e anúncios, encontrar a receita perfeita pode ser um desafio. A criação de um aplicativo localizador de receitas oferece uma experiência personalizada e amigável e um design consistente, eliminando todos os resultados e distrações irrelevantes
.Ao criar este aplicativo, você aprimorará suas habilidades em solicitações HTTP, gerenciamento de chaves de API, manipulação de imagens e criação de interfaces gráficas de usuário, incluindo atualização dinâmica de GUI.
Instale o módulo Tkinter, Requests, Pillow e Webbrowser
Para construir um aplicativo localizador de receitas, você precisa de Tkinter, Requests, PIL e o módulo Webbrowser. Tkinter permite que você crie aplicativos de desktop. Ele oferece uma variedade de widgets que facilitam o desenvolvimento de GUIs. Para instalar o Tkinter, abra o terminal e execute:
pip install tkinter
O módulo Requests torna simples fazer solicitações HTTP e retornar um objeto de resposta que contém dados como codificação e status. Você pode usá-lo para buscar informações de identificação de chamadas, criar um verificador de status do site, conversor de moeda ou um aplicativo de notícias. Para instalar o módulo Requests, abra o terminal e execute:
pip install requests
A biblioteca Pillow—um fork da Python Imaging Library (PIL)—fornece recursos de processamento de imagem que ajudam na edição, criação, convertendo formatos de arquivoe salvar imagens. Para instalar o módulo Pillow, abra o terminal e execute:
pip install Pillow
O módulo Webbrowser ajuda você a abrir qualquer link em seu navegador padrão. Faz parte da biblioteca padrão do Python. Portanto, você não precisa instalá-lo externamente.
Gerar chave de API do Edamam para pesquisa de receitas
Para gerar a chave da API Edamam Recipe Search, siga as seguintes etapas:
- Visita Edamam e clique no API de inscrição botão. Preencha os dados, e escolha seu plano conforme API de pesquisa de receitas - Desenvolvedor.
- Acesse sua conta, clique em as contas botão e, em seguida, clique no botão Ir para a dashboard botão.
- Depois disso, clique no botão Formulários guia e, finalmente, clique no botão Visualizar botão ao lado da API de pesquisa de receita.
- Copie o ID do aplicativo e a Chaves de aplicativo e armazená-lo para usar em seu aplicativo.
Construindo a funcionalidade para obter as 5 principais receitas
Você pode encontrar todo o código-fonte para criar um aplicativo localizador de receitas usando Python neste Repositório GitHub.
Importe os módulos necessários. Definir um método get_top_5_recipes() que recupera os títulos, imagens e links das cinco principais receitas do prato que o usuário pesquisa. Usar pegar() para extrair o nome do prato que o usuário pesquisou.
Se o usuário inseriu um nome de receita, defina a URL base para o terminal de pesquisa de receita da API do Edamam. Passe o app_id e app_key você copiou anteriormente para autenticar e autorizar solicitações de 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
Crie um dicionário, parâmetros que contém os diferentes parâmetros que você deve passar como parte da solicitação da API. Defina os pares chave-valor para q, app_id, e app_key aos valores que você obteve anteriormente. Colocou o de e para parâmetros para refletir o número de resultados que você deseja ver.
Envie uma solicitação GET para a API do Edamam combinando a URL da API e o parâmetros dicionário. Armazene a resposta e extraia-a no formato JSON. Chamar clear_recipe_list() para limpar as receitas presentes na tela de solicitações anteriores.
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()
Verifique se a chave, exitos está presente nos dados JSON extraídos e se contém o resultado da pesquisa. Em caso afirmativo, repita os resultados da pesquisa e extraia as informações da receita uma a uma. Envie uma solicitação GET para o URL da imagem com o fluxo parâmetro definido para Verdadeiro para permitir a transmissão de dados de imagem.
Use o módulo Pillow's Imagem class para abrir a imagem que você recebeu. Redimensione-o para ter uma altura e largura de 200 pixels usando o Lanczos método de reamostragem para redimensionamento de alta qualidade. Converta isso para compatível com Tkinter FotoImagem para exibi-lo na interface gráfica do usuário.
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)
Construindo a estrutura do aplicativo
Defina três rótulos para exibir o título da receita, a imagem e o link para a receita. Defina a janela principal na qual deseja colocá-la, o texto que deseja exibir e o estilo de fonte que ela deve ter. Para exibir a imagem, defina o imagem atribuir a foto_imagem. Colocou o cursor opção no rótulo do link para mão2 para torná-lo clicável.
Vincule o link e o evento de clique esquerdo do mouse para chamar o link aberto() função. Organize todos os widgets usando o pacote método, centralize-os horizontalmente e adicione o preenchimento conforme necessário. Anexe o título, as imagens e os links a três listas diferentes.
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)
Defina um método, clear_recipe_list() para limpar todo o conteúdo da tela gerado pela solicitação anterior. Limpe o conteúdo da lista de receita e repita cada rótulo na receita_label lista.
Chamando o pack_forget() para remover o rótulo da exibição, mas manter o objeto do widget intacto.
Limpar o rótulos_da_receita lista para novos dados. Repita esse processo para as imagens e os links também. Defina um método, link aberto() para abrir o link da receita em seu navegador padrão.
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)
Inicialize a janela raiz do Tkinter. Defina o título, as dimensões e a cor de fundo do aplicativo. Defina um widget de quadro e defina seu elemento pai junto com sua cor de fundo. Crie um rótulo, uma entrada e um botão de pesquisa. Organize todos os widgets usando o pacote método e adicione preenchimento conforme necessário.
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)
Crie uma tela com fundo branco para exibir os widgets contendo informações da receita. Organize-o no lado esquerdo da janela, ocupando todo o espaço do quadro em ambas as direções e expandindo-o no redimensionamento.
Crie uma barra de rolagem vertical para a tela e coloque-a no lado direito. Vincule o scrollbar.set método para o canvas.yview para que a rolagem da barra de rolagem role o conteúdo da tela.
Crie um quadro dentro da tela para atuar como um recipiente para os itens da receita, ancorando no canto superior esquerdo da janela. Amarre o evento de modo que garanta que a caixa possa rolar corretamente quando seu conteúdo for alterado ou redimensionado.
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"))
)
Defina a lista de receitas, rótulos, imagens e links. O circuito principal() A função diz ao Python para executar o loop de eventos Tkinter e escutar os eventos até que você feche a janela.
recipe_list = []
recipe_labels = []
recipe_images = []
recipe_links = []
root.mainloop()
Junte tudo e descubra a culinária com o clique de um botão.
A saída do aplicativo Recipe Finder
Ao executar o programa e inserir o prato como Hambúrguer de Frango, você obtém os cinco primeiros resultados. Ele contém o título, a imagem e o link da receita do prato que você inseriu. Ao clicar no link, o navegador da Web padrão abre o link da receita. Ao rolar para baixo, o tamanho do conteúdo permanece o mesmo e exibe os vários resultados centralizados horizontalmente.
Aprimorando o aplicativo Recipe Finder
Para aprimorar seu aplicativo localizador de receitas, você pode implementar filtragem e classificação de acordo com diferentes preferências. Você pode filtrar um prato de acordo com a preferência alimentar, tempo de cozimento e culinária e classificá-los em qualquer ordem.
Crie um recurso para marcar suas receitas favoritas para ver mais tarde e uma opção para compartilhá-las nas redes sociais. Você pode criar uma categoria para descobrir os pratos mais pesquisados, mais marcados e assim por diante.
Combinando suas habilidades de programação e os poderosos recursos das APIs, você pode converter ainda mais esse aplicativo básico em um aplicativo completo.