0

Google テキスト読み上げへの curl 投稿を作成しています。コンテンツをtxtファイルに書き込むために、Google Text to Speechサービスに送信したい.flacファイルのセットがあります。

これは私がこれを行うために書いたコードで、動作します:

$url = 'https://www.google.com/speech-api/v2/recognize?output=json&lang=it-IT&key=xxx';

$cont2 = array(

   'flac/1.flac',
   'flac/2.flac',
   'flac/3.flac'
    );
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: audio/x-flac; rate=44100'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

foreach ($cont2 as $fn) {
    curl_setopt($ch, CURLOPT_POSTFIELDS, file_get_contents($fn)); 
    $result = curl_exec($ch);
    $info = curl_getinfo($ch); 
    //var_dump($info);
    if ($result === false) {
       die(curl_error());
    }else{
       echo "<br />".$fn." upload ok"."<br />";
       file_put_contents("pum.txt", $result, FILE_APPEND);
    }
}

それは魅力のように機能します。「pum.txt」には、すべてのファイルの内容が書き込まれており、問題ありません。

私の問題は、「flacフォルダー」にある、渡す必要があるファイルの新しい名前を毎回配列「cont2」に追加したくないことです。

それを避けるために、「scandir」メソッドを使用し、「。」を削除します。および「..」配列からの文字列を取得し、その配列を CURL_OPT_POSTFIELD に渡しますが、GTT への呼び出しは空のコンテンツを返します。

これは私がそれを行うために書いたコードです (代わりに $cont2 配列)

$directory = 'flac/';
$cont = array_diff(scandir($directory), array('..', '.', '.DS_Store'));

その Print_r は $cont2 配列と同じです:

array(3) {
  [3]=>
  string(6) "1.flac"
  [4]=>
  string(6) "2.flac"
  [5]=>
  string(6) "3.flac"
}

しかし、Google TTS は空の結果を返します。

誰かが私が間違っているところを教えてください。

敬具

ブルス

編集: "$cont = glob("$directory/*.flac");" を使用 問題を解決しました。他の人を助けてください。

4

2 に答える 2

2

scandir() はフル パス情報を含めず、ファイル名のみを返します。SO ループして Google に送信するファイル名の配列を作成するときは、そのディレクトリを自分で含める必要があります。

例えば

$dir = 'flac';
$files = scandir($dir);

foreach($files as $key => $file);
    $files[$key] = $dir . '/' . $file;
}

たとえば、scan dir は を返しfile1.flacますが、必要ですflac/file1.flac。パス情報が含まれていないため、存在しないファイル名で実行しようとしてfile_get_contents()おり、ブール値の false (file_get failed) を Google に送信しています。

于 2014-11-14T16:15:03.877 に答える
0

Marc B が述べているように、欠落しているファイルへのディレクトリが必要です。glob必要なものを正確に返すので、私はただ使用します:

$cont = glob("$directory/*.flac");
于 2014-11-14T16:30:11.010 に答える