|
|
@@ -0,0 +1,52 @@
|
|
|
+# frozen_string_literal: true
|
|
|
+
|
|
|
+require "./lib/utils/aws_utils"
|
|
|
+require "./lib/yandex_speechkit_api/async/error_middleware"
|
|
|
+
|
|
|
+module YandexSpeechkitAPI
|
|
|
+ module Async
|
|
|
+ class Operations
|
|
|
+ CREATE_URL = "https://transcribe.api.cloud.yandex.net/speech/stt/v2/longRunningRecognize"
|
|
|
+ SHOW_URL = "https://operation.api.cloud.yandex.net/"
|
|
|
+
|
|
|
+ def create(audio_url)
|
|
|
+ response = connection_for_create.post do |req|
|
|
|
+ req.body = {
|
|
|
+ "config" => { "specification" => { "languageCode" => "ru-RU" } },
|
|
|
+ "audio" => { "uri" => audio_url }
|
|
|
+ }.to_json
|
|
|
+ end
|
|
|
+ JSON.parse(response.body)["id"]
|
|
|
+ end
|
|
|
+
|
|
|
+ def show(operaion_id)
|
|
|
+ response = connection_for_show.get do |req|
|
|
|
+ req.url "/operations/#{operaion_id}"
|
|
|
+ end
|
|
|
+ JSON.parse(response.body)["response"]["chunks"]&.map do |part|
|
|
|
+ part.dig("alternatives", 0, "words")&.map do |hash|
|
|
|
+ hash["word"]
|
|
|
+ end
|
|
|
+ end&.join(" ")
|
|
|
+ end
|
|
|
+
|
|
|
+ private
|
|
|
+
|
|
|
+ def connection_for_create
|
|
|
+ Faraday.new(CREATE_URL) do |conn|
|
|
|
+ conn.headers["Authorization"] = "Api-Key #{ENV['YANDEX_SPEECHKIT_API_KEY']}"
|
|
|
+ conn.headers["Content-Type"] = "application/json"
|
|
|
+ conn.adapter Faraday.default_adapter
|
|
|
+ end
|
|
|
+ end
|
|
|
+
|
|
|
+ def connection_for_show
|
|
|
+ Faraday.new(SHOW_URL) do |conn|
|
|
|
+ conn.headers["Authorization"] = "Api-Key #{ENV['YANDEX_SPEECHKIT_API_KEY']}"
|
|
|
+ conn.use RetryMiddleware
|
|
|
+ conn.adapter Faraday.default_adapter
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+end
|