API Chép Lời YouTube không hoạt động? Danh sách chẩn đoán

Mọi lý do thực sự khiến yêu cầu chép lời thất bại, được xây dựng từ chính những issue được thảo luận nhiều nhất của cộng đồng mã nguồn mở - không phải đoán mò - cùng mã lỗi chính xác và cách khắc phục cho từng trường hợp.

Danh sách chẩn đoán

Đối chiếu mã lỗi của bạn (hoặc hình dạng phản hồi) với bảng dưới đây.

MãÝ nghĩaCách xử lý
MISSING_URL / INVALID_URL · 400Thiếu tham số v, hoặc không phải ID/URL video mà YouTube nhận ra.Truyền một ID video hợp lệ gồm 11 ký tự hoặc URL đầy đủ youtube.com/watch?v=...
VIDEO_UNAVAILABLE · 404Video ở chế độ riêng tư, đã bị xóa, hoặc bị khóa theo khu vực - nó không tồn tại theo góc nhìn của máy chủ.Trước tiên hãy xác nhận video tải được trên trình duyệt bình thường. Nếu không, không có gì để API lấy được.
TRANSCRIPT_DISABLED · 404Thường có nghĩa là người tải lên đã tắt phụ đề - nhưng khóa theo khu vực và chặn IP cũng có thể tạo ra lỗi trông giống hệt.Xem phần lưu ý bên dưới trước khi cho rằng đây là vĩnh viễn.
LANGUAGE_NOT_AVAILABLE · 404Video có phụ đề, chỉ là không phải ngôn ngữ bạn yêu cầu.Bỏ tham số ngôn ngữ để lấy bất kỳ thứ gì có sẵn, hoặc kiểm tra trước danh sách phụ đề của chính video.
TRANSCRIPT_NOT_FOUND · 404Không có bản chép lời ở bất kỳ ngôn ngữ nào cho video này.Giống như phụ đề bị tắt - không có gì để lấy. Không phải video nào cũng có.
RATE_LIMITED · 429Khóa API của bạn đã gửi nhiều yêu cầu hơn giới hạn mỗi phút mà gói của bạn cho phép.Giảm tốc độ và thử lại, hoặc nâng cấp lên giới hạn tốc độ cao hơn.
UPSTREAM_* · 429/503/504Một sự cố tạm thời khi giao tiếp với chính YouTube, không phải khóa hay yêu cầu của bạn.An toàn để thử lại sau một khoảng chờ ngắn - chính xác là loại lỗi mà một API được lưu trữ sẽ hấp thụ thay bạn.

"Chép lời bị vô hiệu hóa" không phải lúc nào cũng có nghĩa là bị vô hiệu hóa

Issue được thảo luận nhiều nhất trong toàn bộ lịch sử của youtube-transcript-api mã nguồn mở (187 bình luận) là một script báo lỗi "TranscriptsDisabled" cho một video thực ra không hề bị vô hiệu hóa - nó phát phụ đề bình thường trên trình duyệt thông thường. Ba nguyên nhân thực sự khác nhau tạo ra một lỗi gần như giống hệt nhau:

  • Thực sự bị vô hiệu hóa - người tải lên đã tắt phụ đề. Không có gì để lấy, ở bất kỳ ngôn ngữ nào.
  • Bị khóa theo khu vực - video hoặc phụ đề của nó không khả dụng từ quốc gia của máy chủ bạn, nhưng hoạt động từ trình duyệt ở khu vực khác.
  • Bị chặn IP - YouTube trả về một lỗi chung chung thay vì cụ thể, và nguyên nhân thực sự là vấn đề lưu trữ đám mây bên dưới.

Một lỗi phân tích XML thô ("no element found", "line 1, column 0") thay vì một ngoại lệ rõ ràng cũng thuộc cùng nhóm vấn đề - phần thân phản hồi trống, thường do cùng nguyên nhân chặn IP hoặc PoToken bên dưới, không phải lỗi trong chính mã phân tích.

Bị chặn trên AWS, GCP, Azure, hoặc VPS?

Nếu một script chạy hoàn hảo trên laptop của bạn rồi thất bại ngay khi được triển khai lên máy chủ đám mây, gần như luôn là vì lý do này: endpoint lấy phụ đề của YouTube chặn toàn bộ dải IP của trung tâm dữ liệu, không chỉ những IP riêng lẻ lạm dụng. Không gian IP của mọi nhà cung cấp đám mây lớn cuối cùng đều bị ảnh hưởng, vì hàng nghìn script không liên quan chia sẻ cùng dải địa chỉ.

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.

Các cách thực tế để khắc phục, xếp gần đúng theo mức độ công sức:

  • Định tuyến yêu cầu qua một pool proxy dân dụng hoặc di động - đôi khi hiệu quả, nhưng ngày càng có nhiều báo cáo rằng ngay cả các thiết lập proxy dân dụng xoay vòng trả phí vẫn thất bại. Không phải giải pháp vĩnh viễn.
  • Xoay vòng giữa nhiều nhà cung cấp đám mây hoặc khu vực - mua thêm thời gian cho đến khi các dải đó cũng bị đánh dấu.
  • Cache mạnh để không phải lấy lại cùng một video - giảm tần suất bị chặn, không loại bỏ hoàn toàn.
  • Dùng một API được lưu trữ đã vận hành sẵn hạ tầng này - vấn đề chuyển từ 'dự án của bạn' sang 'ai đó có công việc thực sự là giữ cho nó hoạt động'.

Đó chính là khoảng trống thực sự mà API Chép Lời YouTube của chúng tôi lấp đầy - không phải một thư viện khác, mà là hạ tầng đã được xây dựng riêng cho vấn đề này.

Bạn gặp lỗi PoTokenRequired?

Một kiểu lỗi mới hơn: endpoint phụ đề của YouTube ngày càng yêu cầu một token chứng minh nguồn gốc được tạo ra tại thời điểm chạy bởi chính JavaScript trình phát của nó - không phải cookie, không phải kiểm tra uy tín IP, mà là một giá trị mật mã học. Một yêu cầu HTTP đơn thuần không có cách nào tạo ra nó.

Xem chi tiết kỹ thuật thực tế tại jdepoix/youtube-transcript-api#592 - tính đến báo cáo đó, không có cách khắc phục nào được ghi lại trong thư viện mã nguồn mở.

Đây chính xác là loại vấn đề mà một API được lưu trữ được tạo ra để hấp thụ - gọi một endpoint và nhận lại bản chép lời hoặc một lỗi rõ ràng, mà không cần tự giải quyết việc tạo token.

API của chúng tôi trả về gì cho mỗi lỗi

Nếu bạn đã dùng API của chúng tôi và muốn phân nhánh theo lỗi chính xác thay vì đoán chỉ từ trạng thái HTTP, mọi lỗi đều trả về kèm một trường `code` ổn định:

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." }

Tài liệu tham khảo tham số đầy đủ và mọi mã trạng thái đều có trong tài liệu API.

Các lỗi API Chép Lời YouTube thường gặp

Tại sao tôi gặp lỗi 'YouTube is blocking requests from your IP'?

Bạn đang gọi endpoint phụ đề của YouTube từ một địa chỉ IP đám mây/trung tâm dữ liệu (AWS, GCP, Azure, VPS...), và YouTube chặn các dải đó gắt gao hơn IP gia đình/dân dụng. Thường không phải chuyện cá nhân - đó là toàn bộ dải IP, được chia sẻ với hàng nghìn script khác.

Tại sao script của tôi chạy được ở local nhưng thất bại sau khi triển khai?

Laptop của bạn có IP dân dụng; máy chủ của bạn có IP trung tâm dữ liệu. Cùng một đoạn code, danh tiếng mạng khác nhau - nguyên nhân phổ biến nhất của "chạy được ở đây, thất bại ở kia" đối với bất kỳ ai tự lưu trữ thư viện chép lời YouTube.

Tại sao 'phụ đề bị vô hiệu hóa' đôi khi lại sai?

Vì YouTube không phải lúc nào cũng trả về lý do cụ thể - khóa khu vực hoặc chặn IP có thể tạo ra cùng một lỗi chung chung như một video thực sự bị vô hiệu hóa. Hãy kiểm tra xem video có phát phụ đề trên trình duyệt bình thường từ một mạng khác hay không trước khi cho rằng nó không khả dụng vĩnh viễn.

PoTokenRequired là gì?

YouTube yêu cầu một token chứng minh nguồn gốc được tạo bởi JavaScript trình phát thực tại thời điểm chạy, không phải một giá trị tĩnh mà bạn có thể mã hóa cứng hoặc trích xuất một lần. Các yêu cầu HTTP đơn thuần - và hầu hết các thư viện scraping - không có cách nào tạo ra nó, đó là lý do hiện tại không có cách khắc phục nào được ghi lại trong thư viện mã nguồn mở.

Tại sao không có bản chép lời ở ngôn ngữ tôi yêu cầu?

Video có phụ đề, chỉ là không phải ngôn ngữ đó. Hãy yêu cầu không kèm tham số ngôn ngữ để lấy bất kỳ thứ gì có sẵn, hoặc kiểm tra trước những ngôn ngữ nào tồn tại.

Làm sao để tránh giới hạn tốc độ?

Có hai giới hạn khác nhau: mức trần số yêu cầu mỗi phút của gói của bạn (nâng cấp lên mức cao hơn), và giới hạn upstream riêng của YouTube (an toàn để thử lại sau một khoảng chờ ngắn - một API được lưu trữ sẽ hấp thụ phần lớn việc này thay bạn).