HomeBlogTranscribePlansAPI Keys

Trascrizione YouTube in Ruby: Net::HTTP e Zero Gems

Script Ruby che analizza una risposta di trascrizione YouTube con la libreria standard

Il riflesso Ruby è bundle add something prima di scrivere una riga di codice. Resistete per cinque minuti: recuperare una trascrizione YouTube in Ruby non ha bisogno di niente al di fuori della libreria standard, perché l'API è un GET HTTPS che restituisce JSON, e net/http più json sono seduti in ogni installazione Ruby dal sempre. Alla fine di questo articolo avrai uno script che prende qualsiasi URL YouTube e stampa il titolo e la trascrizione del video, con un'istruzione case che copre ogni errore che l'API restituisce — e un Gemfile vuoto.

Sì, l'interfaccia di Net::HTTP è così goffa come la sua reputazione. È ancora solo venti righe.

Lo script

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

Il parametro url è indulgente — URL watch completi, link corti youtu.be, shorts, o un ID video nudo di 11 caratteri funzionano tutti. Aggiungi maxChars: 20000 a encode_www_form se la trascrizione è diretta a un prompt LLM e preferisci non pagare per i token di un podcast di tre ore; 150000 è il valore predefinito e il massimo.

Se la tua codebase ha già Faraday o httparty, va bene, usali — la richiesta è gli stessi tre ingredienti: l'endpoint, una stringa di query e un'intestazione. A proposito, req["Authorization"] = "Bearer #{key}" funziona identicamente a x-api-key se i bearer token si adattano meglio alla tua configurazione.

Una chiave in un comando

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

Quello restituisce {"success":true,"apiKey":"yt_..."} senza account, senza email, nulla. L'avvertenza: è una chiave condivisa per tutti gli utenti anonimi, limitata a 5 video al mese per IP. Fantastico per verificare che lo script funzioni, sbagliato per qualsiasi cosa distribuisci.

Che cos'è effettivamente la trascrizione

Vale la pena essere chiari di occhi qui: il testo proviene dai tracciamenti didascalici di YouTube. Le didascalie caricate manualmente leggono bellamente; quelle generate automaticamente occasionalmente manomettono il gergo e i nomi dei prodotti, e non c'è nulla che nessuna API possa fare riguardo a quello a monte. I tracciamenti inglesi sono preferiti, con fallback al primo linguaggio disponibile. E un video con didascalie disabilitate restituisce TRANSCRIPT_UNAVAILABLE — il ramo case sopra lo tratta come uno skip, non un ritentativo, perché riprovare un video che non ha didascalie è un modo molto paziente di non realizzare nulla.

Dove i Rubyist portano questo

Il modello che vedo di più è l'elaborazione batch: fai il loop sopra gli ID video di un canale, recupera ogni trascrizione, alimentali a qualcosa a valle. Gli studenti trasformano video di lezione in note di studio; se il valle è Claude, la trascrizioni gratuite in Claude procedura connette i due senza colla personalizzata. Lo stesso endpoint da PHP è quasi identico riga per riga — confronto qui se il tuo team gestisce entrambi.

Quando la chiave demo condivisa si esaurisce, accedi con Google su youtube2text.org/app/keys — nessun telefono, nessuna carta. Ottieni la tua chiave gratuita a 5 video al mese, con livelli a pagamento da $ 5,99 per 50 fino a $ 19,99 illimitati. Lo script non cambia; ENV["YT2TEXT_KEY"] lo fa.