基于上文,为了方便在(本地)使用被迫增加百度翻译(文明用语)
百度翻译API
在百度翻译API平台上注册一个账号,并创建一个应用程序。在创建应用程序时,您需要获取App ID和密钥,以便使用API。
创建一个百度翻译服务类
在app/Service目录下创建一个BaiduTranslateService.php文件,并添加以下代码:
<?php
namespace App\Service;
use GuzzleHttp\Client;
use Hyperf\Di\Annotation\Inject;
use Hyperf\Config\Annotation\Value;
class BaiduTranslateService
{
/**
* @Inject()
* @var Client
*/
private $client;
/**
* @Value("config.baidu_translate.url")
*/
private $url;
/**
* @Value("config.baidu_translate.app_id")
*/
private $appId;
/**
* @Value("config.baidu_translate.secret_key")
*/
private $secretKey;
public function translate($text, $targetLanguage)
{
$salt = mt_rand(1000000000, 9999999999);
$sign = md5($this->appId . $text . $salt . $this->secretKey);
$response = $this->client->get($this->url, [
'query' => [
'appid' => $this->appId,
'from' => 'auto',
'to' => $targetLanguage,
'salt' => $salt,
'q' => $text,
'sign' => $sign,
]
]);
$data = json_decode((string) $response->getBody(), true);
return $data['trans_result'][0]['dst'];
}
}
在上面的代码中,我们使用了与Google Translate API类似的方式来发起HTTP请求,并将响应数据解码为PHP数组。此外,我们还使用了Hyperf框架的@Value注解来注入百度翻译API的URL、App ID和密钥。
更改配置文件
在config/autoload目录下找到config.php文件,并替换以下代码:
<?php
return [
'google_translate' => [
'url' => 'https://translation.googleapis.com/language/translate/v2',
'key' => env('GOOGLE_TRANSLATE_API_KEY'),
],
'baidu_translate' => [
'url' => 'http://api.fanyi.baidu.com/api/trans/vip/translate',
'app_id' => env('BAIDU_TRANSLATE_APP_ID'),
'secret_key' => env('BAIDU_TRANSLATE_SECRET_KEY'),
],
];
在上面的代码中,我们使用了与Google Translate API类似的方式来定义百度翻译API的URL、App ID和密钥。
定义应用程序中的依赖关系和依赖注入容器的绑定规则
在config/autoload目录下找到dependencies.php文件,并替换以下代码:
<?php
declare(strict_types=1);
use App\Service\TranslateService;
use App\Service\BaiduTranslateService;
/**
* This file is part of Hyperf.
*
* @link https://www.hyperf.io
* @document https://hyperf.wiki
* @contact group@hyperf.io
* @license https://github.com/hyperf/hyperf/blob/master/LICENSE
*/
return [
'dependencies' => [
TranslateService::class => TranslateServiceFactory::class,
BaiduTranslateService::class => BaiduTranslateServiceFactory::class,
],
];
修改控制器
在TranslateController中增加百度翻译API的路由和处理函数。例如:
<?php
namespace App\Controller;
use App\Service\GoogleTranslateService;
use App\Service\BaiduTranslateService;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Annotation\Controller;
use Hyperf\HttpServer\Annotation\GetMapping;
use Hyperf\HttpServer\Annotation\PostMapping;
use Hyperf\Di\Annotation\Inject;
use Hyperf\Utils\ApplicationContext;
use function Hyperf\ViewEngine\view;
/**
* @Controller()
*/
class TranslationController extends AbstractController
{
/**
* @GetMapping(path="/translate")
*/
public function index()
{
return (string) view('translate');
}
/**
* @PostMapping(path="/google-translate")
*/
public function googleTranslate(RequestInterface $request, GoogleTranslateService $translateService)
{
$text = $request->input('text');
$targetLanguage = $request->input('target_language');
$result = $translateService->translate($text, $targetLanguage);
return ['translated_text' => $result];
}
/**
* @PostMapping(path="/baidu-translate")
*/
public function baiduTranslate(RequestInterface $request, BaiduTranslateService $translateService)
{
$text = $request->input('text');
$targetLanguage = $request->input('target_language');
$result = $translateService->translate($text, $targetLanguage);
return ['translated_text' => $result];
}
}
在上面的代码中,我们使用了与Google Translate API类似的方式来定义百度翻译API的路由和处理函数。
设置.env
在根目录的.env文件中增加敏感内容:
BAIDU_TRANSLATE_APP_ID=等号后面填写你的APP_ID
BAIDU_TRANSLATE_SECRET_KEY=等号后面填写你的SECRET_KEY
您可以通过访问http://localhost:9501/baidu-translate来访问百度翻译API。
至此,已经成功增加了百度翻译API的接口,并可以通过Hyperf框架来访问该接口进行翻译服务。