質問: BluemixのSpeech to text をコマンドプロンプトからcurlで使いたいと思っています。 windows 10 proを使っています。 やりたいことは、音声ファイルをpostでアップロードして、Speech to Textを通して文章に変換されたものを受け取りたいです。 以下のやり方だと、ターミナルに直接結果が帰ってくるのではないかと思っています。 curlを使っているのですが、公式のBluemixの文章を読んでやってみても、エラーが出てうまくいきません。 Bluemixやcurlについて精通している方がいらっしゃいましたら、ご教授いただきたいです。 以下のページにあるチュートリアルを参考にしました。 ``` curl -X POST -u {username}:{password} --header "Content-Type: audio/flac" --header "Transfer-Encoding: chunked" --data-binary @{path}audio-file.flac "https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?continuous=true" ``` このようにターミナルに記入すればよいとのことですが、うまくいきません。 curl -V でcurlのバージョンが出るので、パスは通っていると思います。 具体的には、この{username}、{password}、{path}の部分にどのように記載すればよいのか、よくわかっていません。 {username}:{password}のぶぶんは、Bluemixのservice credentialsを取得したのち、以下を参考に、 ``` "\"username\":\"password\"" ``` ``` 'username':'password' ``` などを試しましたが、以下のエラーが出ます。 Warning: Couldn't read data from file "{path}audio-file.flac", Warning: this makes an empty POST. curl: (60) SSL certificate problem: self signed certificate in certificate chain More details here: http://curl.haxx.se/docs/sslcerts.html 最後の{path}なのですが、どこからの相対パスを貼っていいかわかりません。そもそもローカルのどこにflacファイルを置いていいのかわかりません。 {path}は、ターミナルのpwdからの相対パスなのか、どこからのファイルパスを記入すればよろしいのでしょうか? 初歩的な質問かもしれない、と思っていますが、一週間ほど調べてみてもよく理解することができなかったので、質問させてください。 よろしくお願いいたします。
回答: Bluemix使ったことないのでちょっとあってるか怪しいですが。 そのページに書かれていることを読み解くと─── #### 1.{username}:{password}の部分を取得した値に変更してください。 つまり、ユーザー名が`nekoneko`でパスワードが`22meowmeow`の場合、こうなります。 ``` nekoneko:22meowmeow ``` **注意点として、BluemixIDとパスワードではなく、サービスクレデンシャルを使用する必要があります。** #### 2.{path}の部分をFLACファイルのパス名に置き換えてください。 相対パスではなく絶対パスにします。 `audio-file.flac`が`/tmp/audio-file.flac`にある場合は、 ``` @/tmp/audio-file.flac ``` `audio-file.flac`が`/usr/local/flac/resource/audio-file.flac`にある場合は、 ``` @/usr/local/flac/resource/audio-file.flac ``` です。 #### 3.各オプションは以下のようになります。 **-X POST** コマンドが、HTTP POSTであることを指定します。 **-u** サービスに接続するためのベーシック認証文字列(ユーザー名とパスワード) **--header** HTTPヘッダのパラメーターを指定します。 Content-TypeとTransfer-Encodingの2つのヘッダ値を渡します。 #多分、固定だろうと思います **--data-binary** 追加処理なしで提供されるバイナリファイルを指定します。 @文字は、引数はファイルのパス名であることを示しています。 **最終引数は、接続先URLを指定します。** 例:"https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?continuous=true" この場合、サービスのセッションレスrecognizeメソッドに対して、 クエリパラメータcontinuousにtrueを渡しています。 従いまして、コマンドは以下のようになるかと思います。 ``` curl -X POST -u nekoneko:22meowmeow --header "Content-Type: audio/flac" --header "Transfer-Encoding: chunked" --data-binary @/usr/local/flac/resource/audio-file.flac "https://stream.watsonplatform.net/speech-to-text/api/v1/recognize?continuous=true" ```