123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- <?php
- namespace App\Handlers;
- use GuzzleHttp\Client;
- use Overtrue\Pinyin\Pinyin;
- class SlugTranslateHandler
- {
- public function translate($text)
- {
- // 实例化 HTTP 客户端
- $http = new Client;
- // 初始化配置信息
- $api = 'http://api.fanyi.baidu.com/api/trans/vip/translate?';
- $appid = config('services.baidu_translate.appid');
- $key = config('services.baidu_translate.key');
- $salt = time();
- // 如果没有配置百度翻译,自动使用兼容的拼音方案
- if (empty($appid) || empty($key)) {
- return $this->pinyin($text);
- }
- // 根据文档,生成 sign
- // http://api.fanyi.baidu.com/api/trans/product/apidoc
- // appid+q+salt+密钥 的MD5值
- $sign = md5($appid. $text . $salt . $key);
- // 构建请求参数
- $query = http_build_query([
- "q" => $text,
- "from" => "zh",
- "to" => "en",
- "appid" => $appid,
- "salt" => $salt,
- "sign" => $sign,
- ]);
- // 发送 HTTP Get 请求
- $response = $http->get($api.$query);
- $result = json_decode($response->getBody(), true);
- /**
- 获取结果,如果请求成功,dd($result) 结果如下:
- array:3 [▼
- "from" => "zh"
- "to" => "en"
- "trans_result" => array:1 [▼
- 0 => array:2 [▼
- "src" => "XSS 安全漏洞"
- "dst" => "XSS security vulnerability"
- ]
- ]
- ]
- **/
- // 尝试获取获取翻译结果
- if (isset($result['trans_result'][0]['dst'])) {
- return str_slug($result['trans_result'][0]['dst']);
- } else {
- // 如果百度翻译没有结果,使用拼音作为后备计划。
- return $this->pinyin($text);
- }
- }
- public function pinyin($text)
- {
- return str_slug(app(Pinyin::class)->permalink($text));
- }
- }
|