Tidak perlu lagi membuang waktu mencari resep yang sempurna di sana-sini. Gunakan panduan ini untuk membuat aplikasi pencari resep hasil personalisasi Anda.
Dengan banyaknya resep yang tersebar di seluruh internet dengan ratusan tautan dan iklan, menemukan resep yang sempurna bisa jadi menantang. Membangun aplikasi pencari resep memberi Anda pengalaman yang disesuaikan dan ramah pengguna, serta desain yang konsisten, menghilangkan semua hasil dan gangguan yang tidak relevan
.Dengan membangun aplikasi ini, Anda akan mempertajam keterampilan Anda dalam permintaan HTTP, manajemen kunci API, manipulasi gambar, dan membangun antarmuka pengguna grafis termasuk pembaruan GUI dinamis.
Instal Modul Tkinter, Requests, Pillow, dan Webbrowser
Untuk membangun aplikasi pencari resep, Anda memerlukan modul Tkinter, Requests, PIL, dan Webbrowser. Tkinter memungkinkan Anda membuat aplikasi desktop. Ini menawarkan berbagai widget yang membuatnya lebih mudah untuk mengembangkan GUI. Untuk menginstal Tkinter, buka terminal dan jalankan:
pip install tkinter
Modul Permintaan memudahkan untuk membuat permintaan HTTP dan mengembalikan objek respons yang berisi data seperti penyandian, dan status. Anda dapat menggunakannya untuk mengambil informasi ID penelepon, buat pemeriksa status situs web, konverter mata uang, atau aplikasi berita. Untuk menginstal modul Permintaan, buka terminal dan jalankan:
pip install requests
Pustaka Bantal—garpu dari Python Imaging Library (PIL)—menyediakan kemampuan pemrosesan gambar yang membantu dalam mengedit, membuat, mengkonversi format file, dan menyimpan gambar. Untuk menginstal modul Bantal, buka terminal dan jalankan:
pip install Pillow
Modul Webbrowser membantu Anda membuka tautan apa pun di browser default Anda. Ini adalah bagian dari pustaka standar Python. Oleh karena itu, Anda tidak perlu menginstalnya secara eksternal.
Hasilkan Kunci API Edamam untuk Pencarian Resep
Untuk menghasilkan kunci API Penelusuran Resep Edamam, ikuti langkah-langkah berikut:
- Mengunjungi Edamam dan klik pada API Pendaftaran tombol. Isi detailnya, dan pilih paket Anda sebagai API Penelusuran Resep - Pengembang.
- Masuk ke akun Anda, klik Akun tombol, dan kemudian klik pada Buka Dasbor tombol.
- Setelah itu, klik pada Aplikasi tab dan akhirnya klik pada Melihat tombol di sebelah API Penelusuran Resep.
- Salin ID aplikasi dan Kunci Aplikasi dan simpan untuk digunakan dalam aplikasi Anda.
Membangun Fungsionalitas untuk Mendapatkan 5 Resep Teratas
Anda dapat menemukan seluruh kode sumber untuk membuat aplikasi pencari resep menggunakan Python di sini repositori GitHub.
Impor modul yang diperlukan. Tentukan metode get_top_5_recipes() yang mengambil judul, gambar, dan tautan lima resep teratas dari hidangan yang dicari pengguna. Menggunakan mendapatkan() untuk mengekstrak nama hidangan yang dicari pengguna.
Jika pengguna memasukkan nama resep, tentukan URL dasar untuk endpoint penelusuran resep Edamam API. Melewati app_id Dan app_key Anda salin sebelumnya untuk mengautentikasi dan mengotorisasi permintaan API.
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
Buat kamus, parameter yang berisi parameter berbeda yang harus Anda berikan sebagai bagian dari permintaan API. Tetapkan pasangan kunci-nilai untuk Q, app_id, Dan app_key dengan nilai yang Anda dapatkan sebelumnya. Mengatur dari Dan ke parameter untuk mencerminkan jumlah hasil yang ingin Anda lihat.
Kirim permintaan GET ke API Edamam yang menggabungkan URL API dan parameter kamus. Simpan respons dan ekstrak dalam format JSON. Panggilan clear_recipe_list() untuk menghapus resep yang ada di layar dari permintaan sebelumnya.
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()
Periksa apakah kunci, hit hadir dalam data JSON yang diekstraksi dan jika berisi hasil pencarian. Jika ya, ulangi hasil pencarian dan ekstrak informasi resep satu per satu. Kirim permintaan GET ke URL gambar dengan sungai kecil parameter disetel ke BENAR untuk memungkinkan streaming data gambar.
Gunakan modul Bantal Gambar kelas untuk membuka gambar yang Anda terima. Ubah ukurannya menjadi tinggi dan lebar 200 piksel menggunakan Lanczos metode resampling untuk mengubah ukuran berkualitas tinggi. Ubah ini menjadi kompatibel dengan Tkinter Gambar Foto untuk menampilkannya pada antarmuka pengguna grafis.
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)
Membangun Struktur Aplikasi
Tetapkan tiga label untuk menampilkan judul resep, gambar, dan tautan ke resep. Atur jendela induk tempat Anda ingin meletakkannya, teks yang ingin Anda tampilkan, dan gaya font yang seharusnya. Untuk menampilkan gambar, atur gambar atribut untuk photo_image. Mengatur kursor opsi di label tautan ke tangan2 untuk membuatnya dapat diklik.
Ikat tautan dan acara klik kiri mouse untuk memanggil Buka tautan() fungsi. Atur semua widget menggunakan mengemas metode, pusatkan secara horizontal, dan tambahkan padding seperlunya. Tambahkan judul, gambar, dan tautan ke tiga daftar berbeda.
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)
Tentukan metode, clear_recipe_list() untuk menghapus seluruh konten layar yang dihasilkan oleh permintaan sebelumnya. Kosongkan isi daftar resep dan ulangi setiap label di label_resep daftar.
Memanggil paket_lupa() metode untuk menghapus label dari tampilan tetapi tetap mempertahankan objek widget tetap utuh.
Hapus label_resep daftar untuk data baru. Ulangi proses ini untuk gambar dan tautannya juga. Tentukan metode, Buka tautan() untuk membuka tautan resep di browser web default Anda.
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)
Inisialisasi jendela root Tkinter. Tetapkan judul, dimensi, dan warna latar belakang aplikasi. Tentukan widget bingkai dan atur elemen induknya beserta warna latar belakangnya. Buat label, entri, dan tombol pencarian. Atur semua widget menggunakan mengemas metode dan tambahkan padding seperlunya.
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)
Buat kanvas dengan latar belakang putih untuk menampilkan widget berisi informasi resep. Atur ke sisi kiri jendela, ambil semua ruang dalam bingkai di kedua arah dan perluas saat mengubah ukuran.
Buat bilah gulir vertikal untuk kanvas dan letakkan di sisi kanannya. Tautkan scrollbar.set metode ke canvas.yview metode sehingga menggulir bilah gulir akan menggulir konten kanvas.
Buat bingkai di dalam kanvas untuk bertindak sebagai wadah untuk item resep, berlabuh di kiri atas jendela. Ikat acara sedemikian rupa sehingga memastikan bahwa kotak dapat menggulir dengan benar saat kontennya berubah atau diubah ukurannya.
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"))
)
Tentukan daftar untuk resep, label, gambar, dan tautan. Itu mainloop() fungsi memberi tahu Python untuk menjalankan loop acara Tkinter dan mendengarkan acara sampai Anda menutup jendela.
recipe_list = []
recipe_labels = []
recipe_images = []
recipe_links = []
root.mainloop()
Satukan semuanya dan temukan masakan dengan satu klik tombol.
Output dari Aplikasi Pencari Resep
Saat menjalankan program dan memasukkan hidangan sebagai Burger Ayam, Anda mendapatkan lima hasil teratas. Ini berisi judul, gambar, dan tautan resep hidangan yang Anda masukkan. Saat mengklik tautan, browser web default membuka tautan resep. Saat menggulir ke bawah, ukuran konten tetap sama dan menampilkan berbagai hasil yang dipusatkan secara horizontal.
Menyempurnakan Aplikasi Pencari Resep
Untuk menyempurnakan aplikasi pencari resep Anda, Anda dapat menerapkan pemfilteran dan penyortiran sesuai dengan preferensi yang berbeda. Anda dapat memfilter hidangan sesuai dengan preferensi makanan, waktu memasak, dan masakan, dan mengurutkannya dalam urutan apa pun.
Buat fitur untuk menandai resep favorit Anda untuk dilihat nanti dan opsi untuk membagikannya di media sosial. Anda dapat membuat kategori untuk menemukan hidangan yang paling banyak dicari, paling banyak di-bookmark, dan sebagainya.
Menyisir keterampilan pemrograman Anda dan fitur canggih API, Anda selanjutnya dapat mengubah aplikasi dasar ini menjadi aplikasi lengkap.