Tin tức và phân tích của tất cả các thiết bị di động

Cách xây dựng ứng dụng tìm kiếm công thức bằng python

Với vô số công thức nấu ăn rải rác trên internet, với hàng trăm liên kết và quảng cáo, việc tìm ra công thức hoàn hảo có thể là một thách thức. Xây dựng ứng dụng tìm kiếm công thức nấu ăn mang lại trải nghiệm tùy chỉnh và thân thiện với người dùng cũng như thiết kế nhất quán, loại bỏ tất cả các kết quả không liên quan và phiền nhiễu

.Bằng cách phát triển ứng dụng này, bạn sẽ nâng cao kỹ năng của mình trong các yêu cầu HTTP, quản lý khóa API, thao tác hình ảnh và tạo giao diện đồ họa người dùng, bao gồm cả cập nhật GUI động.

Cài đặt Tkinter, Yêu cầu, Gối và Webbrowser

Để xây dựng một ứng dụng tìm kiếm công thức nấu ăn, bạn cần có mô-đun Tkinter, Yêu cầu, PIL và Webbrowser. Tkinter cho phép bạn tạo các ứng dụng máy tính để bàn. Nó cung cấp nhiều tiện ích giúp bạn dễ dàng tạo GUI. Để cài đặt Tkinter, hãy mở terminal và chạy:

 pip install tkinter 

Mô-đun Yêu cầu giúp dễ dàng thực hiện các yêu cầu HTTP và trả về đối tượng phản hồi chứa dữ liệu như mã hóa và trạng thái. Bạn có thể sử dụng nó để truy xuất thông tin ID người gọi, tạo trình kiểm tra trạng thái trang web, công cụ chuyển đổi tiền tệ hoặc ứng dụng tin tức. Để cài đặt mô-đun Yêu cầu, hãy mở một thiết bị đầu cuối và chạy:

 pip install requests 

Thư viện Gối, một nhánh của Thư viện hình ảnh Python (PIL), cung cấp khả năng xử lý hình ảnh để giúp bạn chỉnh sửa, tạo, chuyển đổi định dạng tệp và lưu hình ảnh. Để cài đặt mô-đun Gối, hãy mở một thiết bị đầu cuối và chạy:

 pip install Pillow 

Mô-đun trình duyệt web giúp bạn mở bất kỳ liên kết nào trong trình duyệt mặc định của bạn. Nó là một phần của thư viện chuẩn Python. Vì vậy, bạn không cần phải cài đặt nó bên ngoài.

Để tạo khóa API tìm kiếm công thức nấu ăn Edamam, hãy làm theo các bước sau:

  • Truy cập Edamam và nhấp vào API đăng ký. Điền thông tin chi tiết và chọn gói của bạn làm API Tìm kiếm Công thức – Nhà phát triển.
  • Đăng nhập vào tài khoản của bạn, nhấp vào Tài khoản rồi nhấp vào Chuyển đến Trang tổng quan.
  • Sau đó nhấp vào tab Ứng dụng và cuối cùng nhấp vào nút Xem bên cạnh API Tìm kiếm Công thức.
  • Sao chép ID ứng dụng và Khóa ứng dụng rồi lưu chúng để sử dụng trong ứng dụng.
  • Xây dựng chức năng để có được 5 công thức nấu ăn tốt nhất

    Bạn có thể tìm thấy tất cả mã nguồn để xây dựng ứng dụng tìm kiếm công thức bằng Python trong kho GitHub này.

    Nhập các mô-đun cần thiết. Xác định phương thức get_top_5_recipes() để truy xuất năm tiêu đề công thức, hình ảnh và liên kết tới món ăn mà người dùng đang tìm kiếm. Sử dụng hàm get() để trích xuất tên món ăn mà người dùng đang tìm kiếm.

    Nếu người dùng nhập tên công thức, hãy xác định URL cơ sở cho điểm cuối tìm kiếm công thức API Edamam. Tải ID ứng dụng và khóa ứng dụng mà bạn đã sao chép trước đó lên để xác thực và ủy quyền các yêu cầu 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 =

    Tạo một từ điển, các thông số, chứa các tham số khác nhau mà bạn cần chuyển như một phần của yêu cầu API. Đặt khóa-giá trị cho q, app_id và app_key thành các giá trị bạn có trước đó. Đặt các tham số từ và tới để phản ánh số lượng kết quả bạn muốn xem.

    Gửi yêu cầu GET tới API Edamam bằng cách kết hợp URL API và từ điển thông số. Lưu phản hồi và trích xuất nó ở định dạng JSON. Gọi phương thức clear_recipe_list() để xóa các công thức nấu ăn hiện trên màn hình khỏi các yêu cầu trước đó.

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

    Xác minh rằng khóa lượt truy cập có trong dữ liệu JSON được trích xuất và chứa kết quả tìm kiếm. Nếu vậy, hãy xem qua các kết quả tìm kiếm và trích xuất từng thông tin công thức. Gửi yêu cầu GET tới URL hình ảnh với tham số luồng được đặt thành True để cho phép truyền dữ liệu hình ảnh.

    Sử dụng lớp Hình ảnh của mô-đun Gối để mở hình ảnh đã nhận. Thay đổi kích thước của nó thành cao 200 pixel và rộng 200 pixel bằng phương pháp lấy mẫu lại Lanczos để thay đổi kích thước chất lượng cao. Chuyển đổi nó thành PhotoImage tương thích với Tkinter để hiển thị nó trong GUI.

             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)

    Xây dựng cấu trúc của ứng dụng

    Xác định ba nhãn để hiển thị tiêu đề, hình ảnh và liên kết đến công thức. Đặt cửa sổ chính ở nơi bạn muốn đặt, văn bản bạn muốn hiển thị và kiểu phông chữ cần có. Để hiển thị hình ảnh, hãy đặt thuộc tính hình ảnh thành photo_image. Đặt tùy chọn con trỏ trong nhãn liên kết thành hand2 để có thể nhấp vào được.

    Liên kết sự kiện liên kết và nhấp chuột trái để gọi hàm open_link(). Sắp xếp tất cả các vật dụng bằng cách sử dụng phương pháp đóng gói, căn giữa chúng theo chiều ngang và thêm phần đệm nếu cần. Bao gồm tiêu đề, hình ảnh và liên kết tới ba danh sách khác nhau.

                     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)

    Xác định phương thức clear_recipe_list() để xóa tất cả nội dung màn hình được tạo bởi yêu cầu trước đó. Xóa danh sách công thức và xem lại từng nhãn trong danh sách “recipe_label”.

    Gọi phương thức pack_forget() để xóa nhãn khỏi màn hình nhưng vẫn giữ nguyên đối tượng widget.

    Xóa danh sách label_recipe để có dữ liệu mới. Lặp lại quá trình này cho hình ảnh và liên kết. Xác định phương thức open_link() để mở liên kết công thức trong trình duyệt web mặc định của bạn.

     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)

    Khởi tạo cửa sổ chính Tkinter. Đặt tiêu đề, kích thước và màu nền của ứng dụng. Xác định tiện ích khung và đặt thành phần gốc của nó cùng với màu nền. Tạo nhãn, bài đăng và nút tìm kiếm. Sắp xếp tất cả các vật dụng bằng phương pháp đóng gói và thêm phần đệm nếu cần.

     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)

    Tạo canvas có nền trắng để hiển thị các tiện ích chứa thông tin công thức nấu ăn. Sắp xếp nó ở phía bên trái của cửa sổ, chiếm toàn bộ không gian trong khung theo cả hai hướng và mở rộng nó khi bạn thay đổi kích thước.

    Tạo một thanh cuộn dọc cho khung vẽ và đặt nó ở bên phải khung vẽ. Kết hợp phương thức Scrollbar.set với phương thức canvas.yview để thanh cuộn thanh cuộn cuộn nội dung của khung vẽ.

    Tạo một khung bên trong khung vẽ để đóng vai trò là nơi chứa các mục công thức, cố định vào góc trên bên trái của cửa sổ. Liên kết sự kiện theo cách mà trường cuộn đúng cách khi nội dung của nó bị thay đổi hoặc thay đổi kích thước.

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

    Xác định danh sách công thức nấu ăn, nhãn, hình ảnh và liên kết. Hàm mainloop() yêu cầu Python bắt đầu vòng lặp sự kiện Tkinter và lắng nghe các sự kiện cho đến khi bạn đóng cửa sổ.

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

    root.mainloop()

    Đặt tất cả lại với nhau và khám phá nhà bếp chỉ bằng một cú nhấp chuột.

    Đầu ra của Công cụ tìm công thức

    Khi bạn chạy chương trình và nhập món ăn là Chicken Burger, bạn sẽ nhận được 5 kết quả cao nhất. Chứa tiêu đề, hình ảnh và liên kết tới công thức của món ăn đã nhập. Khi bạn nhấp vào liên kết, trình duyệt web mặc định của bạn sẽ mở liên kết công thức nấu ăn. Khi bạn cuộn xuống, kích thước của nội dung vẫn giữ nguyên và hiển thị các kết quả được căn giữa theo chiều ngang khác nhau.

    Cải tiến ứng dụng Recipe Finder

    Để cải thiện ứng dụng tìm kiếm công thức nấu ăn, bạn có thể triển khai lọc và sắp xếp theo các sở thích khác nhau. Món ăn có thể được lọc theo sở thích ăn uống, thời gian nấu và loại món ăn và sắp xếp theo bất kỳ thứ tự nào.

    Đánh dấu công thức nấu ăn yêu thích của bạn để xem sau và chia sẻ chúng trên phương tiện truyền thông xã hội. Bạn có thể tạo một danh mục để khám phá những thực phẩm được tìm kiếm nhiều nhất, những thực phẩm được đánh dấu nhiều nhất, v.v.

    Bằng cách kết hợp các kỹ năng lập trình và các tính năng API nâng cao của bạn, bạn có thể chuyển đổi hơn nữa ứng dụng cơ bản này thành một ứng dụng hoàn chỉnh.