首页 > 解决方案 > 使用 Bash 脚本循环遍历多个 cURL api 请求正文参数

问题描述

我想使用 Google Cloud 的语音识别 API 将多个音频文件转换为文本。

我成功转录了一个名为“1.flac”的音频文件...

要求:

curl -s -H "Content-Type: application/json" \
-H "Authorization: Bearer ACCESSTOKEN" \
https://speech.googleapis.com/v1/speech:recognize \
-d '
{"config": {"languageCode": "pt-BR", "audioChannelCount": 2},"audio":{"uri": "gs://PROJECTID/1.flac"}}
' 

回复:

{
  "results": [
    {
      "alternatives": [
        {
          "transcript": "cat",
          "confidence": 0.9999999
        }
      ]
    }
  ]
}

我成功地为上述请求的数据/正文部分生成了多行...

要求:

for i in 1 2 3
do
echo "{\"config\": {\"languageCode\": \"pt-BR\", \"audioChannelCount\": 2},\"audio\":{\"uri\": \"gs://PROJECTID/$i.flac\"}}"
done

回复:

{"config": {"languageCode": "pt-BR", "audioChannelCount": 2},"audio":{"uri": "gs://PROJECTID/1.flac"}}
{"config": {"languageCode": "pt-BR", "audioChannelCount": 2},"audio":{"uri": "gs://PROJECTID/2.flac"}}
{"config": {"languageCode": "pt-BR", "audioChannelCount": 2},"audio":{"uri": "gs://PROJECTID/3.flac"}}

如何组合这两个脚本,以便 curl API 为三个文件中的每一个执行一次,并有一个响应如下:

{
      "results": [
        {
          "alternatives": [
            {
              "transcript": "cat",
              "confidence": 0.9999999
            }
          ]
        }
      ]
    }
{
      "results": [
        {
          "alternatives": [
            {
              "transcript": "dog",
              "confidence": 0.9999999
            }
          ]
        }
      ]
    }
{
      "results": [
        {
          "alternatives": [
            {
              "transcript": "horse",
              "confidence": 0.9999999
            }
          ]
        }
      ]
    }

标签: bashcurlgoogle-speech-api

解决方案


您的代码几乎是正确的。

for i in 1 2 3
do
    curl -s -H "Content-Type: application/json" \
         -H "Authorization: Bearer ACCESSTOKEN" \
         -d '{"config": {"languageCode": "pt-BR", "audioChannelCount": 2}
             ,"audio":{"uri": "gs://PROJECTID/'$i'.flac"}}' \
          https://speech.googleapis.com/v1/speech:recognize
 done

我把 URL 放在最后,因为通常选项在参数之前

的值-d由链接在一起的 3 部分 ['...'] [$i] ['...'] 组成。这允许扩展 [$i]


推荐阅读