【发布时间】:2016-03-12 02:22:38
【问题描述】:
我正在尝试实现question 中讨论的方法来编写一个 php 函数,该函数为给定的字符串下载音频文件,但我似乎无法绕过 google 的滥用保护。结果是零星的,有时我得到一个音频文件,有时它是一个空的 2KB mp3,因为响应“我们的系统检测到来自您的计算机网络的异常流量”。这是我到目前为止所得到的(注意 $file 在我的代码中有一个位置,但为此我省略了它):
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 );
}
【问题讨论】:
-
您好 Julius,我会在接下来的几个小时内看看这个。乍一看,这看起来应该可以工作,尽管您在查询字符串中缺少
ie=UTF-8。尝试添加它,但无论如何我会在几个小时后回来。 -
我试过了,但似乎没有什么不同。它似乎是零星的,它偶尔会起作用,然后停止工作。有什么想法吗?
-
我刚刚在我大学的 OSX 上测试了
curl命令,它工作得很好。这让我觉得您的 PHP 代码有问题,或者您遇到了网络问题(也许您所在的地方可能会向 Google 发送大量垃圾邮件?)。不幸的是,我不了解 PHP,也不了解如何在 OSX 或 Ubuntu 上运行脚本,所以我无法真正帮助调试您的代码……string-type 变量是否需要在 " i> 个字符而不是 ' ?在快速谷歌之后,您可能需要CURLOPT_BINARYTRANSFER,如 here 所示。 -
在您的测试中,如果不使用 php,您如何调用 curl 命令?它是无限期地为您工作还是在大约五个请求后被切断?我试过 CURLOPT_BINARYTRANSFER 但在 php 5.1.3 之后它实际上没有效果。我很难过,只能假设这根本行不通。
-
在我之前的回答中测试
curl命令。它可以在任何 nix 终端(OSX、linux 发行版等)中运行,或者为 Windows 安装 CURL。这是一个单行命令: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 代码需要一些工作。可能是缺少/错误配置的标头。
标签: php curl google-speech-api