Комментарии 5
Достаточно часто замечаю, в различных примерах используют объединение типов, таким же образом, как и вы:
public function getAudio() : bool | string;
но сам тип bool используется только для возвращения false.
Если же ваш метод вернет true, то вся логика приложения будет нарушена.
Как минимум мы можете использовать ?string
и возвращать null
.
Лучше всего в этом месте бросить исключение, а в возвращаевом типе вместо bool | string оставить только string
c PHP8 можно указывать false в пересекающихся типах.
например,
вполне валидная запись
например,
function stringOrFalse(string|false $arg): string|false
{
return $arg;
}
вполне валидная запись
Вроде всё просто. Конечно мы могли бы отправить скачанное аудио-сообщение сразу в Wit без предварительного сохранения на диск, но аудио-файл скачанный из telegram кодирован в OGG
ну, мы все еще можем отправить его без сохранения, в каком бы формате он ни был.
$witToken = '<witToken>';
$witUri = 'https://api.wit.ai/speech?v=20211109&';
$audioUri = "https://api.telegram.org/file/bot{$this->tg}/{$info["result"]["file_path"]}";
$command = "curl -s '{$audioUri}'"
. " | ffmpeg -nostdin -y -hide_banner -loglevel warning -i pipe:0 -f ogg pipe:1"
. " | curl -s -H 'Authorization: Bearer {$witToken}' -H 'Content-Type: audio/ogg' -d @- '{$witUri}'";
$response = shell_exec($command);
$json = json_decode($response, true, 512, JSON_THROW_ON_ERROR);
var_dump($json);
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Перевод аудио-сообщений в текст в telegram при помощи Wit