Hogyan készítsünk receptkereső alkalmazást Python használatával

Az interneten szétszórt receptek sokaságával, linkekkel és hirdetésekkel, a tökéletes recept megtalálása kihívást jelenthet. A receptkereső alkalmazás elkészítése személyre szabott és felhasználóbarát élményt és következetes tervezést biztosít, kiküszöbölve minden irreleváns eredményt és zavaró tényezőt.

.Az alkalmazás elkészítésével fejlesztheti tudását a HTTP-kérésekben, az API-kulcsok kezelésében, a képkezelésben és a grafikus felhasználói felületek felépítésében, beleértve a dinamikus grafikus felhasználói felület frissítését.

Telepítse a Tkinter, Requests, Pillow és Webbrowser modult

Receptkereső alkalmazás létrehozásához Tkinter, Requests, PIL és Webbrowser modul szükséges. A Tkinter lehetővé teszi az asztali alkalmazások létrehozását. Számos widgetet kínál, amelyek megkönnyítik a grafikus felhasználói felületek fejlesztését. A Tkinter telepítéséhez nyissa meg a terminált, és futtassa:

 pip install tkinter 

A Requests modul egyszerűvé teszi a HTTP-kérések létrehozását és egy olyan válaszobjektum visszaadását, amely olyan adatokat tartalmaz, mint a kódolás és az állapot. Használhatja hívóazonosító adatok lekérésére, webhelyállapot-ellenőrző, valutaváltó vagy híralkalmazás létrehozására. A Requests modul telepítéséhez nyissa meg a terminált, és futtassa:

 pip install requests 

A Pillow könyvtár – a Python Imaging Library (PIL) egy része – olyan képfeldolgozási képességeket biztosít, amelyek segítenek a szerkesztésben, a létrehozásban, a fájlformátumok konvertálásában és a képek mentésében. A Pillow modul telepítéséhez nyissa meg a terminált, és futtassa:

 pip install Pillow 

A Webböngésző modul segít bármely hivatkozás megnyitásában az alapértelmezett böngészőben. Ez a Python szabványkönyvtár része. Ezért nem kell kívülről telepítenie.

Az Edamam Recipe Search API kulcs létrehozásához kövesse az alábbi lépéseket:

  • Látogatás Edamam és kattintson a Regisztrációs API gombra. Töltse ki a részleteket, és válassza ki tervét Receptkereső API – Fejlesztőként.
  • Jelentkezzen be fiókjába, kattintson a Fiókok gombra, majd kattintson az Ugrás az irányítópultra gombra.
  • Ezután kattintson az Alkalmazások fülre, végül kattintson a Nézet gombra a Receptkereső API mellett.
  • Másolja ki az alkalmazásazonosítót és az alkalmazáskulcsokat, és tárolja az alkalmazásban való használatra.
  •   iPhone vagy iPad kézi visszaállítása a Mac segítségével

    A funkcionalitás kialakítása az 5 legjobb recept eléréséhez

    Ebben megtalálja a teljes forráskódot a Python segítségével elkészíthető receptkereső alkalmazáshoz GitHub adattár.

    Importálja a szükséges modulokat. Határozzon meg egy get_top_5_recipes() metódust, amely lekéri a felhasználó által keresett étel öt legnépszerűbb receptjének címét, képét és linkjét. A get() segítségével kivonhatja a felhasználó által keresett étel nevét.

    Ha a felhasználó beírt egy receptnevet, adja meg az Edamam API receptkeresési végpontjának alap URL-címét. Adja át a korábban kimásolt app_id és app_key kulcsot az API-kérelmek hitelesítéséhez és engedélyezéséhez.

     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 =

    Hozzon létre egy szótárt, paramétereket, amelyek tartalmazzák az API-kérés részeként átadandó különböző paramétereket. Állítsa be a q, app_id és app_key kulcs-érték párjait a korábban kapott értékekre. Állítsa be a from és to paramétereket, hogy tükrözze a látni kívánt eredmények számát.

    Küldjön egy GET kérelmet az Edamam API-nak az API URL-cím és a paraméterszótár kombinálásával. Tárolja a választ, és JSON formátumban bontsa ki. Hívja a clear_recipe_list() parancsot, hogy törölje a képernyőn lévő recepteket a korábbi kérésekből.

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

    Ellenőrizze, hogy a kulcs, találat szerepel-e a kivont JSON-adatokban, és tartalmazza-e a keresési eredményt. Ha igen, ismételje meg a keresési eredményeket, és egyenként vegye ki a receptinformációkat. A képadatok streamelésének engedélyezéséhez küldjön egy GET-kérést a kép URL-címére úgy, hogy az adatfolyam-paramétert True értékre állítsa.

    Használja a Párna modul Kép osztályát a kapott kép megnyitásához. Méretezze át úgy, hogy a magassága és szélessége 200 pixel legyen a Lanczos újramintavételezési módszerrel a jó minőségű átméretezés érdekében. Konvertálja ezt Tkinter-kompatibilis PhotoImage-re, hogy megjelenítse a grafikus felhasználói felületen.

             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)

    Az alkalmazás szerkezetének felépítése

    Határozzon meg három címkét a recept címének, a képnek és a receptre mutató hivatkozásnak a megjelenítéséhez. Állítsa be a szülőablakot, amelybe el szeretné helyezni, a megjeleníteni kívánt szöveget és a betűtípus stílusát. A kép megjelenítéséhez állítsa az image attribútumot a photo_image értékre. A hivatkozás címkéjében állítsa a kurzort hand2-re, hogy kattintható legyen.

      Javítsa ki az illesztőprogram IRQL nem kisebb vagy egyenlő Rtwlane rendszerhibáját

    Kösse össze a hivatkozást és a bal egérkattintás eseményét az open_link() függvény meghívásához. Rendezd az összes widgetet a csomagolás módszerével, középre igazítsd őket vízszintesen, és szükség szerint adj hozzá párnázást. Adja hozzá a címet, a képeket és a hivatkozásokat három különböző listához.

                     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)

    Határozzon meg egy módszert, a clear_recipe_list() az előző kérés által generált teljes képernyőtartalom törlésére. Törölje a receptlista tartalmát, és ismételje meg az egyes címkéket a recept_címke listában.

    A pack_forget() metódus meghívása a címke eltávolításához a kijelzőről, de a widget objektum érintetlen maradásához.

    Törölje a recept_címkék listáját az új adatokhoz. Ismételje meg ezt a folyamatot a képeknél és a hivatkozásoknál is. Határozzon meg egy módszert, az open_link() a recepthivatkozás megnyitásához az alapértelmezett webböngészőben.

     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)

    Inicializálja a Tkinter gyökérablakát. Állítsa be az alkalmazás címét, méreteit és háttérszínét. Határozzon meg egy keret widgetet, és állítsa be a szülőelemét a háttérszínével együtt. Hozzon létre egy címkét, egy bejegyzést és egy keresőgombot. Rendszerezze az összes widgetet a csomagolás módszerével, és szükség szerint adjon hozzá párnázást.

     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)

    Hozzon létre egy fehér hátterű vásznat a receptinformációkat tartalmazó widgetek megjelenítéséhez. Rendezze az ablak bal oldalára úgy, hogy a keretben lévő teljes helyet mindkét irányban elfoglalja, és átméretezéskor bővítse.

      Kezelje az alkalmazásértesítéseket közvetlenül az iPhone értesítési központjából

    Hozzon létre egy függőleges görgetősávot a vászonhoz, és helyezze a jobb oldalára. Kapcsolja össze a scrollbar.set metódust a canvas.yview metódussal, így a görgetősáv görgetése görgeti a vászon tartalmát.

    Hozzon létre egy keretet a vásznon belül, amely tárolóként szolgál a receptelemek számára, rögzítve az ablak bal felső sarkában. Kösse össze a eseményt úgy, hogy biztosítsa a doboz megfelelő görgetését, amikor a tartalma megváltozik vagy átméretezi.

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

    Adja meg a receptek, címkék, képek és hivatkozások listáját. A mainloop() függvény arra utasítja a Pythont, hogy futtassa a Tkinter eseményhurkot, és figyelje az eseményeket, amíg be nem zárja az ablakot.

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

    root.mainloop()

    Állítsa össze az egészet, és fedezze fel a konyhákat egyetlen gombnyomással.

    A Receptkereső alkalmazás kimenete

    A program futtatásakor és Chicken Burger néven belépve az ételbe, az első öt eredményt kapja. Tartalmazza a beírt étel címét, képét és receptlinkjét. A hivatkozásra kattintva az alapértelmezett webböngésző megnyitja a recept linkjét. Lefelé görgetéskor a tartalom mérete változatlan marad, és a különböző eredményeket vízszintesen középre állítva jeleníti meg.

    A Receptkereső alkalmazás fejlesztése

    A receptkereső alkalmazás fejlesztése érdekében szűrést és rendezést hajthat végre a különböző preferenciák szerint. Az ételeket az étrendi preferenciák, a főzési idő és a konyha szerint szűrheti, és tetszőleges sorrendbe rendezheti.

    Hozzon létre egy funkciót, amellyel kedvenc receptjeit könyvjelzővel láthatja el, hogy később megtekinthesse, és megoszthatja azokat a közösségi médiában. Létrehozhat egy kategóriát, hogy felfedezze a legtöbbet keresett ételeket, a legtöbb könyvjelzővel ellátott stb.

    Programozási készségeit és az API-k hatékony funkcióit ötvözve tovább alakíthatja ezt az alapalkalmazást teljes értékű alkalmazássá.