YouTube ट्रांसक्रिप्ट API काम नहीं कर रहा? डायग्नोस्टिक चेकलिस्ट
ट्रांसक्रिप्ट रिक्वेस्ट फेल होने की हर असली वजह, ओपन-सोर्स कम्युनिटी के अपने सबसे ज़्यादा चर्चित इशूज़ पर आधारित - अंदाज़े पर नहीं - साथ ही हर एक के लिए सटीक एरर कोड और फिक्स।
डायग्नोस्टिक चेकलिस्ट
अपने एरर कोड (या रिस्पॉन्स के फॉर्मैट) को नीचे दी टेबल से मिलाएं।
| कोड | इसका मतलब | क्या करें |
|---|---|---|
MISSING_URL / INVALID_URL · 400 | v पैरामीटर मिसिंग है, या यह ऐसा वीडियो ID/URL नहीं है जिसे YouTube पहचानता हो। | एक वैध 11-कैरेक्टर वीडियो ID दें या पूरा youtube.com/watch?v=... URL। |
VIDEO_UNAVAILABLE · 404 | वीडियो प्राइवेट है, डिलीट हो चुका है, या रीजन-लॉक्ड है - सर्वर के नज़रिए से इसका अस्तित्व ही नहीं है। | पहले कन्फर्म करें कि वीडियो सामान्य ब्राउज़र में लोड होता है। अगर नहीं होता, तो API के पास लाने के लिए कुछ नहीं है। |
TRANSCRIPT_DISABLED · 404 | आमतौर पर मतलब है कि अपलोडर ने कैप्शन बंद कर दिए हैं - लेकिन रीजन-लॉक और IP ब्लॉक भी बिल्कुल वैसा ही दिखने वाला एरर दे सकते हैं। | इसे स्थायी मान लेने से पहले नीचे दिया नोट देखें। |
LANGUAGE_NOT_AVAILABLE · 404 | वीडियो में कैप्शन हैं, बस जिस भाषा में आपने मांगे वो नहीं। | भाषा पैरामीटर हटाकर जो भी उपलब्ध है वो पाएं, या पहले वीडियो की अपनी कैप्शन लिस्ट देखें। |
TRANSCRIPT_NOT_FOUND · 404 | इस वीडियो के लिए किसी भी भाषा में ट्रांसक्रिप्ट मौजूद नहीं है। | कैप्शन बंद होने जैसा ही मामला - लाने के लिए कुछ नहीं। हर वीडियो में यह नहीं होता। |
RATE_LIMITED · 429 | आपकी API की ने आपके प्लान की प्रति-मिनट लिमिट से ज़्यादा रिक्वेस्ट भेजीं। | थोड़ा धीमा करें और फिर कोशिश करें, या ज़्यादा रेट लिमिट के लिए अपग्रेड करें। |
UPSTREAM_* · 429/503/504 | खुद YouTube से बात करते समय एक अस्थायी दिक्कत, आपकी की या रिक्वेस्ट की नहीं। | थोड़ी देर बाद दोबारा कोशिश करना सुरक्षित है - बिल्कुल वही तरह की गड़बड़ी जिसे एक होस्टेड API खुद संभाल लेता है। |
"ट्रांसक्रिप्ट डिसेबल्ड" का मतलब हमेशा डिसेबल्ड नहीं होता
ओपन-सोर्स youtube-transcript-api के पूरे इतिहास में सबसे ज़्यादा चर्चित इशू (187 कमेंट्स) है एक स्क्रिप्ट का किसी ऐसे वीडियो के लिए "TranscriptsDisabled" देना जो असल में डिसेबल्ड नहीं है - वह सामान्य ब्राउज़र में बिना किसी दिक्कत के कैप्शन दिखाता है। तीन अलग-अलग असली वजहें लगभग एक जैसा दिखने वाला एरर पैदा करती हैं:
- सच में डिसेबल्ड - अपलोडर ने कैप्शन बंद कर दिए। किसी भी भाषा में लाने के लिए कुछ नहीं।
- रीजन-लॉक्ड - वीडियो या उसके कैप्शन आपके सर्वर के देश से उपलब्ध नहीं हैं, लेकिन किसी दूसरे रीजन के ब्राउज़र से काम करते हैं।
- IP-ब्लॉक्ड - YouTube किसी खास वजह की बजाय एक जेनरिक फेलियर देता है, और असली वजह नीचे दिया क्लाउड-होस्टिंग वाला मसला है।
एक साफ एक्सेप्शन की बजाय कच्चा XML पार्स एरर ("no element found", "line 1, column 0") भी उसी परिवार की समस्या है - एक खाली रिस्पॉन्स बॉडी, आमतौर पर वही नीचे दी IP-ब्लॉकिंग या PoToken वाली वजह, पार्सिंग कोड में कोई बग नहीं।
AWS, GCP, Azure, या VPS पर ब्लॉक हो गया?
अगर कोई स्क्रिप्ट आपके लैपटॉप पर एकदम ठीक चलती है और क्लाउड सर्वर पर डिप्लॉय होते ही फेल हो जाती है, तो लगभग हमेशा यही वजह है: YouTube का कैप्शन-फेच एंडपॉइंट अकेले किसी बुरे व्यवहार वाली IP को नहीं, बल्कि पूरी डेटासेंटर IP रेंज को ब्लॉक करता है। हर बड़े क्लाउड प्रोवाइडर की IP रेंज आखिरकार इसकी चपेट में आती है, क्योंकि हज़ारों असंबंधित स्क्रिप्ट्स एक ही एड्रेस रेंज शेयर करती हैं।
Could not retrieve a transcript for the video https://www.youtube.com/watch?v=...!
This is most likely caused by:
YouTube is blocking requests from your IP.इससे बचने के व्यावहारिक तरीके, मेहनत के हिसाब से क्रम में:
- रिक्वेस्ट को रेजिडेंशियल या मोबाइल प्रॉक्सी पूल से भेजें - कभी-कभी काम करता है, लेकिन पेड रोटेटिंग-रेजिडेंशियल सेटअप के भी फेल होने की रिपोर्ट्स बढ़ती जा रही हैं। स्थायी फिक्स नहीं।
- कई क्लाउड प्रोवाइडर या रीजन के बीच रोटेट करें - जब तक वो रेंज भी फ्लैग न हो जाएं, तब तक समय मिल जाता है।
- आक्रामक तरीके से कैश करें ताकि वही वीडियो बार-बार न फेच करने पड़ें - ब्लॉक कितनी बार लगता है यह घटाता है, इसे खत्म नहीं करता।
- एक होस्टेड API इस्तेमाल करें जो पहले से यह इन्फ्रास्ट्रक्चर चलाता है - समस्या 'आपके प्रोजेक्ट' से हटकर 'किसी ऐसे व्यक्ति' के पास चली जाती है जिसका असली काम ही इसे चालू रखना है।
यही असली कमी है जिसे हमारा अपना YouTube ट्रांसक्रिप्ट API भरता है - कोई अलग लाइब्रेरी नहीं, बल्कि ठीक इसी समस्या के लिए पहले से बना इन्फ्रास्ट्रक्चर।
PoTokenRequired मिल रहा है?
एक नई तरह की गड़बड़ी: YouTube का कैप्शन एंडपॉइंट अब बढ़ते हुए एक प्रूफ-ऑफ-ओरिजिन टोकन मांगता है जो रनटाइम पर उसके अपने प्लेयर JavaScript से बनता है - न कोई कुकी, न IP रेप्युटेशन चेक, बल्कि एक क्रिप्टोग्राफिक वैल्यू। एक सादा HTTP रिक्वेस्ट इसे बनाने का कोई तरीका नहीं रखती।
असली टेक्निकल डिटेल jdepoix/youtube-transcript-api#592 में देखें - उस रिपोर्ट के मुताबिक, ओपन-सोर्स लाइब्रेरी में इसका कोई डॉक्यूमेंटेड तरीका मौजूद नहीं है।
यह ठीक वही तरह की समस्या है जिसे एक होस्टेड API संभालने के लिए बनाया जाता है - एक एंडपॉइंट कॉल करें और खुद टोकन जनरेट करने की समस्या सुलझाए बिना ट्रांसक्रिप्ट या एक साफ एरर पाएं।
हर फेलियर पर हमारी अपनी API क्या लौटाती है
अगर आप पहले से हमारी API इस्तेमाल कर रहे हैं और सिर्फ HTTP स्टेटस से अंदाज़ा लगाने की बजाय सटीक फेलियर पर आधारित लॉजिक बनाना चाहते हैं, तो हर एरर एक स्थिर `code` फील्ड के साथ आता है:
curl "https://getyoutubetranscript.com/api/v1/transcript?v=dQw4w9WgXcQ" \
-H "Authorization: Bearer sk_live_..."
# A failure looks like:
# { "success": false, "code": "TRANSCRIPT_DISABLED", "message": "Transcripts are disabled for this video." }पूरा पैरामीटर रेफरेंस और हर स्टेटस कोड API डॉक्स में है।
आम YouTube ट्रांसक्रिप्ट API एरर
मुझे 'YouTube is blocking requests from your IP' क्यों मिलता है?
आप YouTube के कैप्शन एंडपॉइंट को क्लाउड/डेटासेंटर IP एड्रेस (AWS, GCP, Azure, एक VPS...) से कॉल कर रहे हैं, और YouTube होम/रेजिडेंशियल IP से ज़्यादा सख्ती से इन रेंज को ब्लॉक करता है। यह आमतौर पर निजी नहीं होता - यह पूरी IP रेंज है, जो हज़ारों दूसरी स्क्रिप्ट्स के साथ शेयर होती है।
मेरी स्क्रिप्ट लोकल में क्यों चलती है पर डिप्लॉय के बाद फेल हो जाती है?
आपके लैपटॉप की IP रेजिडेंशियल है; आपके सर्वर की IP डेटासेंटर वाली है। वही कोड, अलग नेटवर्क रेप्युटेशन - खुद अपनी YouTube ट्रांसक्रिप्ट लाइब्रेरी होस्ट करने वालों के लिए "यहां चलता है, वहां फेल होता है" की सबसे आम वजह।
'ट्रांसक्रिप्ट डिसेबल्ड' कभी-कभी गलत क्यों निकलता है?
क्योंकि YouTube हमेशा कोई खास वजह नहीं बताता - एक रीजन लॉक या IP ब्लॉक वही जेनरिक एरर दे सकता है जो सच में डिसेबल्ड वीडियो देता है। इसे स्थायी रूप से अनुपलब्ध मान लेने से पहले चेक करें कि क्या वीडियो किसी दूसरे नेटवर्क से सामान्य ब्राउज़र में कैप्शन दिखाता है।
PoTokenRequired क्या है?
YouTube का रनटाइम पर असली प्लेयर JavaScript से जनरेट होने वाला प्रूफ-ऑफ-ओरिजिन टोकन मांगना, कोई स्टैटिक वैल्यू नहीं जिसे हार्डकोड या एक बार निकाला जा सके। सादे HTTP रिक्वेस्ट - और ज़्यादातर स्क्रैपिंग लाइब्रेरीज़ - के पास इसे जनरेट करने का कोई तरीका नहीं, इसलिए फिलहाल ओपन-सोर्स लाइब्रेरी में इसका कोई डॉक्यूमेंटेड तरीका नहीं है।
जिस भाषा में मैंने मांगा उसमें ट्रांसक्रिप्ट क्यों नहीं है?
वीडियो में कैप्शन हैं, बस उस भाषा में नहीं। भाषा पैरामीटर के बिना रिक्वेस्ट करें ताकि जो उपलब्ध है वो मिले, या पहले चेक करें कि कौन-सी भाषाएं मौजूद हैं।
रेट लिमिट से कैसे बचें?
दो अलग-अलग लिमिट हैं: आपके अपने प्लान की प्रति-मिनट रिक्वेस्ट कैप (ज़्यादा के लिए अपग्रेड करें), और खुद YouTube की अपस्ट्रीम लिमिट (थोड़ी देर बाद दोबारा कोशिश करना सुरक्षित है - एक होस्टेड API इसका ज़्यादातर हिस्सा आपकी तरफ से संभाल लेता है)।