Ei enää aikaa tuhlata aikaa etsiessäsi sieltä täältä täydellistä reseptiä. Käytä tätä opasta luodaksesi henkilökohtaisen reseptihakusovelluksesi.

Internetissä on runsaasti reseptejä, joissa on satoja linkkejä ja mainoksia, joten täydellisen reseptin löytäminen voi olla haastavaa. Reseptihakusovelluksen rakentaminen tarjoaa sinulle räätälöidyn ja käyttäjäystävällisen kokemuksen ja yhtenäisen suunnittelun, joka eliminoi kaikki merkityksettömät tulokset ja häiriötekijät

. Rakentamalla tämän sovelluksen kehität taitojasi HTTP-pyynnöissä, API-avainten hallinnassa, kuvien käsittelyssä ja graafisten käyttöliittymien rakentamisessa, mukaan lukien dynaaminen GUI-päivitys.

Asenna Tkinter, Requests, Pillow ja Webbrowser Module

Reseptihakusovelluksen rakentamiseen tarvitaan Tkinter, Requests, PIL ja Webbrowser-moduuli. Tkinterin avulla voit luoda työpöytäsovelluksia. Se tarjoaa erilaisia ​​widgetejä, jotka helpottavat graafisten käyttöliittymien kehittämistä. Asenna Tkinter avaamalla pääte ja suorittamalla:

pip install tkinter

Pyynnöt-moduulin avulla on helppoa tehdä HTTP-pyyntöjä ja palauttaa vastausobjekti, joka sisältää tietoja, kuten koodauksen ja tilan. Voit käyttää sitä soittajan tunnistetietojen hakemiseen, luo verkkosivuston tilantarkistus, valuuttamuunnin tai uutissovellus. Asenna Requests-moduuli avaamalla pääte ja suorittamalla:

pip install requests

Pillow-kirjasto – Python Imaging Libraryn (PIL) haarukka – tarjoaa kuvankäsittelyominaisuuksia, jotka auttavat muokkaamaan, luomaan, tiedostomuotojen muuntaminenja kuvien tallentamiseen. Asenna Pillow-moduuli avaamalla pääte ja suorittamalla:

pip install Pillow

Webbrowser-moduulin avulla voit avata minkä tahansa linkin oletusselaimessasi. Se on osa Python-standardikirjastoa. Siksi sinun ei tarvitse asentaa sitä ulkoisesti.

Luo Edamam API-avain reseptihakuun

Luo Edamam Recipe Search API -avain seuraavasti:

  1. Vierailla Edamam ja napsauta Kirjautumissovellusliittymä -painiketta. Täytä tiedot ja valitse suunnitelmasi Reseptihaun sovellusliittymä – kehittäjä.
  2. Kirjaudu tilillesi, napsauta tilit -painiketta ja napsauta sitten -painiketta Siirry Dashboardiin -painiketta.
  3. Napsauta sen jälkeen Sovellukset -välilehteä ja napsauta lopuksi Näytä -painiketta Recipe Search API -kohdan vieressä.
  4. Kopioi Sovellustunnus ja Sovellusavaimet ja tallenna se käytettäväksi sovelluksessasi.

Rakenna toimintoja saadaksesi 5 parasta reseptiä

Löydät koko lähdekoodin reseptihakusovelluksen rakentamiseen Pythonilla tästä GitHub-arkisto.

Tuo tarvittavat moduulit. Määrittele menetelmä get_top_5_recipes() joka hakee viiden parhaan reseptin otsikot, kuvat ja linkit käyttäjän etsimään ruokaan. Käyttää saada() poimimaan käyttäjän etsimän ruokalajin nimen.

Jos käyttäjä antoi reseptin nimen, määritä Edamam API: n reseptihaun päätepisteen perus-URL-osoite. Anna minulle app_id ja app_key kopioit aiemmin API-pyyntöjen todentamiseksi ja valtuuttamiseksi.

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

Luo sanakirja, parametrit joka sisältää eri parametrit, jotka sinun on välitettävä osana API-pyyntöä. Aseta avainarvoparit kohteelle q, app_id, ja app_key aiemmin saamiisi arvoihin. Aseta alkaen ja to parametreja, jotka kuvastavat haluamiesi tulosten määrää.

Lähetä GET-pyyntö Edamam API: lle yhdistämällä API URL ja parametrit sanakirja. Tallenna vastaus ja pura se JSON-muodossa. Puhelu clear_recipe_list() poistaaksesi näytöllä olevat reseptit aiemmista pyynnöistä.

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

Tarkista onko avain, osumia on läsnä puretuissa JSON-tiedoissa ja jos se sisältää hakutuloksen. Jos kyllä, toista hakutuloksia ja poimi reseptitiedot yksitellen. Lähetä GET-pyyntö kuvan URL-osoitteeseen virta parametri asetettu arvoon Totta salliaksesi kuvatietojen suoratoiston.

Käytä tyynymoduulia Kuva luokkaa avataksesi saamasi kuvan. Muuta sen kokoa niin, että sen korkeus ja leveys on 200 pikseliä käyttämällä Lanczos uudelleennäytteenottomenetelmä laadukkaaseen koon muuttamiseen. Muunna tämä Tkinter-yhteensopivaksi PhotoImage näyttääksesi sen graafisessa käyttöliittymässä.

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)

Sovelluksen rakenteen rakentaminen

Määritä kolme otsikkoa näyttämään reseptin otsikko, kuva ja linkki reseptiin. Aseta pääikkuna, johon haluat sijoittaa sen, teksti, jonka haluat näyttää, ja fontin tyyli, jonka sen pitäisi olla. Näytä kuva asettamalla kuva omistaa kuva_kuva. Aseta kohdistin vaihtoehto linkin otsikossa kohteeseen käsi 2 jotta se olisi napsautettava.

Sido linkki ja hiiren vasemmalla painikkeella tapahtuma kutsuaksesi avaa linkki() toiminto. Järjestä kaikki widgetit käyttämällä pakkaus keskitä ne vaakasuoraan ja lisää pehmusteet tarpeen mukaan. Liitä otsikko, kuvat ja linkit kolmeen eri luetteloon.

 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)

Määritä menetelmä, clear_recipe_list() tyhjentääksesi koko edellisen pyynnön luoman näytön sisällön. Tyhjennä reseptiluettelon sisältö ja toista jokaista etikettiä resepti_etiketti lista.

Soittamalla pack_forget() tapa poistaa tarra näytöstä, mutta pitää widget-objekti ehjänä.

Tyhjennä resepti_etiketit luettelo uusista tiedoista. Toista tämä prosessi myös kuville ja linkeille. Määritä menetelmä, avaa linkki() avataksesi reseptilinkin oletusselaimessasi.

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)

Alusta Tkinterin juuriikkuna. Aseta sovelluksen otsikko, mitat ja taustaväri. Määritä kehyswidget ja aseta sen pääelementti sekä taustaväri. Luo tunniste, merkintä ja hakupainike. Järjestä kaikki widgetit käyttämällä pakkaus menetelmällä ja lisää pehmusteita tarpeen mukaan.

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)

Luo valkoista taustaa oleva kangas näyttääksesi reseptitietoja sisältävät widgetit. Järjestä se ikkunan vasemmalle puolelle, vie kaikki kehyksessä oleva tila molempiin suuntiin ja laajenna sitä kokoa muuttaessa.

Luo pystysuora vierityspalkki kankaalle ja aseta se sen oikealle puolelle. Linkitä scrollbar.set menetelmään canvas.yview menetelmää niin, että vierityspalkin vierittäminen vie kankaan sisältöä.

Luo kankaan sisälle kehys, joka toimii reseptituotteiden säilytysastiana ja kiinnitä se ikkunan vasempaan yläkulmaan. Sido tapahtuma siten, että se varmistaa, että laatikko voi vierittää oikein, kun sen sisältö muuttuu tai kokoa muutetaan.

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

Määritä luettelo resepteille, tarroille, kuville ja linkeille. The mainloop() -toiminto käskee Pythonia suorittamaan Tkinterin tapahtumasilmukan ja kuuntelemaan tapahtumia, kunnes suljet ikkunan.

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

root.mainloop()

Yhdistä kaikki ja löydä ruokia yhdellä napin painalluksella.

Reseptihakusovelluksen tulos

Kun ohjelma suoritetaan ja syötät annoksen Chicken Burgerina, saat viisi parasta tulosta. Se sisältää syöttämäsi ruokalajin otsikon, kuvan ja reseptilinkin. Kun napsautat linkkiä, oletusselain avaa reseptilinkin. Alas vierittäessä sisällön koko pysyy samana ja näyttää erilaiset tulokset vaakasuunnassa keskitettynä.

Reseptihakusovelluksen parantaminen

Voit parantaa reseptihakusovellustasi ottamalla käyttöön suodatuksen ja lajittelun eri mieltymysten mukaan. Voit suodattaa ruokia ruokavalion, kypsennysajan ja keittiön mukaan ja lajitella ne mihin tahansa järjestykseen.

Luo ominaisuus suosikkireseptiesi kirjanmerkkeihin myöhemmin katsomista varten ja mahdollisuus jakaa ne sosiaalisessa mediassa. Voit luoda luokan löytääksesi haetuimmat, eniten kirjanmerkityt ja niin edelleen.

Yhdistämällä ohjelmointitaitosi ja sovellusliittymien tehokkaat ominaisuudet, voit muuntaa tämän perussovelluksen edelleen täysimittaiseksi.