Я пытаюсь реализовать методы, обсуждаемые в этом вопросе, чтобы написать php функция, которая загружает аудиофайл для заданной строки, но я не могу обойти защиту от злоупотреблений Google. Результаты спорадические, иногда я получаю аудиофайл, а иногда это пустой mp3 размером 2 КБ из-за ответа «Наши системы обнаружили необычный трафик из вашей компьютерной сети». Вот что я получил до сих пор (обратите внимание, что файл $ есть в моем коде, но для целей этого я его опустил):
function downloadMP3( $url, $file ){
$curl = curl_init();
curl_setopt( $curl, CURLOPT_URL, $url );
curl_setopt( $curl, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $curl, CURLOPT_REFERER, 'http://translate.google.com/' );
curl_setopt( $curl, CURLOPT_USERAGENT, 'stagefright/1.2 (Linux;Android 5.0)' );
$output = curl_exec( $curl );
curl_close( $curl );
if( $output === false ) {
return false;
}
$fp = fopen( $file, 'wb' );
fwrite( $fp, $output );
fclose( $fp );
return true;
}
$word = "Test";
$file = md5( $word ) . '.mp3';
if ( !file_exists( $file ) ) {
$url = 'http://translate.google.com/translate_tts?q=' . $word . '&tl=en&client=t';
downloadMP3( $url, $file );
}
ie=UTF-8
. Попробуйте добавить это, но я в любом случае вернусь через несколько часов. - person Chris Cirefice   schedule 07.12.2015curl
на OSX в своем университете, и она отлично работает. Это заставляет меня думать, что что-то не так с вашим PHP-кодом или у вас проблемы с сетью (может быть, вы находитесь в месте, которое может много спамить Google?). К сожалению, у меня нет знаний о PHP и о том, как запускать скрипты на OSX или Ubuntu, поэтому я не могу помочь отладить ваш код... переменные типаstring
должны быть в < /b> символы вместо ' ? После быстрого поиска в Google вам может понадобитьсяCURLOPT_BINARYTRANSFER
, как показано здесь. - person Chris Cirefice   schedule 08.12.2015curl
в моем предыдущем ответе. Он будет работать на любом терминале nix (OSX, дистрибутивах Linux и т. д.) или установить CURL для Windows. Это однострочная команда:curl 'http://translate.google.com/translate_tts?ie=UTF-8&q=Hello&tl=en&client=t' -H 'Referer: http://translate.google.com/' -H 'User-Agent: stagefright/1.2 (Linux;Android 5.0)' > google_tts.mp3
. Если команда не работает для вас, это определенно проблема с сетью. Однако, если он *действительно работает, ваш PHP-код нуждается в некоторой доработке. Вероятно, отсутствующий/неправильно настроенный заголовок. - person Chris Cirefice   schedule 08.12.2015curl
в PHP на самом деле является плохим вариантом. В PHP есть функцияhttp_get
. Это определенно лучшее решение, чем использованиеcurl
. Вы также можете установить заголовки HTTP с помощью этой функции. Я бы попробовал это! - person Chris Cirefice   schedule 08.12.2015client=t
, он загружает mp3-файл, но не воспроизводит его. Если я не использую параметрclient=t
, он все равно загружает файл, но на этот раз размер файла равен 0. В любом случае файл не воспроизводится. Я делаю это на окнах. Интересно, как они это делают здесь: soundoftext.com - person user1448031   schedule 21.12.2015tk
в строке запроса). Однако, если вы проверите запрос GET с помощьюtranslate.google.com
, он сгенерирует действительный запрос, который затем можно будет использовать в команде cURL. См. мое редактирование моего ответа в другом сообщении, в котором работает cURL. Вы можете добавить параметрtk
в свой PHP-код, и он должен работать. Теперь ваш$url
должен выглядеть так:$url = 'http://translate.google.com/translate_tts?q=' . $word . '&tl=en&tk=995126.592330&client=t';
- person Chris Cirefice   schedule 31.12.2015