HomeBlogTranscribePlansAPI Keys

Ruby의 YouTube 스크립트: Net::HTTP 및 Zero Gems

표준 라이브러리를 사용하여 YouTube 스크립트 응답을 파싱하는 Ruby 스크립트

Ruby의 반사는 코드를 작성하기 전에 bundle add something입니다. 5분 동안 저항하세요: Ruby에서 YouTube 스크립트를 가져오는 것은 표준 라이브러리 외부에서 아무것도 필요하지 않습니다. API는 JSON을 반환하는 HTTPS GET 1개이고, net/http 더하기 json은 오래전부터 모든 Ruby 설치에 앉아있기 때문입니다. 이 게시물이 끝나면 모든 YouTube URL을 가져와 비디오 제목과 스크립트를 인쇄하는 스크립트가 있으며, API가 반환하는 모든 오류를 다루는 case 문과 빈 Gemfile이 있습니다.

예, Net::HTTP의 인터페이스는 평판만큼 투박합니다. 여전히 20줄일 뿐입니다.

스크립트

require "net/http"
require "json"
require "uri"

uri = URI("https://youtube2text.org/api/transcribe")
uri.query = URI.encode_www_form(
  url: "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
)

req = Net::HTTP::Get.new(uri)
req["x-api-key"] = ENV.fetch("YT2TEXT_KEY")

res = Net::HTTP.start(uri.hostname, uri.port,
                      use_ssl: true, read_timeout: 60) do |http|
  http.request(req)
end

data = JSON.parse(res.body)

if res.is_a?(Net::HTTPSuccess)
  transcript = data["result"]
  puts transcript["title"]
  puts "#{transcript['contentSize']} chars, truncated: #{transcript['truncated']}"
  puts transcript["content"][0, 400]
else
  err = data["error"]
  case err["code"]
  when "RATE_LIMIT_EXCEEDED"
    puts "Rate limited. Retry in #{err['retryAfterSeconds']}s."
  when "TRANSCRIPT_UNAVAILABLE"
    puts "No captions on this video. Skip it."
  when "VIDEO_NOT_FOUND", "INVALID_URL"
    puts "Bad video reference: #{err['message']}"
  else
    abort "#{err['code']}: #{err['message']}"
  end
end

url 매개변수는 관대합니다. 전체 시청 URL, youtu.be 짧은 링크, shorts 또는 11자 비디오 ID가 모두 작동합니다. 스크립트가 LLM 프롬프트로 향하고 있고 3시간 팟캐스트 비용의 토큰을 지불하지 않으려면 encode_www_formmaxChars: 20000을 추가합니다. 150000은 기본값이고 최대값입니다.

코드베이스에 이미 Faraday 또는 httparty가 있으면 좋습니다. 사용하세요. 요청은 동일한 3가지 성분입니다: 엔드포인트, 쿼리 문자열 및 하나의 헤더. 그런데, req["Authorization"] = "Bearer #{key}"는 베어러 토큰이 설정에 더 잘 맞으면 x-api-key와 동일하게 작동합니다.

한 명령 안의 키

curl https://youtube2text.org/api/demo-key

이는 계정 없음, 이메일 없음, 아무것도 없이 {"success":true,"apiKey":"yt_..."}를 반환합니다. 캐치: 모든 익명 사용자를 위한 하나의 공유 키이며 IP당 월 5개 비디오로 제한됩니다. 스크립트가 작동하는지 확인하는 데 좋지만 배포하는 모든 것이 잘못되었습니다.

스크립트가 실제로 무엇인가

여기서 명확한 눈을 가질 가치가 있습니다: 텍스트는 YouTube의 캡션 트랙에서 나옵니다. 수동으로 업로드된 캡션은 아름답게 읽히고, 자동 생성된 것은 가끔 전문 용어와 제품 이름을 망치며, 어떤 API도 업스트림에서 그것을 할 수 없습니다. 영어 트랙이 선호되고, 첫 번째 사용 가능한 언어로 폴백됩니다. 캡션이 비활성화된 비디오는 TRANSCRIPT_UNAVAILABLE을 반환합니다. 위의 case 분기는 재시도가 아닌 건너뛰기로 취급합니다. 캡션이 없는 비디오를 재시도하는 것은 아무것도 달성하지 않을 수 있는 매우 인내심 있는 방법이기 때문입니다.

Rubyist가 이것을 가져가는 곳

내가 가장 많이 보는 패턴은 배치 처리입니다: 채널의 비디오 ID를 루프, 각 스크립트를 가져오기, 다운스트림으로 공급합니다. 학생들은 강의 비디오를 공부 노트로 변환; 다운스트림이 Claude이면 Claude의 무료 스크립트 연습이 사용자 지정 글루 없이 둘을 연결합니다. PHP에서 동일한 엔드포인트는 거의 줄 대 줄로 동일합니다. 비교는 여기 팀이 둘 다 실행하는 경우.

공유 데모 키가 고갈되면 youtube2text.org/app/keys에서 Google으로 로그인하세요. 전화 없음, 카드 없음. 월 5개 비디오에서 자신의 무료 키를 받습니다. $5.99부터 50까지, $19.99 무제한까지의 유료 계층. 스크립트는 변경되지 않습니다. ENV["YT2TEXT_KEY"]는.