Como construir um aplicativo localizador de receitas usando Python

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, conversão de formatos de arquivo e salvamento de 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.

Para gerar a chave da API Edamam Recipe Search, siga as seguintes etapas:

  • Visita Edamam e clique no botão Signup API. Preencha os detalhes e escolha seu plano como API de Pesquisa de Receitas – Desenvolvedor.
  • Faça login na sua conta, clique no botão Contas e, em seguida, clique no botão Ir para o painel.
  • Depois disso, clique na guia Aplicativos e, finalmente, clique no botão Exibir ao lado da API de pesquisa de receitas.
  • Copie o Application ID e as Application Keys e armazene-os para usar em seu aplicativo.
  •   Como inserir uma imagem ou outro objeto no Microsoft Office

    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. Defina um método get_top_5_recipes() que recupere os títulos, imagens e links das cinco principais receitas do prato que o usuário pesquisa. Use get() 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 o app_key que você copiou anteriormente para autenticar e autorizar solicitações de API.

     import tkinter as tk
    import requests
    from PIL import Image, ImageTk
    import webbrowser

    def get_top_5_recipes():
        recipe_name = entry_recipe_name.get()
        if recipe_name:
            api_url = "https://api.edamam.com/search"
            app_id =
            app_key =

    Crie um dicionário, params que contenha 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 para os valores obtidos anteriormente. Defina os parâmetros de e para para refletir o número de resultados que deseja ver.

    Envie uma solicitação GET para a API do Edamam combinando a URL da API e o dicionário de parâmetros. Armazene a resposta e extraia-a no formato JSON. Chame 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, hits 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 a URL da imagem com o parâmetro stream definido como True para permitir o streaming de dados de imagem.

    Use a classe Image do módulo Pillow para abrir a imagem que você recebeu. Redimensione-o para ter uma altura e largura de 200 pixels usando o método de reamostragem Lanczos para redimensionamento de alta qualidade. Converta-o em PhotoImage compatível com Tkinter 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 atributo image como photo_image. Defina a opção de cursor no rótulo do link como hand2 para torná-lo clicável.

      9 melhores sites GIF ainda relevantes em 2022

    Vincule o link e o evento de clique esquerdo do mouse para chamar a função open_link(). Organize todos os widgets usando o método pack, 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(
                       "<Button-1>", 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 itere sobre cada rótulo na lista de rótulo_receita.

    Chamar o método pack_forget() para remover o rótulo da exibição, mas manter o objeto do widget intacto.

    Limpe a lista de rótulos_receita para novos dados. Repita esse processo para as imagens e os links também. Defina um método, open_link() para abrir o link da receita em seu navegador padrão.

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

    def open_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 método pack 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.

      O que significa imagem de um computador?

    Crie uma barra de rolagem vertical para a tela e coloque-a no lado direito. Vincule o método scrollbar.set ao método 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. Vincule o evento para garantir 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(
       "<Configure>", lambda event: canvas.configure(scrollregion=canvas.bbox("all"))
    )

    Defina a lista de receitas, rótulos, imagens e links. A função mainloop() diz ao Python para executar o loop de eventos Tkinter e escutar os eventos até você fechar 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 mídias 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.