Mükemmel tarifi bulmak için burada burada arama yaparak zaman kaybetmenize gerek yok. Kişiselleştirilmiş tarif bulucu uygulamanızı oluşturmak için bu kılavuzu kullanın.
Yüzlerce bağlantı ve reklamla internetin her yerine dağılmış çok sayıda tarifle, mükemmel tarifi bulmak zor olabilir. Bir tarif bulucu uygulaması oluşturmak, size özel ve kullanıcı dostu bir deneyim ve tutarlı bir tasarım sunarak tüm alakasız sonuçları ve dikkat dağıtıcı unsurları ortadan kaldırır.
.Bu uygulamayı oluşturarak, HTTP istekleri, API anahtar yönetimi, görüntü işleme ve dinamik GUI güncellemesi dahil olmak üzere grafik kullanıcı arabirimleri oluşturma becerilerinizi geliştireceksiniz.
Tkinter, İstekler, Yastık ve Webbrowser Modülünü Kurun
Bir tarif bulucu uygulaması oluşturmak için Tkinter, İstekler, PIL ve Webbrowser modülüne ihtiyacınız vardır. Tkinter, masaüstü uygulamaları oluşturmanıza olanak tanır. GUI geliştirmeyi kolaylaştıran çeşitli widget'lar sunar. Tkinter'ı kurmak için terminali açın ve şunu çalıştırın:
pip install tkinter
İstekler modülü, HTTP istekleri yapmayı ve kodlama ve durum gibi verileri içeren bir yanıt nesnesi döndürmeyi kolaylaştırır. Arayan kimliği bilgilerini almak için kullanabilirsiniz, bir web sitesi durum denetleyicisi oluşturun, para birimi dönüştürücü veya bir haber uygulaması. İstekler modülünü kurmak için terminali açın ve şunu çalıştırın:
pip install requests
Python Imaging Library'nin (PIL) bir çatalı olan Cushion kitaplığı, düzenlemeye, oluşturmaya, dosya biçimlerini dönüştürmeve görüntüleri kaydetme. Yastık modülünü kurmak için terminali açın ve şunu çalıştırın:
pip install Pillow
Webbrowser modülü, varsayılan tarayıcınızda herhangi bir bağlantıyı açmanıza yardımcı olur. Python standart kitaplığının bir parçasıdır. Bu nedenle, harici olarak yüklemenize gerek yoktur.
Tarif Arama için Edamam API Anahtarı Oluşturun
Edamam Recipe Search API anahtarını oluşturmak için aşağıdaki adımları izleyin:
- Ziyaret etmek Edamam ve üzerine tıklayın Kayıt API'sı düğme. Ayrıntıları doldurun ve planınızı şu şekilde seçin: Tarif Arama API'sı - Geliştirici.
- Hesabınıza giriş yapın, tıklayın hesaplar düğmesine tıklayın ve ardından Kontrol Paneline Git düğme.
- Bundan sonra, üzerine tıklayın Uygulamalar sekmesine tıklayın ve son olarak Görüş Tarif Arama API'sinin yanındaki düğme.
- Kopyala Uygulama Kimliği ve Uygulama Anahtarları ve uygulamanızda kullanmak üzere saklayın.
En İyi 5 Tarifi Almak İçin İşlevselliği Oluşturma
Python kullanarak bir tarif bulucu uygulaması oluşturmak için kaynak kodunun tamamını burada bulabilirsiniz. GitHub deposu.
Gerekli modülleri içe aktarın. Bir yöntem tanımlayın get_top_5_recipes() kullanıcının aradığı yemeğin en iyi beş tarifinin başlığını, resimlerini ve bağlantılarını alır. Kullanmak elde etmek() kullanıcının aradığı yemeğin adını çıkarmak için.
Kullanıcı bir tarif adı girdiyse, Edamam API'sinin tarif arama uç noktası için temel URL'yi tanımlayın. Geç uygulama_kimliği Ve uygulama_key API isteklerini doğrulamak ve yetkilendirmek için daha önce kopyaladınız.
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
Bir sözlük oluşturun, parametreler API isteğinin bir parçası olarak geçirmeniz gereken farklı parametreleri içerir. Şunun için anahtar/değer çiftlerini ayarlayın: Q, uygulama_kimliği, Ve uygulama_key daha önce aldığınız değerlere. Yı kur itibaren Ve ile görmek istediğiniz sonuçların sayısını yansıtacak parametreler.
Edamam API'sine, API URL'sini ve parametreler sözlük. Yanıtı depolayın ve JSON biçiminde ayıklayın. Arama clear_recipe_list() Ekranda bulunan tarifleri önceki isteklerden temizlemek için.
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()
Anahtar olup olmadığını kontrol edin, isabet ayıklanan JSON verilerinde bulunur ve arama sonucunu içeriyorsa. Cevabınız evet ise, arama sonuçlarını tekrar edin ve tarif bilgilerini birer birer çıkarın. ile resim URL'sine bir GET isteği gönderin. aktarım parametre ayarlandı Doğru Görüntü verilerinin akışına izin vermek için.
Yastık modülünün resim Aldığınız görüntüyü açmak için sınıf. kullanarak 200 piksel yüksekliğe ve genişliğe sahip olacak şekilde yeniden boyutlandırın. Lanczo'lar yüksek kaliteli yeniden boyutlandırma için yeniden örnekleme yöntemi. Bunu Tkinter uyumlu hale dönüştürün Fotoğraf Görüntüsü grafiksel kullanıcı arabiriminde görüntülemek için.
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)
Uygulamanın Yapısını Oluşturma
Tarif başlığını, resmi ve tarif bağlantısını görüntülemek için üç etiket tanımlayın. Yerleştirmek istediğiniz ana pencereyi, görüntülemek istediğiniz metni ve sahip olması gereken yazı tipi stilini ayarlayın. Görüntüyü görüntülemek için, görüntü öznitelik fotoğraf_resmi. Yı kur imleç bağlantı etiketindeki seçenek el2 tıklanabilir hale getirmek için.
Bağlantıyı bağlayın ve farenin sol tıklaması olayını çağırın. linki aç() işlev. kullanarak tüm widget'ları düzenleyin. ambalaj yöntemini kullanın, bunları yatay olarak ortalayın ve gerekirse dolguyu ekleyin. Başlığı, resimleri ve bağlantıları üç farklı listeye ekleyin.
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)
Bir yöntem tanımlayın, clear_recipe_list() önceki istek tarafından oluşturulan tüm ekran içeriğini temizlemek için. Tarif listesinin içeriğini temizleyin ve menüdeki her bir etiket üzerinde yineleyin. tarif_etiketi liste.
arama pack_forget() etiketi ekrandan kaldırma, ancak widget nesnesini olduğu gibi tutma yöntemi.
Temizle tarif_etiketleri yeni veriler için liste. Resimler ve bağlantılar için de bu işlemi tekrarlayın. Bir yöntem tanımlayın, linki aç() Tarif bağlantısını varsayılan web tarayıcınızda açmak için.
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)
Tkinter kök penceresini başlatın. Uygulamanın başlığını, boyutlarını ve arka plan rengini ayarlayın. Bir çerçeve parçacığı tanımlayın ve ana öğesini arka plan rengiyle birlikte ayarlayın. Bir etiket, bir giriş ve bir arama düğmesi oluşturun. kullanarak tüm widget'ları düzenleyin ambalaj yöntemini seçin ve gerekirse dolgu ekleyin.
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)
Tarif bilgilerini tutan widget'ları görüntülemek için beyaz arka plana sahip bir tuval oluşturun. Çerçevedeki tüm alanı her iki yönde alarak ve yeniden boyutlandırırken genişleterek pencerenin sol tarafında düzenleyin.
Tuval için dikey bir kaydırma çubuğu oluşturun ve sağ tarafına yerleştirin. bağlantı kaydırma çubuğu.set yöntemi tuval.yview kaydırma çubuğunun kaydırılması tuval içeriğini kaydıracak şekilde yöntem.
Pencerenin sol üst köşesine sabitlenen, tarif öğeleri için bir kap görevi görecek tuvalin içinde bir çerçeve oluşturun. Bağlamak içeriği değiştiğinde veya yeniden boyutlandırıldığında kutunun doğru şekilde kaydırılabilmesini sağlayacak şekilde olay.
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"))
)
Tarifler, etiketler, resimler ve bağlantılar için listeyi tanımlayın. bu Ana döngü() işlevi, Python'a Tkinter olay döngüsünü çalıştırmasını ve siz pencereyi kapatana kadar olayları dinlemesini söyler.
recipe_list = []
recipe_labels = []
recipe_images = []
recipe_links = []
root.mainloop()
Hepsini bir araya getirin ve bir düğmeye basarak mutfakları keşfedin.
Tarif Bulucu Uygulamasının Çıktısı
Programı çalıştırdığınızda ve yemeğe Chicken Burger olarak girdiğinizde ilk beş sonucu alırsınız. Girdiğiniz yemeğin başlığını, resmini ve tarif bağlantısını içerir. Bağlantıya tıklandığında, varsayılan web tarayıcısı tarif bağlantısını açar. Aşağı kaydırıldığında, içerik boyutu aynı kalır ve çeşitli sonuçları yatay olarak ortalanmış olarak görüntüler.
Tarif Bulucu Uygulamasını Geliştirme
Tarif bulucu uygulamanızı geliştirmek için farklı tercihlere göre filtreleme ve sıralama yapabilirsiniz. Bir yemeği diyet tercihine, pişirme süresine ve mutfağa göre filtreleyebilir ve istediğiniz sırayla sıralayabilirsiniz.
En sevdiğiniz tarifleri daha sonra görüntülemek üzere işaretlemek için bir özellik ve bunları sosyal medyada paylaşma seçeneği oluşturun. En çok aranan yemekleri, en çok işaretlenenleri vb. keşfetmek için bir kategori oluşturabilirsiniz.
Programlama becerilerinizi ve API'lerin güçlü özelliklerini birleştirerek, bu temel uygulamayı tam teşekküllü bir uygulamaya dönüştürebilirsiniz.