我正在使用Google Translate的非官方文字转语音API(我已在其上发布了更多信息here)。
API端点如下所示:https://translate.google.com/translate_tts?ie=utf-8&tl=en&q=Hello%20World
对单词进行传统的API请求,我得到No-access-control-origin和404块。为了解决这个问题,我跟着the php script in this blog在提出请求之前删除了引荐来源(有关我的尝试的更多信息here)。
我能够让英语上班,但我需要这个才能为中国人服务。不幸的是,当我传递像你这样的东西时,声音似乎在叙述胡言乱语。但是,如果您将其直接添加到浏览器中,则会完美地叙述。
https://translate.google.com/translate_tts?ie=utf-8&tl=zh-CN&q=你好
HTML :
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<audio controls="controls" autoplay="autoplay" style="display:none;">
<source src="testPHP.php?translate_tts?ie=utf-8&tl=zh-CN&q=你好" type="audio/mpeg" />
</audio>
testPHP.php :
<?php
//https://translate.google.com/translate_tts?ie=UTF-8&q=' + text + '&tl=en
header('Content-type: text/plain; charset=utf-8');
$params = http_build_query(array("ie" => $_GET['ie'],"tl" => $_GET["tl"], "q" => $_GET["q"]));
$ctx = stream_context_create(array("http"=>array("method"=>"GET","header"=>"Referer: \r\n"))); //create and return stream context
$soundfile = file_get_contents("https://translate.google.com/translate_tts?".$params, false, $ctx); //reads file into string (string with params[utf-8, tl, q], use include path bool, custom context resource headers)
header("Content-type: audio/mpeg");
header("Content-Transfer-Encoding: binary");
header('Pragma: no-cache');
header('Expires: 0');
echo($soundfile);
tail -f apache access_logs 显示:
GET /testPHP.php?translate_tts?ie=utf-8&tl=zh-CN&q=%E4%BD%A0%E5%A5%BD HTTP / 1.1“200 13536
这似乎没问题。如您所见,已转换q
查询参数值,即你好。这很好,因为如果你把它放在浏览器中它仍然有效:
https://translate.google.com/translate_tts?ie=utf-8&tl=zh-CN&q=%E4%BD%A0%E5%A5%BD
tail -f apache error_logs 显示:
PHP注意:未定义的索引:即in /Users/danturcotte/Sites/personal_practice/melonJS-dev/testPHP.php on 第4行,引用者:http://melon.localhost/
我不确定这是怎么回事,或者是否有助于搞砸发音。我认为这些单词可能正在读取ie
索引的部分内容?
来自浏览器端的查询参数似乎正在注册,
从apache access_logs可以看出,ie=utf-8
param设置正常。
所以我的问题是:
我已将header('Content-type: text/plain; charset=utf-8');
添加到我的testPHP.php
文件中,以确保编码正常。这会导致这个问题吗?
我正在构建URI查询字符串:$params = http_build_query(array("ie" => $_GET['ie'],"tl" => $_GET["tl"], "q" => $_GET["q"]));
,那么如何存在未定义的索引ie
?
答案 0 :(得分:1)
问题在于您的网址:
GET /testPHP.php?translate_tts?ie=utf-8&tl=zh-CN&q=%E4%BD%A0%E5%A5%BD
你有两个问号,这意味着PHP将获得:
Array
(
[translate_tts?ie] => utf-8
[tl] => zh-CN
[q] => 你好
)
相反,你需要做类似的事情:
GET /testPHP.php?translate_tts=value&ie=utf-8&tl=zh-CN&q=%E4%BD%A0%E5%A5%BD