Geen tijd meer verspillen met hier en daar zoeken naar het perfecte recept. Gebruik deze gids om uw gepersonaliseerde toepassing voor het zoeken naar recepten te maken.

Met de overvloed aan recepten verspreid over het internet met honderden links en advertenties, kan het een uitdaging zijn om het perfecte recept te vinden. Het bouwen van een receptenzoeker-app biedt u een op maat gemaakte en gebruiksvriendelijke ervaring en een consistent ontwerp, waardoor alle irrelevante resultaten en afleidingen worden geëlimineerd

Door deze applicatie te bouwen, verscherpt u uw vaardigheden op het gebied van HTTP-verzoeken, API-sleutelbeheer, beeldmanipulatie en het bouwen van grafische gebruikersinterfaces, inclusief dynamische GUI-updates.

Installeer de module Tkinter, Requests, Pillow en Webbrowser

Om een ​​applicatie voor het zoeken naar recepten te bouwen, hebt u Tkinter, Requests, PIL en de Webbrowser-module nodig. Met Tkinter kunt u desktop-applicaties maken. Het biedt een verscheidenheid aan widgets die het gemakkelijker maken om GUI's te ontwikkelen. Om Tkinter te installeren, opent u de terminal en voert u het volgende uit:

instagram viewer

pip install tkinter

De Requests-module maakt het eenvoudig om HTTP-verzoeken te doen en een antwoordobject te retourneren dat gegevens zoals codering en status bevat. U kunt het gebruiken om beller-ID-informatie op te halen, maak een website-statuschecker, valuta-omzetter, of een nieuwstoepassing. Om de Requests-module te installeren, opent u de terminal en voert u het volgende uit:

pip install requests

De Pillow-bibliotheek, een afsplitsing van de Python Imaging Library (PIL), biedt beeldverwerkingsmogelijkheden die helpen bij het bewerken, maken, bestandsformaten converterenen het opslaan van afbeeldingen. Om de Pillow-module te installeren, opent u de terminal en voert u het volgende uit:

pip install Pillow

De Webbrowser-module helpt u bij het openen van elke link in uw standaardbrowser. Het maakt deel uit van de standaardbibliotheek van Python. U hoeft het dus niet extern te installeren.

Genereer de Edamam API-sleutel voor het zoeken naar recepten

Volg de volgende stappen om de Edamam Recipe Search API-sleutel te genereren:

  1. Bezoek Edamam en klik op de Aanmeldings-API knop. Vul de gegevens in en kies uw plan als API voor zoeken naar recepten - Ontwikkelaar.
  2. Log in op uw account, klik op de rekeningen knop en klik vervolgens op de Ga naar het dashboard knop.
  3. Klik daarna op de toepassingen tabblad en klik ten slotte op de Weergave knop naast Recept zoeken API.
  4. Kopieer de Applicatie ID en de Applicatiesleutels en sla het op voor gebruik in uw toepassing.

De functionaliteit bouwen om de top 5-recepten te krijgen

Hierin vindt u de volledige broncode voor het bouwen van een applicatie voor het zoeken naar recepten met behulp van Python GitHub-opslagplaats.

Importeer de benodigde modules. Definieer een methode get_top_5_recepten() dat de titels, afbeeldingen en links van de top vijf recepten ophaalt van het gerecht waarnaar de gebruiker zoekt. Gebruik krijgen() om de naam te extraheren van het gerecht waarnaar de gebruiker zocht.

Als de gebruiker een receptnaam heeft ingevoerd, definieert u de basis-URL voor het receptzoekeindpunt van de Edamam API. Geef de app_id En app_sleutel die u eerder hebt gekopieerd om API-aanvragen te verifiëren en te autoriseren.

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

Maak een woordenboek, parameters dat de verschillende parameters bevat die u moet doorgeven als onderdeel van het API-verzoek. Stel de sleutel-waardeparen in voor Q, app_id, En app_sleutel naar de waarden die u eerder kreeg. Stel de van En naar parameters om het aantal resultaten weer te geven dat u wilt zien.

Stuur een GET-verzoek naar de Edamam-API en combineer de API-URL en de parameters woordenboek. Sla het antwoord op en pak het uit in JSON-indeling. Telefoongesprek clear_recipe_list() om de op het scherm aanwezige recepten uit eerdere verzoeken te wissen.

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

Controleer of de sleutel, hits aanwezig is in de geëxtraheerde JSON-gegevens en of deze het zoekresultaat bevat. Zo ja, herhaal dan de zoekresultaten en extraheer de receptinformatie één voor één. Stuur een GET-verzoek naar de afbeeldings-URL met de stroom parameter ingesteld op WAAR om het streamen van beeldgegevens mogelijk te maken.

Gebruik de Pillow-modules Afbeelding class om de ontvangen afbeelding te openen. Pas het formaat aan tot een hoogte en breedte van 200 pixels met behulp van de Lanczos resampling-methode voor het wijzigen van de grootte van hoge kwaliteit. Converteer dit naar Tkinter-compatibel FotoAfbeelding om het op de grafische gebruikersinterface weer te geven.

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)

De structuur van de applicatie bouwen

Definieer drie labels om de titel van het recept, de afbeelding en de link naar het recept weer te geven. Stel het bovenliggende venster in waarin u het wilt plaatsen, de tekst die u wilt weergeven en de lettertypestijl die het moet hebben. Om de afbeelding weer te geven, stelt u de afbeelding toeschrijven aan foto_afbeelding. Stel de cursor optie in het linklabel naar hand2 om het klikbaar te maken.

Bind de link en klik met de linkermuisknop om de open link() functie. Organiseer alle widgets met behulp van de pak methode, centreer ze horizontaal en voeg indien nodig de opvulling toe. Voeg de titel, afbeeldingen en links toe aan drie verschillende lijsten.

 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)

Definieer een methode, clear_recipe_list() om de volledige scherminhoud te wissen die door het vorige verzoek is gegenereerd. Wis de inhoud van de receptenlijst en herhaal elk label in de recept_label lijst.

Bellen naar de pack_forget() methode om het label van het scherm te verwijderen maar het widgetobject intact te houden.

Ruim het op recept_labels lijst voor nieuwe gegevens. Herhaal dit proces ook voor de afbeeldingen en de links. Definieer een methode, open link() om de receptlink in uw standaardwebbrowser te openen.

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)

Initialiseer het Tkinter-rootvenster. Stel de titel, afmetingen en achtergrondkleur van de applicatie in. Definieer een kaderwidget en stel het bovenliggende element samen met de achtergrondkleur in. Maak een label, een vermelding en een zoekknop. Organiseer alle widgets met behulp van de pak methode en voeg indien nodig opvulling toe.

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)

Maak een canvas met een witte achtergrond om de widgets met receptinformatie weer te geven. Organiseer het aan de linkerkant van het venster, neem alle ruimte in het frame in beide richtingen en breid het uit bij het wijzigen van de grootte.

Maak een verticale schuifbalk voor het canvas en plaats deze op de rechterkant. Koppel de schuifbalk.set methode naar de canvas.yview methode zodat het scrollen van de schuifbalk door de inhoud van het canvas zal scrollen.

Maak een frame in het canvas om te fungeren als een container voor de receptitems, verankerd in de linkerbovenhoek van het venster. Bind de evenement zodanig dat het ervoor zorgt dat het vak correct kan scrollen wanneer de inhoud verandert of van formaat verandert.

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

Definieer de lijst voor recepten, labels, afbeeldingen en links. De Hoofdlus() functie vertelt Python om de Tkinter-gebeurtenislus uit te voeren en te luisteren naar gebeurtenissen totdat u het venster sluit.

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

root.mainloop()

Zet alles bij elkaar en ontdek keukens met één klik op de knop.

De uitvoer van de toepassing Receptzoeker

Bij het uitvoeren van het programma en het invoeren van het gerecht als Chicken Burger, krijgt u de top vijf resultaten. Het bevat de titel, de afbeelding en de receptlink van het gerecht dat je hebt ingevoerd. Door op de link te klikken, opent de standaardwebbrowser de receptlink. Bij het naar beneden scrollen blijft de inhoudsgrootte gelijk en worden de verschillende resultaten horizontaal gecentreerd weergegeven.

Verbetering van de toepassing Receptzoeker

Om uw toepassing voor het zoeken naar recepten te verbeteren, kunt u filteren en sorteren implementeren op basis van verschillende voorkeuren. U kunt een gerecht filteren op voedingsvoorkeur, kooktijd en keuken en ze in willekeurige volgorde sorteren.

Maak een functie om uw favoriete recepten als bladwijzer in te stellen om ze later te bekijken en een optie om ze op sociale media te delen. U kunt een categorie maken om de meest gezochte gerechten, de meeste bladwijzers, enzovoort te ontdekken.

Door uw programmeervaardigheden en de krachtige functies van API's te combineren, kunt u deze basistoepassing verder omzetten in een volwaardige toepassing.