לא עוד בזבוז זמן בחיפושים פה ושם אחר המתכון המושלם. השתמש במדריך זה כדי ליצור את אפליקציית מאתר המתכונים המותאמת אישית שלך.

עם שפע המתכונים הפזורים ברחבי האינטרנט עם מאות קישורים ופרסומות, מציאת המתכון המושלם יכולה להיות מאתגרת. בניית אפליקציית למציאת מתכונים מספקת לך חוויה מותאמת וידידותית למשתמש, ועיצוב עקבי, תוך ביטול כל התוצאות וההסחות הדעת שאינן רלוונטיות

.על ידי בניית אפליקציה זו, תחדד את כישוריך בבקשות HTTP, ניהול מפתחות API, מניפולציה של תמונות ובניית ממשקי משתמש גרפיים כולל עדכון GUI דינמי.

התקן את Tkinter, Requests, Pillow ומודול דפדפן אינטרנט

כדי לבנות יישום למציאת מתכונים, אתה צריך Tkinter, Requests, PIL ומודול דפדפן האינטרנט. Tkinter מאפשר לך ליצור יישומי שולחן עבודה. הוא מציע מגוון של ווידג'טים שמקלים על פיתוח ממשקי GUI. כדי להתקין את Tkinter, פתח את הטרמינל והפעל:

pip install tkinter

מודול הבקשות מקל לבצע בקשות HTTP ולהחזיר אובייקט תגובה המכיל נתונים כגון קידוד וסטטוס. אתה יכול להשתמש בו כדי להביא מידע מזהה מתקשר, ליצור בודק סטטוס אתר, ממיר מטבעות, או אפליקציית חדשות. כדי להתקין את מודול הבקשות, פתח את הטרמינל והפעל:

instagram viewer
pip install requests

ספריית הכרית - מזלג של ספריית הדמיה של Python (PIL) - מספקת יכולות עיבוד תמונה המסייעות בעריכה, יצירה, המרת פורמטים של קבצים, ושמירת תמונות. כדי להתקין את מודול הכרית, פתח את המסוף והפעל:

pip install Pillow

מודול דפדפן האינטרנט עוזר לך לפתוח כל קישור בדפדפן ברירת המחדל שלך. זה חלק מהספרייה הסטנדרטית של Python. לכן, אין צורך להתקין אותו חיצונית.

צור מפתח API של Edamam לחיפוש מתכונים

כדי ליצור את מפתח ה-API של Edamam Recipe Search, בצע את השלבים הבאים:

  1. לְבַקֵר אדאם ולחץ על ממשק API של הרשמה לַחְצָן. מלא את הפרטים ובחר את התוכנית שלך בתור API לחיפוש מתכונים - מפתח.
  2. היכנס לחשבון שלך, לחץ על החשבונות לחצן, ולאחר מכן לחץ על עבור אל לוח המחוונים לַחְצָן.
  3. לאחר מכן, לחץ על יישומים לשונית ולבסוף לחץ על נוף לחצן ליד ממשק API של חיפוש מתכונים.
  4. העתק את מזהה יישום וה מפתחות יישום ואחסן אותו לשימוש באפליקציה שלך.

בניית הפונקציונליות כדי לקבל את חמשת המתכונים המובילים

אתה יכול למצוא את כל קוד המקור לבניית אפליקציית מאתר מתכונים באמצעות Python מאגר GitHub.

ייבא את המודולים הדרושים. הגדירו שיטה get_top_5_recipes() המאחזר את חמשת המתכונים המובילים, תמונות וקישורים של המנה שהמשתמש מחפש. להשתמש לקבל() כדי לחלץ את שם המנה שהמשתמש חיפש.

אם המשתמש הזין שם מתכון, הגדר את כתובת האתר הבסיסית עבור נקודת הקצה של חיפוש המתכונים של Edamam API. תעביר את ה app_id ו app_key העתקת קודם לכן כדי לאמת ולאשר בקשות 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

צור מילון, params שמכיל את הפרמטרים השונים שעליך להעביר כחלק מבקשת ה-API. הגדר את צמדי המפתח-ערך עבור ש, app_id, ו app_key לערכים שקיבלת קודם לכן. הגדר את מ ו ל פרמטרים כדי לשקף את מספר התוצאות שאתה רוצה לראות.

שלח בקשת GET ל-Edamam API בשילוב כתובת ה-API וה- params מילון. אחסן את התגובה וחלץ אותה בפורמט JSON. שִׂיחָה clear_recipe_list() כדי לנקות את המתכונים הקיימים על המסך מבקשות קודמות.

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

בדוק אם המפתח, להיטים קיים בנתוני ה-JSON שחולצו ואם הוא מכיל את תוצאת החיפוש. אם כן, חזור על תוצאות החיפוש וחלץ את פרטי המתכון בזה אחר זה. שלח בקשת GET לכתובת ה-URL של התמונה עם ה- זרם פרמטר מוגדר ל נָכוֹן כדי לאפשר הזרמת נתוני תמונה.

השתמש במודול הכרית תמונה בכיתה כדי לפתוח את התמונה שקיבלת. שנה את גודלו לגובה ורוחב של 200 פיקסלים באמצעות ה- לנצ'וס שיטת דגימה מחדש לשינוי גודל באיכות גבוהה. המר את זה ל-Tkinter תואם PhotoImage כדי להציג אותו בממשק המשתמש הגרפי.

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 כדי שיהיה ניתן ללחוץ עליו.

קשר את הקישור ואת אירוע הקליק השמאלי של העכבר כדי להתקשר ל open_link() פוּנקצִיָה. ארגן את כל הווידג'טים באמצעות ה חבילה שיטה, מרכז אותם אופקית והוסף את הריפוד לפי הצורך. הוסף את הכותרת, התמונות והקישורים לשלוש רשימות שונות.

 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)

הגדירו שיטה, clear_recipe_list() כדי לנקות את כל תוכן המסך שנוצר על ידי הבקשה הקודמת. נקה את התוכן של רשימת המתכונים וחזרה על כל תווית ב- מתכון_תווית רשימה.

מתקשר ל pack_forget() שיטה להסיר את התווית מהתצוגה אך לשמור על אובייקט הווידג'ט ללא פגע.

לנקות את מתכון_תוויות רשימה לנתונים חדשים. חזור על תהליך זה גם עבור התמונות והקישורים. הגדירו שיטה, open_link() כדי לפתוח את קישור המתכון בדפדפן האינטרנט המוגדר כברירת מחדל.

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. הגדר את הכותרת, הממדים וצבע הרקע של היישום. הגדר ווידג'ט של מסגרת והגדר את רכיב האב שלו יחד עם צבע הרקע שלו. צור תווית, ערך ולחצן חיפוש. ארגן את כל הווידג'טים באמצעות ה חבילה שיטה והוסף ריפוד לפי הצורך.

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)

צור קנבס עם רקע לבן כדי להציג את הווידג'טים המכילים מידע על המתכון. ארגן אותו בצד שמאל של החלון, לוקח את כל השטח במסגרת לשני הכיוונים והרחיב אותו עם שינוי הגודל.

צור פס גלילה אנכי עבור הקנבס והצב אותו בצד ימין שלו. קשר את scrollbar.set שיטה ל canvas.yview שיטה כך שגלילת פס הגלילה תגלול את תוכן הקנבס.

צור מסגרת בתוך הקנבס שתשמש כמיכל לפריטי המתכון, עיגון בפינה השמאלית העליונה של החלון. לאגד את אירוע כזה שהוא מבטיח שהתיבה יכולה לגלול כהלכה כאשר התוכן שלה משתנה או משנה את גודלה.

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

הגדר את הרשימה עבור מתכונים, תוויות, תמונות וקישורים. ה mainloop() הפונקציה אומרת לפייתון להפעיל את לולאת האירועים של Tkinter ולהקשיב לאירועים עד שתסגור את החלון.

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

root.mainloop()

חברו הכל יחד וגלו מאכלים בלחיצת כפתור.

הפלט של אפליקציית מאתר המתכונים

בהפעלת התוכנית וכניסה למנה כצ'יקן בורגר, אתה מקבל את חמשת התוצאות המובילות. הוא מכיל את הכותרת, התמונה וקישור המתכון של המנה שהזנת. בלחיצה על הקישור, דפדפן האינטרנט המוגדר כברירת מחדל פותח את קישור המתכון. בגלילה מטה, גודל התוכן נשאר זהה ומציג את התוצאות השונות במרכז אופקי.

שיפור אפליקציית מאתר המתכונים

כדי לשפר את אפליקציית מאתר המתכונים שלך, תוכל ליישם סינון ומיון לפי העדפות שונות. ניתן לסנן מנה לפי העדפה תזונתית, זמן בישול ומטבח ולמיין אותם בכל סדר.

צור תכונה כדי לסמן את המתכונים האהובים עליך לצפייה מאוחר יותר ואפשרות לשתף אותם במדיה החברתית. אתה יכול ליצור קטגוריה כדי לגלות את המנות המבוקשות ביותר, הכי מסומנות, וכן הלאה.

בשילוב כישורי התכנות שלך והתכונות החזקות של ממשקי API, תוכל להמיר עוד יותר את היישום הבסיסי הזה ליישום מלא.