HomeBlogTranscribePlansAPI Keys

Ruby 中的 YouTube 转录文本:Net::HTTP 和零 Gems

Ruby 脚本使用标准库解析 YouTube 转录文本响应

Ruby 反射是在写一行代码前 bundle add something。抵抗它五分钟:在 Ruby 中获取 YouTube 转录文本需要标准库之外的什么,因为 API 是一个返回 JSON 的 HTTPS GET,net/httpjson 在每个 Ruby 安装中已经坐了永远。到本文末尾,你会有一个脚本,需要任何 YouTube URL 并打印视频标题和转录文本,带一个 case 语句覆盖 API 返回的每个错误——和一个空 Gemfile。

是的,Net::HTTP 的接口与其声誉一样笨拙。它仍然只有二十行。

脚本

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 都有效。添加 maxChars: 20000encode_www_form 如果转录文本进入 LLM 提示并且你宁愿不为三小时播客的令牌付费;150000 是默认和最大值。

如果你的代码库已经有 Faraday 或 httparty,好的,使用它们——请求是相同的三个成分:端点、查询字符串和一个标头。说到这,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 个视频,从 50 个 5.99 美元到 19.99 美元无限的付费层。脚本不改变;ENV["YT2TEXT_KEY"] 改变。