HomeBlogTranscribePlansAPI Keys

YouTube Transkriptio Rubyssa: Net::HTTP ja nolla Gems

Ruby-skripti, joka jäsennää YouTube-transkriptio vastauksen vakiokirjastolla

Ruby-refleksi on bundle add something ennen koodin kirjoittamista. Kestä viisi minuuttia: YouTube-transkription hankkiminen Rubyssa ei tarvitse mitään vakiokirjaston ulkopuolella, koska API on yksi HTTPS GET, joka palauttaa JSON:ia, ja net/http plus json ovat istuneet jokaisessa Ruby-asennuksessa ikuisesti. Tämän viestin loppuun mennessä sinulla on skripti, joka ottaa minkä tahansa YouTube URL:n ja tulostaa videon otsikon ja transkription, case-lauseella kattaen jokaisen virheen, jonka API palauttaa — ja tyhjä Gemfile.

Kyllä, Net::HTTP:n liitäntä on yhtä kömpelö kuin sen maine. Se on silti vain kaksikymmentä riviä.

Skripti

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-parametri on antelias — täysinteraktiiviset URL:t, youtu.be lyhyet linkit, shorts tai paljaat 11-merkkinen video-tunnus kaikki toimivat. Lisää maxChars: 20000 encode_www_form:iin, jos transkriptio on menossa LLM-kehotteeseen ja haluat mieluummin olla maksamatta kolmetuntisen podcast:n arvoisen tunnisteen; 150000 on oletusarvo ja maksimi.

Jos koodikanta jo sisältää Faraday- tai httparty-, kunnossa, käytä niitä — pyyntö on sama kolme ainesosaa: pääte, kyselymerkkijono ja yksi otsikko. Puhumme asiasta, req["Authorization"] = "Bearer #{key}" toimii identtisesti x-api-key:iin, jos kanta-tunnus sopii asetukseensa paremmin.

Avain yhdessä komennossa

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

Se palauttaa {"success":true,"apiKey":"yt_..."} ilman tiliä, ilman sähköpostia, mitään. Kiinni: se on yksi jaettu avain kaikille anonyymille käyttäjille, rajoitettu 5 videoon kuukaudessa per IP. Loistava skriptin vahvistamiselle, että se toimii, väärä mistä tahansa, jonka ottaisit käyttöön.

Mitä transkriptio todella on

Arvoista olla selvä silmäksi: teksti tulee YouTuben kuvateksti-raiteista. Manuaalisesti ladatut kuvatekstit lukevat kauniisti; automaattisesti luodut satunnaisesti mangeloi ammattisanastoa ja tuotenimia, eikä mikään API voi tehdä siitä ylävirtaan. Englannin raita ovat ensisijaisia, ensimmäisen saatavilla olevan kielen takaisinkutsulla. Ja video, jolla kuvatekstit ovat poistettu käytöstä, palauttaa TRANSCRIPT_UNAVAILABLE — edellä oleva case haara käsittelee sitä ohituksena, ei uudelleenyrityksenä, koska uudelleen yritys videosta, jolla ei ole kuvatekstejä, on erittäin kärsivällinen tapa saavuttaa mitään.

Missä Rubyistat ottavat tätä

Kuvio, jonka näen useimmiten, on batch-käsittely: silmukka kanavan videon tunnisteista, hae jokainen transkriptio, ruokkia niitä alaspäin olevaan. Opiskelijat kääntävät luentovideot tutkimusmuistiinpanoiksi; jos alavirtaa on Claude, ilmaiset transkriptiot Claudessa selitys yhdistää kaksi ilman mukautettua liimaa. Sama pääte PHP:sta on lähes rivi riviltä sama — vertailu tässä jos tiimissäsi ajaa molempia.

Kun jaettu demonäppäin kuivuu, kirjaudu Googlella youtube2text.org/app/keys — ei puhelinta, ei korttia. Saat oman ilmaisen avaimesi 5 videolla kuukaudessa, maksulliset tasot 5,99 dollarista 50 rajoittamattomaan 19,99 dollariin. Skripti ei muutu; ENV["YT2TEXT_KEY"] tekee.