Ruby
Instala el SDK de Ruby de HuntAPI y haz tu primera llamada a la API.
El SDK oficial de Ruby de HuntAPI, con un método tipado por endpoint y un request() genérico para lo demás.
Requisitos
- Ruby 3.1+
Instalación
gem install huntapigem "huntapi"Obtén tu clave de API
Copia tu clave de API desde el panel de HuntAPI y guárdala en la variable de entorno HUNTAPI_API_KEY, que el SDK lee por defecto. No la incluyas en el control de versiones.
Inicio rápido
require "huntapi"
client = HuntApi::Client.new(api_key: ENV.fetch("HUNTAPI_API_KEY"))
response = client.media_metadata(query: "https://www.youtube.com/watch?v=Z5YP8kznWZs")
puts response.dataTrabajos asíncronos
Los endpoints de descarga son asíncronos: devuelven un job_id, y un trabajo puede durar hasta 12 horas. El SDK puede esperar a que termine.
submitted = client.video_download(query: "https://www.youtube.com/watch?v=Z5YP8kznWZs", video_quality: "720p")
job = client.wait_for_job(submitted.data["job_id"]) { |j| puts "#{j['status']} #{j['progress']}%" }
puts job.dataErrores
Una respuesta fuera de 2xx lanza un error de API con su estado y su mensaje. Consulta los códigos de estado para ver la lista completa.
begin
client.media_metadata(query: "https://www.youtube.com/watch?v=Z5YP8kznWZs")
rescue HuntApi::APIError => e
warn "HTTP #{e.status}: #{e.message}"
endReintentos
Las solicitudes se reintentan hasta 3 veces tras un error de red, un 408, 500, 502, 503 o 504, o un límite de frecuencia del plan. Los errores de cuota por clave y los tiempos de espera del cliente no se reintentan. La espera empieza en 1 segundo y crece 1,5× en cada reintento, y una cabecera Retry-After tiene prioridad.
client = HuntApi::Client.new(max_retries: 5, retry_delay: 0.5)
client.media_metadata(query: "https://www.youtube.com/watch?v=Z5YP8kznWZs", request_options: { max_retries: 0 }) # one request without retriesSolicitudes por lotes
Ejecuta muchas llamadas a la vez, 10 por defecto. Un fallo no detiene las demás.
inputs = ["https://www.youtube.com/watch?v=Z5YP8kznWZs", "https://www.youtube.com/watch?v=jNQXAC9IVRw"]
results = client.batch(inputs, concurrency: 5) { |value| client.media_metadata(query: value) }
results.each do |result|
if result.ok?
puts result.value.data
else
warn "#{inputs[result.index]}: #{result.error.message}"
end
endCualquier endpoint
request() llega a cualquier ruta, incluidos los endpoints publicados después de tu versión del SDK.
response = client.request("GET", "/v1/usage")Errores frecuentes
- Poner la clave de API en el código front-end. Cualquiera podría leerla. Llama a la API desde tu servidor.
- Tratar todo
401como una clave incorrecta. Un401también puede ser un límite de frecuencia: lee el mensaje. El SDK reintenta por ti los límites del plan. - Reintentar un
402. Significa que no quedan créditos ni cuota, así que un reintento no puede funcionar. Consulta Créditos. - Esperar solicitudes largas. Más allá de 60 segundos, usa el modo asíncrono como se muestra arriba en lugar de aumentar el tiempo de espera. Consulta Timeout.
Enlaces
- Paquete:
huntapi - Código fuente: github.com/huntapi/huntapi-ruby
- Referencia de la API