इस प्रोजेक्ट के बारे में
ClassSniper जिम क्लास बुक करने के लिए एक व्यक्तिगत ऑटोमेशन प्रोजेक्ट है, जो आरक्षण विंडो खुलते ही बुकिंग करता है। यह एक विशिष्ट जिम चेन (ऑस्ट्रेलिया में One Playground) को लक्षित करता है, जिसकी क्लास शुरू होने के ठीक 72 घंटे पहले बुकिंग के लिए खुलती हैं — एक ऐसी विंडो जहाँ लोकप्रिय स्लॉट और इंस्ट्रक्टर कुछ ही क्षणों में भर जाते हैं। यह रिपॉजिटरी एक टेम्पलेट है जिसे आप अपने स्वयं के खाते और वेन्यू के अनुसार अनुकूलित कर सकते हैं।
यह कैसे काम करता है
- एक बाहरी cron सेवा हर 60 सेकंड में रेपो के workflow_dispatch एंडपॉइंट को कॉल करती है। प्रत्येक रन यह जांचता है कि क्या किसी कतारबद्ध बुकिंग की 72-घंटे की विंडो खुल गई है।
- एक बार विंडो खुलने पर, बॉट क्लास बुक करता है: पहले एक तेज़ डायरेक्ट API पथ के माध्यम से, और यदि तेज़ पथ अनिर्णायक होता है, तो पूर्ण Playwright ब्राउज़र ऑटोमेशन का उपयोग करता है।
- एक साथी स्क्रैपर उसी अंतराल पर हर स्टूडियो लोकेशन से लाइव क्लास शेड्यूल खींचता है, ताकि वेब डैशबोर्ड वास्तविक आगामी क्लास (नाम, इंस्ट्रक्टर, शेष स्थान) दिखाए, न कि केवल एक ब्लाइंड डेट/टाइम एंट्री।
- एक सख्त सुरक्षा नियम 30 घंटे से कम समय में शुरू होने वाली किसी भी क्लास को आर्म या स्ट्राइक करने से रोकता है, क्योंकि 24 घंटे के भीतर रद्द करने पर शुल्क लगता है।
आर्किटेक्चर
यह रेपो तीन कमिटेड JSON फ़ाइलों (pending_booking.json, status.json, class_list.json) के माध्यम से सत्य के स्रोत के रूप में कार्य करता है। एक GitHub Pages डैशबोर्ड उन फ़ाइलों को सीधे पढ़ता है — सार्वजनिक, देखने के लिए किसी ऑथेंटिकेशन की आवश्यकता नहीं — और रिपॉजिटरी के लिए स्कोप किए गए फाइन-ग्रेन्ड PAT के साथ GitHub Contents API के माध्यम से आर्म/रिमूव बदलावों को वापस लिखता है। GitHub Actions शेड्यूलर चलाता है; bot/scraper.py शेड्यूल को रिफ्रेश करता है और bot/striker.py बुकिंग करता है। स्क्रीनशॉट और परिणाम स्थिति को लाइव Playwright कॉन्टेक्स्ट के अंदर से कैप्चर किया जाता है ताकि विफलताओं को रिकॉर्ड किया जा सके।
उल्लेखनीय इंजीनियरिंग विवरण
- क्लास स्पष्टीकरण: अलग-अलग क्लास अक्सर एक ही स्थान पर एक ही समय स्लॉट साझा करती हैं, इसलिए केवल तारीख और समय पर मिलान करना अस्पष्ट होता है। प्रत्येक क्लास में वेन्यू के अपने सेशन API से प्राप्त एक अद्वितीय booking_id होती है और उसका सटीक मिलान किया जाता है।
- तेज़ पथ: वेन्यू के JavaScript बंडल को पढ़ने से पता चला कि UI का "Book पर क्लिक करें → साइन इन करें → पुष्टि करें" फ्लो वास्तव में दो HTTP कॉल हैं। इन सार्वजनिक एंडपॉइंट्स को सीधे कॉल किया जाता है, जबकि ब्राउज़र फ्लो को एक टेस्टेड फॉलबैक के रूप में रखा गया है।
- टाइमिंग: स्ट्राइक के क्षण की सटीक गणना की जाती है, प्रक्रिया उसके ठीक पहले तक सोती है, लगभग पांच सेकंड पहले अपने HTTP कनेक्शन को वार्म-अप करती है, और फिर फायर करती है।
- शेड्यूलर का चुनाव: GitHub Actions शेड्यूल ट्रिगर्स 'बेस्ट-एफर्ट' होते हैं और लोड के तहत काफी दूर-दूर तक देखे गए, इसलिए हर मिनट workflow_dispatch को हिट करने वाले एक बाहरी cron का उपयोग किया जाता है; एक कॉनकरेंसी ग्रुप और fetch-rebase रिट्राय लूप git push पर दौड़ रहे ओवरलैपिंग रन्स को संभालते हैं।
- क्रेडेंशियल स्वच्छता: Playwright टाइमआउट त्रुटियों में लॉगिन ईमेल जैसे DOM मान शामिल हो सकते हैं, इसलिए लॉगिन-टाइमआउट हैंडलर एक साफ संदेश देता है, डिबग स्क्रीनशॉट दृश्य ईमेल/पासवर्ड फ़ील्ड को मास्क करते हैं, और एक रिडक्शन पास सार्वजनिक status.json में कुछ भी लिखे जाने से पहले क्रेडेंशियल मिलान को साफ करता है।
- रेट लिमिट: तेज़ पथ प्रति प्रयास अधिकतम तीन अनुरोध करता है और रिट्राय नहीं करता है, जिससे फॉलबैक लॉगिन के लिए बजट बचता है।
स्टैक और सेटअप
Python, Playwright, GitHub Actions, और GitHub Pages पर फ्रेमवर्क-मुक्त HTML/CSS/JS। इसे अनुकूलित करने के लिए रेपो को फोर्क करने, GYM_EMAIL और GYM_PASSWORD सीक्रेट्स जोड़ने, Pages और Actions को सक्षम करने, डैशबोर्ड के लिए एक फाइन-ग्रेन्ड टोकन प्रदान करने और — महत्वपूर्ण रूप से — Actions के लिए स्कोप किए गए दूसरे टोकन के साथ एक बाहरी ट्रिगर कॉन्फ़िगर करने की आवश्यकता होती है, क्योंकि अंतर्निहित cron को समय पर स्ट्राइक के लिए बहुत अविश्वसनीय बताया गया है।
स्कोप
यह प्रोजेक्ट एक एकल व्यक्तिगत खाते की अपनी बुकिंग को उस सेवा के विरुद्ध ऑटोमेट करता है जिसके लिए ऑपरेटर भुगतान करता है, और उन्हीं सार्वजनिक इंटरफेस का उपयोग करता है जिनका उपयोग सेवा की अपनी वेबसाइट करती है। यह बताता है कि यह ऑथेंटिकेशन को बायपास नहीं करता है, अन्य सदस्यों के डेटा तक नहीं पहुँचता है, या प्रलेखित रेट लिमिट से अधिक नहीं होता है। MIT के तहत लाइसेंस प्राप्त।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.