Δεν χρειάζεται πλέον να χάνουμε χρόνο ψάχνοντας εδώ κι εκεί για την τέλεια συνταγή. Χρησιμοποιήστε αυτόν τον οδηγό για να δημιουργήσετε την εξατομικευμένη εφαρμογή εύρεσης συνταγών.
Με την αφθονία των συνταγών που είναι διάσπαρτες σε όλο το διαδίκτυο με εκατοντάδες συνδέσμους και διαφημίσεις, η εύρεση της τέλειας συνταγής μπορεί να είναι δύσκολη. Η δημιουργία μιας εφαρμογής εύρεσης συνταγών σάς παρέχει μια προσαρμοσμένη και φιλική προς το χρήστη εμπειρία και συνεπή σχεδιασμό, εξαλείφοντας όλα τα άσχετα αποτελέσματα και περισπασμούς
.Με τη δημιουργία αυτής της εφαρμογής, θα βελτιώσετε τις δεξιότητές σας σε αιτήματα HTTP, διαχείριση κλειδιών API, χειρισμό εικόνας και δημιουργία γραφικών διεπαφών χρήστη, συμπεριλαμβανομένης της δυναμικής ενημέρωσης GUI.
Εγκαταστήστε τη μονάδα Tkinter, Requests, Pillow και Webbrowser
Για να δημιουργήσετε μια εφαρμογή εύρεσης συνταγών, χρειάζεστε Tkinter, Requests, PIL και τη μονάδα Webbrowser. Το Tkinter σάς επιτρέπει να δημιουργείτε εφαρμογές επιφάνειας εργασίας. Προσφέρει μια ποικιλία γραφικών στοιχείων που διευκολύνουν την ανάπτυξη GUI. Για να εγκαταστήσετε το Tkinter, ανοίξτε το τερματικό και εκτελέστε:
pip install tkinter
Η λειτουργική μονάδα αιτημάτων διευκολύνει την υποβολή αιτημάτων HTTP και την επιστροφή ενός αντικειμένου απόκρισης που περιέχει δεδομένα όπως κωδικοποίηση και κατάσταση. Μπορείτε να το χρησιμοποιήσετε για να λάβετε πληροφορίες αναγνώρισης καλούντος, δημιουργήστε έναν έλεγχο κατάστασης ιστότοπου, μετατροπέας νομίσματος ή μια εφαρμογή ειδήσεων. Για να εγκαταστήσετε τη λειτουργική μονάδα αιτημάτων, ανοίξτε το τερματικό και εκτελέστε:
pip install requests
Η βιβλιοθήκη Pillow—μια διχάλα της Python Imaging Library (PIL)—παρέχει δυνατότητες επεξεργασίας εικόνας που βοηθούν στην επεξεργασία, τη δημιουργία, μετατροπή μορφών αρχείωνκαι αποθήκευση εικόνων. Για να εγκαταστήσετε τη μονάδα Pillow, ανοίξτε το τερματικό και εκτελέστε:
pip install Pillow
Η ενότητα Webbrowser σάς βοηθά να ανοίξετε οποιονδήποτε σύνδεσμο στο προεπιλεγμένο πρόγραμμα περιήγησής σας. Είναι μέρος της βασικής βιβλιοθήκης Python. Επομένως, δεν χρειάζεται να το εγκαταστήσετε εξωτερικά.
Δημιουργήστε κλειδί API Edamam για Αναζήτηση συνταγών
Για να δημιουργήσετε το κλειδί API αναζήτησης συνταγών Edamam, ακολουθήστε τα παρακάτω βήματα:
- Επίσκεψη Ενταμάμ και κάντε κλικ στο Εγγραφή API κουμπί. Συμπληρώστε τα στοιχεία και επιλέξτε το πρόγραμμά σας ως Recipe Search API - Προγραμματιστής.
- Συνδεθείτε στον λογαριασμό σας, κάντε κλικ στο τους Λογαριασμούς κουμπί και, στη συνέχεια, κάντε κλικ στο Μεταβείτε στον Πίνακα ελέγχου κουμπί.
- Μετά από αυτό, κάντε κλικ στο Εφαρμογές καρτέλα και τέλος κάντε κλικ στο Θέα κουμπί δίπλα στο API αναζήτησης συνταγών.
- Αντιγράψτε το Αναγνωριστικό εφαρμογής και το Κλειδιά εφαρμογής και αποθηκεύστε το για να το χρησιμοποιήσετε στην εφαρμογή σας.
Χτίζοντας τη λειτουργικότητα για να αποκτήσετε τις 5 κορυφαίες συνταγές
Μπορείτε να βρείτε ολόκληρο τον πηγαίο κώδικα για τη δημιουργία μιας εφαρμογής εύρεσης συνταγών χρησιμοποιώντας Python σε αυτό Αποθετήριο GitHub.
Εισαγάγετε τις απαιτούμενες ενότητες. Ορίστε μια μέθοδο get_top_5_recipes() που ανακτά τους τίτλους, τις εικόνες και τους συνδέσμους των πέντε κορυφαίων συνταγών του πιάτου που αναζητά ο χρήστης. Χρήση παίρνω() για να εξαγάγετε το όνομα του πιάτου που αναζήτησε ο χρήστης.
Εάν ο χρήστης εισήγαγε ένα όνομα συνταγής, ορίστε τη βασική διεύθυνση URL για το τελικό σημείο αναζήτησης συνταγών του 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
Δημιουργήστε ένα λεξικό, παραμέτρους που περιέχει τις διαφορετικές παραμέτρους που πρέπει να περάσετε ως μέρος του αιτήματος API. Ορίστε τα ζεύγη κλειδιών-τιμών για q, app_id, και app_key στις αξίες που είχατε νωρίτερα. Ρυθμίστε το από και προς την παραμέτρους που αντικατοπτρίζουν τον αριθμό των αποτελεσμάτων που θέλετε να δείτε.
Στείλτε ένα αίτημα GET στο Edamam API συνδυάζοντας τη διεύθυνση URL του API και το παραμέτρους λεξικό. Αποθηκεύστε την απάντηση και εξαγάγετε τη σε μορφή 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 της εικόνας με το ρεύμα η παράμετρος έχει οριστεί σε Αληθής για να επιτρέπεται η ροή δεδομένων εικόνας.
Χρησιμοποιήστε τη μονάδα Pillow Εικόνα τάξη για να ανοίξετε την εικόνα που λάβατε. Αλλάξτε το μέγεθός του ώστε να έχει ύψος και πλάτος 200 pixel χρησιμοποιώντας το Λάντζος μέθοδος επαναδειγματοληψίας για αλλαγή μεγέθους υψηλής ποιότητας. Μετατρέψτε το σε συμβατό με 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)
Δόμηση της Δομής της Εφαρμογής
Ορίστε τρεις ετικέτες για να εμφανίσετε τον τίτλο της συνταγής, την εικόνα και τον σύνδεσμο προς τη συνταγή. Ορίστε το γονικό παράθυρο στο οποίο θέλετε να το τοποθετήσετε, το κείμενο που θέλετε να εμφανίζεται και το στυλ γραμματοσειράς που πρέπει να έχει. Για να εμφανίσετε την εικόνα, ορίστε το εικόνα αποδίδω σε photo_image. Ρυθμίστε το δρομέας επιλογή στην ετικέτα συνδέσμου προς χέρι2 για να το κάνετε κλικ.
Συνδέστε το σύνδεσμο και το αριστερό κλικ του ποντικιού για να καλέσετε το Ανοίξτε σύνδεσμο() λειτουργία. Οργανώστε όλα τα γραφικά στοιχεία χρησιμοποιώντας το πακέτο Μέθοδος, τα κεντράρετε οριζόντια και προσθέστε το γέμισμα όπως χρειάζεται. Προσθέστε τον τίτλο, τις εικόνες και τους συνδέσμους σε τρεις διαφορετικές λίστες.
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() μέθοδο για να αφαιρέσετε την ετικέτα από την οθόνη, αλλά να διατηρήσετε ανέπαφο το αντικείμενο του widget.
Καθαρίστε το συνταγή_ετικέτες λίστα για νέα δεδομένα. Επαναλάβετε αυτή τη διαδικασία για τις εικόνες και τους συνδέσμους επίσης. Ορίστε μια μέθοδο, Ανοίξτε σύνδεσμο() για να ανοίξετε τον σύνδεσμο συνταγής στο προεπιλεγμένο πρόγραμμα περιήγησής σας.
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)
Δημιουργήστε έναν καμβά με λευκό φόντο για να εμφανίσετε τα γραφικά στοιχεία που περιέχουν πληροφορίες συνταγής. Οργανώστε το στην αριστερή πλευρά του παραθύρου, λαμβάνοντας όλο το χώρο στο πλαίσιο και προς τις δύο κατευθύνσεις και επεκτείνοντάς το κατά την αλλαγή μεγέθους.
Δημιουργήστε μια κάθετη γραμμή κύλισης για τον καμβά και τοποθετήστε την στη δεξιά πλευρά του. Συνδέστε το γραμμή κύλισης.σύνολο μέθοδος στο 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() Η συνάρτηση λέει στην Python να εκτελέσει τον βρόχο συμβάντων Tkinter και να ακούει συμβάντα μέχρι να κλείσει το παράθυρο.
recipe_list = []
recipe_labels = []
recipe_images = []
recipe_links = []
root.mainloop()
Συνδυάστε τα όλα μαζί και ανακαλύψτε κουζίνες με ένα πάτημα ενός κουμπιού.
Η έξοδος της εφαρμογής Recipe Finder
Όταν τρέχετε το πρόγραμμα και εισάγετε το πιάτο ως Chicken Burger, λαμβάνετε τα πέντε κορυφαία αποτελέσματα. Περιέχει τον τίτλο, την εικόνα και τον σύνδεσμο συνταγής του πιάτου που καταχωρίσατε. Κάνοντας κλικ στον σύνδεσμο, το προεπιλεγμένο πρόγραμμα περιήγησης ιστού ανοίγει τον σύνδεσμο συνταγής. Κατά την κύλιση προς τα κάτω, το μέγεθος του περιεχομένου παραμένει το ίδιο και εμφανίζει τα διάφορα αποτελέσματα κεντραρισμένα οριζόντια.
Βελτίωση της Εφαρμογής Εύρεση συνταγών
Για να βελτιώσετε την εφαρμογή εύρεσης συνταγών, μπορείτε να εφαρμόσετε φιλτράρισμα και ταξινόμηση σύμφωνα με διαφορετικές προτιμήσεις. Μπορείτε να φιλτράρετε ένα πιάτο σύμφωνα με τις διατροφικές προτιμήσεις, τον χρόνο μαγειρέματος και την κουζίνα και να τα ταξινομήσετε με οποιαδήποτε σειρά.
Δημιουργήστε μια λειτουργία για να προσθέσετε σελιδοδείκτες στις αγαπημένες σας συνταγές για να τις δείτε αργότερα και μια επιλογή για να τις μοιραστείτε στα μέσα κοινωνικής δικτύωσης. Μπορείτε να δημιουργήσετε μια κατηγορία για να ανακαλύψετε τα πιάτα με τις περισσότερες αναζητήσεις, τα περισσότερα σελιδοδείκτες και ούτω καθεξής.
Συνδυάζοντας τις προγραμματιστικές σας ικανότητες και τα ισχυρά χαρακτηριστικά των API, μπορείτε να μετατρέψετε περαιτέρω αυτήν τη βασική εφαρμογή σε πλήρη.