क्या आपने कभी यह तय करने में संघर्ष किया है कि आगे कौन सा टीवी शो या फिल्म देखी जाए? अपनी अगली बिंज-वॉच के बारे में निर्णय लेना कभी भी आसान नहीं होता क्योंकि विभिन्न स्ट्रीमिंग प्रदाताओं पर बहुत सारे विकल्प उपलब्ध हैं। अपनी अगली फिल्म का निर्णय लेते समय, हम मुख्य रूप से कई रेटिंग एजेंसियों (जैसे आईएमडीबी) की समीक्षाओं और रेटिंग पर भरोसा करते हैं। हालाँकि, इन संस्थानों की प्रचुरता को देखते हुए किस रेटिंग पर विश्वास करना मुश्किल हो सकता है। ऐसा कहने के बाद, इन संगठनों में से कई से अच्छे अंक प्राप्त करने वाली फिल्म को देखना अक्सर सुरक्षित होता है। लेकिन क्या ऐसी फिल्म ढूंढ़ना मुश्किल नहीं है? हां यह है! इस तीन-ब्लॉग श्रृंखला में, हम इस सटीक समस्या को हल करने के लिए एक सॉफ्टवेयर समाधान तैयार करेंगे! यह Django एप्लिकेशन, जिसे हम फ्लिक्स-फाइंडर कहेंगे, अपने उपयोगकर्ता को कई रेटिंग एजेंसियों की रेटिंग के आधार पर फिल्मों को फ़िल्टर करने की अनुमति देगा। हम अपने एप्लिकेशन के लिए आवश्यक डेटा प्राप्त करने के लिए BrightData की सेवाओं का उपयोग करेंगे। तो आगे की हलचल के बिना, चलिए फ़्लिक्स-फाइंडर बनाना शुरू करते हैं। एप्लिकेशन की स्थापना इस खंड से शुरू करने से पहले, सुनिश्चित करें कि आपके सिस्टम में Django स्थापित है! यदि आपके सिस्टम में Django स्थापित है तो निम्न आदेश काम करना चाहिए। python3 -m django --version यदि यह आपके सिस्टम में स्थापित नहीं है तो Django को स्थापित करने के लिए पाइप का उपयोग करें! python3 -m pip install Django आइए हम अपने Django प्रोजेक्ट की स्थापना करके शुरुआत करें। निम्न कमांड का उपयोग करके एक नया प्रोजेक्ट बनाएं। rishabh@my-ubuntu:~/projects$ python3 -m django startproject flix_finder निर्देशिका को नई बनाई गई परियोजना निर्देशिका में बदलें। अपना पसंदीदा कोड संपादक यहां खोलें। आपको Django द्वारा स्वचालित रूप से बनाई गई इस निर्देशिका में निम्न फ़ाइलों को देखना चाहिए। flix_finder rishabh@my-ubuntu:~/projects/flix_finder$ tree . . ├── flix_finder │ ├── asgi.py │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py 1 directory, 6 files इन फ़ाइलों के बारे में अधिक जानने के लिए, Django द्वारा प्रदान की गई इस को देखें। व्याख्या Django सर्वर चलाने और यह सुनिश्चित करने के लिए कि सेटअप ठीक से पूरा हो गया था! localhost:8000 rishabh@my-ubuntu:~/projects/flix_finder$ python3 manage.py runserver एक नया ऐप बनाना और हमारा पहला दृश्य एक Django ऐप (या Django एप्लिकेशन) एक बड़े Django प्रोजेक्ट के एक घटक को संदर्भित करता है जो एक व्यक्तिगत सुविधा या कार्यक्षमता को समाहित करता है। Django ऐप्स पुन: प्रयोज्य और स्वतंत्र घटक हैं। उनमें मॉडल, विचार, टेम्पलेट्स, परीक्षण और अन्य फाइलें शामिल हैं। हमारी परियोजना के लिए सभी अनुशंसाकर्ता तर्क नामक एप्लिकेशन में रहेंगे। इस ऐप को बनाने के लिए, निम्न कमांड चलाएँ। recommender rishabh@my-ubuntu:~/projects/flix_finder$ python3 manage.py startapp recommender उपरोक्त आदेश नामक एक नया फ़ोल्डर बनाएगा। हमारे एप्लिकेशन के सभी लॉजिक इस फोल्डर के अंदर जाएंगे। recommender इससे पहले कि हम यह कह सकें कि हमारा एप्लिकेशन सफलतापूर्वक बन गया है, एक और चरण बाकी है। आगे बढ़ें और के अंतर्गत मौजूद सूची में नए बनाए गए ऐप का नाम जोड़ें। flix_finder/settings.py INSTALLED_APPS # flix_finder/settings.py INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'recommender' ] इसके साथ ही हमने अपना ऐप सफलतापूर्वक बना लिया है। recommender अब, हम अपना पहला दृश्य बनाते हैं। Django में, विचार पायथन फ़ंक्शन हैं जो HTTP अनुरोध प्राप्त करते हैं और HTTP प्रतिक्रियाएँ लौटाते हैं। कुछ व्यावसायिक तर्क के आधार पर उपयोगकर्ताओं को डेटा प्रस्तुत करने में दृश्य महत्वपूर्ण भूमिका निभाते हैं। के तहत एक नई विधि बनाएं। यह विधि । अभी के लिए, यह समापन बिंदु केवल एक हैलो संदेश लौटाता है। recommender/views.py localhost:8000/ from django.http import HttpResponse def index(request): return HttpResponse("Hello From Recommender!") हमने अनुरोध को संभालने के लिए व्यू मेथड बनाया है, लेकिन हमने यह निर्दिष्ट नहीं किया है (हमारी परियोजना में) कि कौन सा एंडपॉइंट इस व्यू के अनुरूप है। हम इसे फ़ाइलों में करते हैं। urls.py सिफ़ारिशकर्ता ऐप के अंदर एक नई फ़ाइल बनाएँ, और इसे नाम दें। यहां, हम URL और व्यू मेथड के बीच इस पत्राचार को निर्दिष्ट करते हैं। urls.py from django.urls import path from . import views urlpatterns = [ path("", views.index, name = "index") ] अब हमें Django को इस नए URL की फ़ाइल से अवगत कराने की आवश्यकता है। फ़ाइल को निम्न में अपडेट करें। flix_finder/urls.py from django.urls import path, include urlpatterns = [ path('', include("recommender.urls")), path('admin/', admin.site.urls), ] अपना सर्वर शुरू करें, अगर पहले से नहीं है, और अपने ब्राउज़र पर खोलें। आपको हैलो संदेश देखना चाहिए। localhost:8000 बधाई हो, आपने अभी-अभी अपना पहला दृश्य बनाना पूरा किया है! आइए हम टेम्प्लेट का उपयोग करें… आइए हम सहमत हों ... प्रतिक्रिया के रूप में एक स्ट्रिंग भेजना सबसे अच्छी बात नहीं है। इसके बजाय हमें एक उचित HTML प्रतिसाद भेजना चाहिए। और इसी सटीक उद्देश्य के लिए, हम Django Templates का उपयोग करेंगे। निदेशक के तहत एक निर्देशिका बनाएँ। इस नए बनाए गए फ़ोल्डर का नाम विशेष है क्योंकि Django by-default HTML फ़ाइलों के लिए नाम की निर्देशिकाओं में खोज करता है। recommender templates templates नई बनाई गई डायरेक्टरी के अंदर नाम की एक नई फाइल बनाएं। इस फ़ाइल के अंदर, हम उस HTML को लिखेंगे जिसे हम प्रस्तुत करना चाहते हैं जब उपयोगकर्ता । index.html localhost:8000 चूँकि HTML लिखना यहाँ मुख्य फोकस नहीं है, मैं उस भाग की व्याख्या करना छोड़ दूंगा और आप से HTML को आसानी से कॉपी कर सकते हैं। यहाँ इस HTML फ़ाइल (या Django टेम्पलेट) के बारे में जानने के लिए आपको कुछ चीजें यहां दी गई हैं - यह एचटीएमएल वेबपेज पर चार चीजों को प्रदर्शित करता है - नेविगेशन बार, कैरसेल, मूवी सर्च फॉर्म और मूवी सर्च रिजल्ट। (1) यह HTML के अंदर सीधे पायथन चर के उपयोग की अनुमति देने के लिए Django टेम्पलेट भाषा का उपयोग करता है। (2) यह संदर्भ में चर की अपेक्षा करता है (डेटा टेम्पलेट को पास किया गया है) और इसका उपयोग हिंडोला प्रदर्शित करने के लिए करेगा। (3) featured_movies यह उम्मीद करता है कि वेरिएबल को Django फॉर्म ऑब्जेक्ट से भरा जाएगा और इसका उपयोग मूवी सर्च फॉर्म को प्रदर्शित करने के लिए करेगा। (4) form यह चर की अपेक्षा करता है और खोज के परिणामों को प्रदर्शित करने के लिए इसका उपयोग करेगा। (5) filtered_movie_list यह चर की भी अपेक्षा करता है जो इंगित करता है कि क्या खोज के परिणामस्वरूप एक खाली प्रतिक्रिया मिली। (6) no_result_error स्टाइल के लिए हमें कुछ CSS जोड़ने की भी आवश्यकता होगी। निर्देशिका के तहत एक निर्देशिका बनाएँ। यह फोल्डर सभी स्टैटिक फाइल्स को होल्ड करेगा। recommender static नामक एक नई फ़ाइल बनाएँ, और से CSS पेस्ट करें। style.css इस URL इसके साथ, हमारे पास सभी आवश्यक HTML और CSS मौजूद हैं। इसके बाद, हमें मूवी सर्च फॉर्म बनाने की जरूरत है। मूवी सर्च फॉर्म बनाना चूँकि हमारे टेम्प्लेट के लिए हमें एक फॉर्म ऑब्जेक्ट प्रदान करने की आवश्यकता होती है, इसलिए हमें एक बनाने की आवश्यकता होगी। सुनिश्चित नहीं हैं कि Django फॉर्म क्या हैं? चैटजीपीटी पढ़ें इसे समझाएं - Django फॉर्म, Django फ्रेमवर्क में एक मॉड्यूल है जिसका उपयोग HTML फॉर्म बनाने और काम करने के लिए किया जाता है। वे सादे HTML रूपों का उपयोग करने पर कई लाभ प्रदान करते हैं: HTML का स्वचालित प्रतिपादन। आप एक Django फॉर्म क्लास को परिभाषित करते हैं, और Django इसे एक HTML फॉर्म के रूप में प्रस्तुत करता है। डेटा का सत्यापन। Django फॉर्म सबमिट किए गए डेटा को मान्य करता है और सहेजने से पहले इसे साफ़ करता है। डेटा को प्रपत्रों से बाइंड करना। आप संपादन के लिए उपयोगकर्ता को प्रदर्शित करने के लिए मौजूदा डेटा को एक फॉर्म में बाँध सकते हैं। अनुशंसाकर्ता की ऐप निर्देशिका के अंदर नाम की एक फ़ाइल बनाएँ। इसमें निम्न कोड जोड़ें। forms.py from django import forms class MovieSearchForm(forms.Form): imdb_rating = forms.DecimalField(min_value=0.1, max_value=9.9, required=True, label='Minimum IMDB Rating') release_year = forms.IntegerField(required=True) हमने अभी जो किया वह हमारे मूवी सर्च फॉर्म के लिए एक फॉर्म क्लास बनाया गया है। इस फॉर्म में कक्षा में बताए अनुसार दो फील्ड होंगे। यदि आप प्रपत्रों के बारे में अधिक जानना चाहते हैं, देखें। तो इसे इंडेक्स व्यू को अपडेट करना टेम्प्लेट सेट के लिए आवश्यक सभी चीजों के साथ, अब हमें इस नए बनाए गए टेम्प्लेट का उपयोग करने के लिए अपनी व्यू मेथड को अपडेट करना होगा। from .forms import MovieSearchForm # We use a hard-code list here, we will make it dynamic in subsequent parts featured_movie_list = [ { "img_src": "https://images.thedirect.com/media/article_full/amazing-spider-man-3-andrew-garfield-movie-mcu.jpg", "img_alt": "...", "active": True }, { "img_src": "https://static1.colliderimages.com/wordpress/wp-content/uploads/2022/11/avatar-the-way-of-water-poster.jpg", "img_alt": "...", "active": False } ] def index(request): context = { "featured_movies": featured_movie_list, "form": MovieSearchForm() } return render(request, 'index.html', context) अपना सर्वर शुरू करें, और । आपको निम्न पृष्ठ देखना चाहिए। localhost:8000 ब्राइटडाटा से आईएमडीबी डेटा सभी दृश्यों, यूआरएल, टेम्पलेट्स और रूपों के साथ, अब हम उस डेटा पर विचार कर सकते हैं जिस पर हमारा आवेदन काम करेगा। हमारे कार्यक्रम के लिए कई रेटिंग एजेंसियों (आईएमडीबी, के साथ शुरू करने के लिए) से डेटा की आवश्यकता होगी। दुर्भाग्य से, कोई अच्छी तरह से परिभाषित एपीआई नहीं है जिसके माध्यम से हम इस डेटा को पुनः प्राप्त कर सकें। इस जानकारी को प्राप्त करने का एक तरीका पायथन सेलेनियम का उपयोग करके अपने स्वयं के स्क्रेपर्स बनाना है। हालाँकि, इसके लिए अधिक काम की आवश्यकता होगी, और हर कोई ऐसी तकनीकों के साथ सहज नहीं है। एक बेहतर समाधान तृतीय-पक्ष सेवाओं जैसे BrightData का उपयोग करना है। BrightData इस सारी जानकारी को प्राप्त करना आसान बनाता है। इस पहले भाग के लिए, हम BrightData से प्री-क्यूरेटेड IMDB डेटासेट का उपयोग करेंगे। यह उन अनेक डेटासेटों में से एक है जो BrightData पर उपलब्ध हैं। इस तरह हम इसे प्राप्त कर सकते हैं। ब्राइटडाटा पर एक खाते के लिए साइन अप करें। (1) या तो ब्राउज़र से पर जाएं या बाईं ओर से मेनू खोलें। (2) brightdata.com/cp/datasets Datasets & WebScraper IDE डेटासेट मार्केटप्लेस पर जाएँ, और खोजें। (3) IMDB media dataset डेटासेट देखें पर क्लिक करें, और नमूना डेटासेट CSV प्रारूप में डाउनलोड करें। (4) एक बार डाउनलोड हो जाने के बाद, फ़ाइल का नाम बदलकर कर दें, और इसे फ़ोल्डर के अंदर रखें। इस नमूना CSV में 1000+ फिल्मों के लिए 28 IMDB विशेषताएँ हैं। हमारा आवेदन इस भाग के लिए IMDB डेटासेट पर काम करेगा। IMDB.csv recommender/static फॉर्म सबमिशन प्राप्त करने के लिए इंडेक्स व्यू को अपडेट करना आइए खोज अनुरोधों को संसाधित करने के लिए दृश्य विधि को अपडेट करें। प्रपत्र से सभी खोज अनुरोध POST अनुरोध के रूप में आते हैं। यह पुष्टि करने के बाद कि फ़ॉर्म ठीक से भरा हुआ है, हम डाउनलोड की गई CSV फ़ाइल से सभी फ़िल्मों को सूचीबद्ध करेंगे और फ़िल्टर मानदंड से मेल नहीं खाने वाली फ़िल्मों को फ़िल्टर कर देंगे। यहाँ अद्यतन कोड कैसा दिखता है। def index(request): if request.method == 'POST': form = MovieSearchForm(request.POST) if form.is_valid(): movie_list = _getIMDBMovieDataList() filtered_movie_list = _filter_imdb_movie_list(movie_list, form) context = { "featured_movies": featured_movie_list, "form": MovieSearchForm(), "filtered_movie_list": filtered_movie_list, "no_result_error": len(filtered_movie_list)==0 } return render(request, 'index.html', context) context = { "featured_movies": featured_movie_list, "form": MovieSearchForm() } return render(request, 'index.html', context) विधियों का कार्यान्वयन और Django के लिए विशिष्ट नहीं है और केवल शुद्ध पायथन है। इसलिए मैं यहां उसके बारे में बात करना छोड़ देता हूं। संपूर्ण फ़ाइल पाई जा सकती है। _getIMDBMovieDataList _filter_imdb_movie_list views.py यहां अंतिम उत्पाद इस मुकाम पर पहुंचने के लिए बधाई। यदि आपने सभी चरणों का ठीक से पालन किया है, तो आप सर्वर को चलाने और यूआई के माध्यम से खोज करने में सक्षम होंगे। यहां बताया गया है कि खोज परिणाम कैसे दिखेंगे। इस श्रृंखला के लिए कोड इस श्रृंखला के एक भाग के रूप में बनाए गए सभी कोड GitHub रिपॉजिटरी पर उपलब्ध होंगे। इस भाग का अंतिम परिणाम नाम की शाखा में समाहित है। इस Part1 इस रेपो पर मौजूद कोड के साथ अपने कोड को क्रॉस-चेक करना हमेशा एक अच्छा विचार है, यह जांचने के लिए कि क्या कुछ गलत है। समापन टिप्पणी इसी के साथ, हम इस तीन-भाग की श्रृंखला के पहले भाग के अंत में आ गए हैं। अगले भाग में, हम अन्य रेटिंग एजेंसियों से डेटा एकत्र करने के लिए BrightData की WebScraper IDE का उपयोग करेंगे। फिर हम अपने प्रपत्र को अपडेट करेंगे, इस प्रकार उपयोगकर्ताओं को अधिक जटिल खोज करने की अनुमति देंगे। हम हिंडोला घटक को गतिशील भी बनाएंगे! अगली बार मिलते हैं... तब तक, हैप्पी लर्निंग! 🙂