क्या आपने कभी यह तय करने में संघर्ष किया है कि आगे कौन सा टीवी शो या फिल्म देखी जाए? अपनी अगली बिंज-वॉच के बारे में निर्णय लेना कभी भी आसान नहीं होता क्योंकि विभिन्न स्ट्रीमिंग प्रदाताओं पर बहुत सारे विकल्प उपलब्ध हैं।
अपनी अगली फिल्म का निर्णय लेते समय, हम मुख्य रूप से कई रेटिंग एजेंसियों (जैसे आईएमडीबी) की समीक्षाओं और रेटिंग पर भरोसा करते हैं। हालाँकि, इन संस्थानों की प्रचुरता को देखते हुए किस रेटिंग पर विश्वास करना मुश्किल हो सकता है।
ऐसा कहने के बाद, इन संगठनों में से कई से अच्छे अंक प्राप्त करने वाली फिल्म को देखना अक्सर सुरक्षित होता है। लेकिन क्या ऐसी फिल्म ढूंढ़ना मुश्किल नहीं है? हां यह है!
इस तीन-ब्लॉग श्रृंखला में, हम इस सटीक समस्या को हल करने के लिए एक सॉफ्टवेयर समाधान तैयार करेंगे! यह 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
निर्देशिका को नई बनाई गई परियोजना निर्देशिका flix_finder
में बदलें। अपना पसंदीदा कोड संपादक यहां खोलें। आपको Django द्वारा स्वचालित रूप से बनाई गई इस निर्देशिका में निम्न फ़ाइलों को देखना चाहिए।
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
फ़ाइलों में करते हैं।
सिफ़ारिशकर्ता ऐप के अंदर एक नई फ़ाइल बनाएँ, और इसे urls.py
नाम दें। यहां, हम URL और व्यू मेथड के बीच इस पत्राचार को निर्दिष्ट करते हैं।
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 का उपयोग करेंगे।
recommender
निदेशक के तहत एक निर्देशिका templates
बनाएँ। इस नए बनाए गए फ़ोल्डर का नाम विशेष है क्योंकि Django by-default HTML फ़ाइलों के लिए templates
नाम की निर्देशिकाओं में खोज करता है।
नई बनाई गई डायरेक्टरी के अंदर index.html
नाम की एक नई फाइल बनाएं। इस फ़ाइल के अंदर, हम उस HTML को लिखेंगे जिसे हम प्रस्तुत करना चाहते हैं जब उपयोगकर्ता localhost:8000
।
चूँकि HTML लिखना यहाँ मुख्य फोकस नहीं है, मैं उस भाग की व्याख्या करना छोड़ दूंगा और आप यहाँ से HTML को आसानी से कॉपी कर सकते हैं।
इस HTML फ़ाइल (या Django टेम्पलेट) के बारे में जानने के लिए आपको कुछ चीजें यहां दी गई हैं -
(1) यह एचटीएमएल वेबपेज पर चार चीजों को प्रदर्शित करता है - नेविगेशन बार, कैरसेल, मूवी सर्च फॉर्म और मूवी सर्च रिजल्ट।
(2) यह HTML के अंदर सीधे पायथन चर के उपयोग की अनुमति देने के लिए Django टेम्पलेट भाषा का उपयोग करता है।
(3) यह संदर्भ में featured_movies
चर की अपेक्षा करता है (डेटा टेम्पलेट को पास किया गया है) और इसका उपयोग हिंडोला प्रदर्शित करने के लिए करेगा।
(4) यह उम्मीद करता है कि form
वेरिएबल को Django फॉर्म ऑब्जेक्ट से भरा जाएगा और इसका उपयोग मूवी सर्च फॉर्म को प्रदर्शित करने के लिए करेगा।
(5) यह filtered_movie_list
चर की अपेक्षा करता है और खोज के परिणामों को प्रदर्शित करने के लिए इसका उपयोग करेगा।
(6) यह no_result_error
चर की भी अपेक्षा करता है जो इंगित करता है कि क्या खोज के परिणामस्वरूप एक खाली प्रतिक्रिया मिली।
स्टाइल के लिए हमें कुछ CSS जोड़ने की भी आवश्यकता होगी। recommender
निर्देशिका के तहत एक static
निर्देशिका बनाएँ। यह फोल्डर सभी स्टैटिक फाइल्स को होल्ड करेगा।
style.css
नामक एक नई फ़ाइल बनाएँ, और इस URL से CSS पेस्ट करें।
इसके साथ, हमारे पास सभी आवश्यक HTML और CSS मौजूद हैं। इसके बाद, हमें मूवी सर्च फॉर्म बनाने की जरूरत है।
चूँकि हमारे टेम्प्लेट के लिए हमें एक फॉर्म ऑब्जेक्ट प्रदान करने की आवश्यकता होती है, इसलिए हमें एक बनाने की आवश्यकता होगी।
सुनिश्चित नहीं हैं कि Django फॉर्म क्या हैं? चैटजीपीटी पढ़ें इसे समझाएं -
Django फॉर्म, Django फ्रेमवर्क में एक मॉड्यूल है जिसका उपयोग HTML फॉर्म बनाने और काम करने के लिए किया जाता है। वे सादे HTML रूपों का उपयोग करने पर कई लाभ प्रदान करते हैं:
अनुशंसाकर्ता की ऐप निर्देशिका के अंदर 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
खोजें।
(4) डेटासेट देखें पर क्लिक करें, और नमूना डेटासेट CSV प्रारूप में डाउनलोड करें।
एक बार डाउनलोड हो जाने के बाद, फ़ाइल का नाम बदलकर IMDB.csv
कर दें, और इसे recommender/static
फ़ोल्डर के अंदर रखें। इस नमूना CSV में 1000+ फिल्मों के लिए 28 IMDB विशेषताएँ हैं। हमारा आवेदन इस भाग के लिए IMDB डेटासेट पर काम करेगा।
आइए खोज अनुरोधों को संसाधित करने के लिए दृश्य विधि को अपडेट करें।
प्रपत्र से सभी खोज अनुरोध 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)
विधियों का कार्यान्वयन _getIMDBMovieDataList
और _filter_imdb_movie_list
Django के लिए विशिष्ट नहीं है और केवल शुद्ध पायथन है। इसलिए मैं यहां उसके बारे में बात करना छोड़ देता हूं। संपूर्ण views.py
फ़ाइल यहां पाई जा सकती है।
इस मुकाम पर पहुंचने के लिए बधाई। यदि आपने सभी चरणों का ठीक से पालन किया है, तो आप सर्वर को चलाने और यूआई के माध्यम से खोज करने में सक्षम होंगे। यहां बताया गया है कि खोज परिणाम कैसे दिखेंगे।
इस श्रृंखला के एक भाग के रूप में बनाए गए सभी कोड इस GitHub रिपॉजिटरी पर उपलब्ध होंगे। इस भाग का अंतिम परिणाम Part1
नाम की इस शाखा में समाहित है।
रेपो पर मौजूद कोड के साथ अपने कोड को क्रॉस-चेक करना हमेशा एक अच्छा विचार है, यह जांचने के लिए कि क्या कुछ गलत है।
इसी के साथ, हम इस तीन-भाग की श्रृंखला के पहले भाग के अंत में आ गए हैं। अगले भाग में, हम अन्य रेटिंग एजेंसियों से डेटा एकत्र करने के लिए BrightData की WebScraper IDE का उपयोग करेंगे। फिर हम अपने प्रपत्र को अपडेट करेंगे, इस प्रकार उपयोगकर्ताओं को अधिक जटिल खोज करने की अनुमति देंगे।
हम हिंडोला घटक को गतिशील भी बनाएंगे!
अगली बार मिलते हैं... तब तक, हैप्पी लर्निंग! 🙂