paint-brush
फ़्लिक्स-फाइंडर: Django और BrightData [भाग 1/3] के साथ मूवी अनुशंसा ऐप बनानाद्वारा@infinity
3,337 रीडिंग
3,337 रीडिंग

फ़्लिक्स-फाइंडर: Django और BrightData [भाग 1/3] के साथ मूवी अनुशंसा ऐप बनाना

द्वारा Rishabh Agarwal9m2023/06/22
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

Django एप्लिकेशन अपने उपयोगकर्ता को कई रेटिंग एजेंसियों की रेटिंग के आधार पर फिल्मों को फ़िल्टर करने की अनुमति देगा। हम अपने एप्लिकेशन के लिए आवश्यक डेटा प्राप्त करने के लिए BrightData की सेवाओं का उपयोग करेंगे। आइए Django को स्थापित करके और अपने Django प्रोजेक्ट को स्थापित करके फ़्लिक्स-फाइंडर का निर्माण शुरू करें।
featured image - फ़्लिक्स-फाइंडर: Django और BrightData [भाग 1/3] के साथ मूवी अनुशंसा ऐप बनाना
Rishabh Agarwal HackerNoon profile picture

क्या आपने कभी यह तय करने में संघर्ष किया है कि आगे कौन सा टीवी शो या फिल्म देखी जाए? अपनी अगली बिंज-वॉच के बारे में निर्णय लेना कभी भी आसान नहीं होता क्योंकि विभिन्न स्ट्रीमिंग प्रदाताओं पर बहुत सारे विकल्प उपलब्ध हैं।


अपनी अगली फिल्म का निर्णय लेते समय, हम मुख्य रूप से कई रेटिंग एजेंसियों (जैसे आईएमडीबी) की समीक्षाओं और रेटिंग पर भरोसा करते हैं। हालाँकि, इन संस्थानों की प्रचुरता को देखते हुए किस रेटिंग पर विश्वास करना मुश्किल हो सकता है।


ऐसा कहने के बाद, इन संगठनों में से कई से अच्छे अंक प्राप्त करने वाली फिल्म को देखना अक्सर सुरक्षित होता है। लेकिन क्या ऐसी फिल्म ढूंढ़ना मुश्किल नहीं है? हां यह है!


इस तीन-ब्लॉग श्रृंखला में, हम इस सटीक समस्या को हल करने के लिए एक सॉफ्टवेयर समाधान तैयार करेंगे! यह 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 रूपों का उपयोग करने पर कई लाभ प्रदान करते हैं:

  • 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 खोजें।


(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 फ़ाइल यहां पाई जा सकती है।

अंतिम उत्पाद

इस मुकाम पर पहुंचने के लिए बधाई। यदि आपने सभी चरणों का ठीक से पालन किया है, तो आप सर्वर को चलाने और यूआई के माध्यम से खोज करने में सक्षम होंगे। यहां बताया गया है कि खोज परिणाम कैसे दिखेंगे।


न्यूनतम आईएमडीबी रेटिंग 8.0 और रिलीज वर्ष 2022 के लिए खोज परिणाम दिखाने वाला वेब पेज।


इस श्रृंखला के लिए कोड

इस श्रृंखला के एक भाग के रूप में बनाए गए सभी कोड इस GitHub रिपॉजिटरी पर उपलब्ध होंगे। इस भाग का अंतिम परिणाम Part1 नाम की इस शाखा में समाहित है।


रेपो पर मौजूद कोड के साथ अपने कोड को क्रॉस-चेक करना हमेशा एक अच्छा विचार है, यह जांचने के लिए कि क्या कुछ गलत है।


समापन टिप्पणी

इसी के साथ, हम इस तीन-भाग की श्रृंखला के पहले भाग के अंत में आ गए हैं। अगले भाग में, हम अन्य रेटिंग एजेंसियों से डेटा एकत्र करने के लिए BrightData की WebScraper IDE का उपयोग करेंगे। फिर हम अपने प्रपत्र को अपडेट करेंगे, इस प्रकार उपयोगकर्ताओं को अधिक जटिल खोज करने की अनुमति देंगे।


हम हिंडोला घटक को गतिशील भी बनाएंगे!


अगली बार मिलते हैं... तब तक, हैप्पी लर्निंग! 🙂