Како да направите апликацију за проналажење рецепата користећи Питхон

Уз обиље рецепата разбацаних широм интернета са стотинама веза и реклама, проналажење савршеног рецепта може бити изазовно. Израда апликације за проналажење рецепата пружа вам прилагођено и лако корисничко искуство и доследан дизајн, елиминишући све небитне резултате и ометања

.Изградњом ове апликације, изоштрићете своје вештине у ХТТП захтевима, управљању АПИ кључевима, манипулацији сликама и изградњи графичких корисничких интерфејса укључујући динамичко ажурирање ГУИ.

Инсталирајте модул Ткинтер, Захтеви, јастук и веб претраживач

Да бисте направили апликацију за проналажење рецепата, потребни су вам Ткинтер, Рекуестс, ПИЛ и модул Веббровсер. Ткинтер вам омогућава да креирате десктоп апликације. Нуди разне виџете који олакшавају развој ГУИ-ја. Да бисте инсталирали Ткинтер, отворите терминал и покрените:

 pip install tkinter 

Модул Захтеви олакшава прављење ХТТП захтева и враћање објекта одговора који садржи податке као што су кодирање и статус. Можете га користити за преузимање информација о ИД-у позиваоца, креирање провере статуса веб локације, претварача валута или апликације за вести. Да бисте инсталирали модул Захтеви, отворите терминал и покрените:

 pip install requests 

Библиотека јастука — виљушка библиотеке Питхон Имагинг Либрари (ПИЛ) — пружа могућности обраде слика које помажу у уређивању, креирању, претварању формата датотека и чувању слика. Да бисте инсталирали Пиллов модул, отворите терминал и покрените:

 pip install Pillow 

Модул Веббровсер вам помаже да отворите било коју везу у вашем подразумеваном претраживачу. То је део стандардне библиотеке Пајтона. Стога, не морате да га инсталирате споља.

Да бисте генерисали Едамам АПИ кључ за претрагу рецепта, пратите следеће кораке:

  • Посетите Едамам и кликните на дугме АПИ за пријаву. Попуните детаље и изаберите свој план као АПИ за претрагу рецепата – програмер.
  • Пријавите се на свој налог, кликните на дугме Налози, а затим кликните на дугме Иди на контролну таблу.
  • Након тога кликните на картицу Апликације и на крају кликните на дугме Поглед поред АПИ-ја за претрагу рецепата.
  • Копирајте ИД апликације и кључеве апликације и сачувајте их да бисте их користили у својој апликацији.
  •   Да ли треба да купите МацБоок Про од 13 инча (2020)?

    Изградња функционалности за добијање 5 најбољих рецепата

    Овде можете пронаћи цео изворни код за прављење апликације за проналажење рецепата користећи Питхон ГитХуб спремиште.

    Увезите потребне модуле. Дефинишите метод гет_топ_5_реципес() који преузима наслове пет најбољих рецепата, слике и везе јела које корисник тражи. Користите гет() да бисте издвојили име јела које је корисник тражио.

    Ако је корисник унео име рецепта, дефинишите основни УРЛ за крајњу тачку претраге рецепта за Едамам АПИ. Проследите апп_ид и апп_кеи које сте раније копирали да бисте потврдили аутентичност и ауторизовали АПИ захтеве.

     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 =

    Направите речник параметара који садржи различите параметре које морате да проследите као део АПИ захтева. Подесите парове кључ/вредност за к, апп_ид и апп_кеи на вредности које сте раније добили. Подесите параметре од и до да одражавају број резултата које желите да видите.

    Пошаљите ГЕТ захтев Едамам АПИ-ју комбинујући АПИ УРЛ и речник параметара. Сачувајте одговор и извуците га у ЈСОН формату. Позовите цлеар_реципе_лист() да избришете рецепте присутне на екрану из ранијих захтева.

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

    Проверите да ли је кључ, погоци присутан у екстрахованим ЈСОН подацима и да ли садржи резултат претраге. Ако јесте, итерирајте резултате претраге и извуците информације о рецепту једну по једну. Пошаљите ГЕТ захтев на УРЛ слике са параметром стрима постављеним на Тачно да бисте омогућили стримовање података слике.

    Користите класу Имаге модула јастука да отворите слику коју сте примили. Промените величину тако да има висину и ширину од 200 пиксела користећи Ланцзос метод поновног узорковања за висококвалитетно промену величине. Претворите ово у Ткинтер компатибилну ПхотоИмаге да бисте је приказали на графичком корисничком интерфејсу.

             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)

    Изградња структуре апликације

    Дефинишите три ознаке за приказ наслова рецепта, слике и везе до рецепта. Подесите родитељски прозор у који желите да га поставите, текст који желите да прикажете и стил фонта који треба да има. Да бисте приказали слику, поставите атрибут слике на пхото_имаге. Поставите опцију курсора у ознаци везе на ханд2 да бисте могли да кликнете на њу.

      15 Сјајних ВП Блоцк Едитор додатака за креирање прелепе странице

    Повежите везу и догађај левим кликом миша да бисте позвали функцију опен_линк(). Организујте све виџете користећи метод паковања, центрирајте их хоризонтално и додајте додатке по потреби. Додајте наслов, слике и везе на три различите листе.

                     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)

    Дефинишите метод, цлеар_реципе_лист() да обришете цео садржај екрана генерисан претходним захтевом. Обришите садржај листе рецепата и пређите преко сваке ознаке на листи реципе_лабел.

    Позивање методе пацк_форгет() да бисте уклонили ознаку са екрана, али да би објекат виџета остао нетакнут.

    Обришите листу реципе_лабелс за нове податке. Поновите овај поступак и за слике и везе. Дефинишите метод, опен_линк() да бисте отворили везу за рецепт у вашем подразумеваном веб претраживачу.

     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)

    Иницијализујте Ткинтер роот прозор. Подесите наслов, димензије и боју позадине апликације. Дефинишите виџет оквира и поставите његов родитељски елемент заједно са бојом позадине. Направите ознаку, унос и дугме за претрагу. Организујте све виџете користећи метод паковања и додајте додатке по потреби.

     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)

    Направите платно са белом позадином да бисте приказали виџете који садрже информације о рецепту. Организујте га на левој страни прозора, узимајући сав простор у оквиру у оба смера и проширивајући га при промени величине.

      Како инсталирати Интел видео драјвере у Убунту

    Направите вертикалну траку за померање за платно и поставите је на десну страну. Повежите методу сцроллбар.сет са методом цанвас.ивиев тако да ће померање траке за померање померати садржај платна.

    Направите оквир унутар платна који ће служити као контејнер за ставке рецепта, причвршћујући се у горњем левом углу прозора. Повежите догађај <Цонфигуре> тако да осигура да оквир може исправно да се помера када се његов садржај промени или промени величину.

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

    Дефинишите листу за рецепте, етикете, слике и везе. Функција маинлооп() говори Пајтону да покрене Ткинтер петљу догађаја и ослушкује догађаје док не затворите прозор.

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

    root.mainloop()

    Спојите све то и откријте кухиње једним кликом.

    Излаз апликације за проналажење рецепата

    Када покренете програм и унесете јело као Цхицкен Бургер, добијате првих пет резултата. Садржи наслов, слику и везу за рецепт јела које сте унели. Када кликнете на везу, подразумевани веб претраживач отвара везу за рецепт. Приликом померања надоле, величина садржаја остаје иста и приказује различите резултате центриране хоризонтално.

    Побољшање апликације за проналажење рецепата

    Да бисте побољшали своју апликацију за проналажење рецепата, можете имплементирати филтрирање и сортирање према различитим преференцијама. Можете филтрирати јело према преференцијама у исхрани, времену кувања и кухињи и сортирати их било којим редоследом.

    Направите функцију за обележавање омиљених рецепата за касније гледање и опцију да их делите на друштвеним мрежама. Можете да креирате категорију да бисте открили најтраженија јела, најчешће обележена и тако даље.

    Комбинујући своје вештине програмирања и моћне карактеристике АПИ-ја, можете даље да конвертујете ову основну апликацију у пуноправну.