技术文摘

当一回雷锋容易,持续发扬雷锋精神就难了(百度翻译接口php写法)

作者:雨祺   发表于:
浏览:123次    字数:2432  原创
级别: 站长   总稿: 69 篇,  月稿: 0
当一回雷锋容易,持续发扬雷锋精神就难了(百度翻译接口php写法),下面我就4414站长的小小白站长们,提供百度接口PHP写法的例子。声明我这个是基于应该算是大众的了。首先不清楚您的CMS有没有自带的memcached与redis。如果有请把相关代码删除掉。另外就是post字段那里请根据自己的CMS做好变量过滤处理。不扯淡了,直接上干货,代码如下:
  1. <?php 
  2. //内存缓存开始(若您的CMS有给予删除此区间的代码) 
  3. $memcache = null; $redis = null;  
  4. if (class_exists('Memcached')){ 
  5. $memcache = new Memcached();    
  6. $memcache->addServer('127.0.0.1', 11211); 
  7. if (class_exists('Redis')){ 
  8. $redis = new Redis();                  
  9. $redis->connect('127.0.0.1', 6379);  
  10. register_shutdown_function(function() use ($memcache, $redis) {   
  11. if (isset($memcache)) {   
  12. $memcache->quit();   
  13. }   
  14. if (isset($redis)) {   
  15. $redis->close();   
  16. }   
  17. }); 
  18. //内存缓存结束(若您的CMS有给予删除此区间的代码) 
  19. function curlRequest($url, $method = 'GET', $data = [], $headers = []) {   
  20. $ch = curl_init($url);   
  21. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   
  22. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);   
  23. curl_setopt($ch, CURLOPT_MAXREDIRS, 10);   
  24. curl_setopt($ch, CURLOPT_TIMEOUT, 30);   
  25. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);  
  26. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);  
  27. if ($method === 'POST') {   
  28. curl_setopt($ch, CURLOPT_POST, true);   
  29. if (is_array($data) || is_object($data)) {   
  30. curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));   
  31. else {   
  32. curl_setopt($ch, CURLOPT_POSTFIELDS, $data);   
  33. }   
  34. } elseif ($method !== 'GET') {   
  35. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);   
  36. if (!empty($data)) {   
  37. curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));   
  38. }   
  39. }     
  40. if (!empty($headers)) {   
  41. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);   
  42. }      
  43. $response = curl_exec($ch);   
  44. $error = curl_error($ch);    
  45. curl_close($ch);   
  46. if ($error) {   
  47. throw new Exception("CURL Error: " . $error);   
  48. }    
  49. return $response;   
  50. $baiduappid = ''//到百度申请 
  51. $baiduapikey = '';//应用的API Key; 
  52. $baidusecretkey = ''
  53. $postData = ['grant_type' =>'client_credentials','client_id' =>$baiduapikey,'client_secret' =>$baidusecretkey];  
  54. $headers = ['Content-Type: application/json','Accept: application/json']; 
  55. $cacheKey = md5($public_r['add_pcurl']).'chatbaidufanyi_access_token_' .$baiduappid; 
  56. $ret= $memcache->get($cacheKey);//若您的CMS有请改成memcache获取缓存的方式 
  57. if ($ret== false) {         
  58. $ret = json_decode(curlRequest("https://aip.baidubce.com/oauth/2.0/token"'POST', $postData, $headers),TRUE);  
  59. $memcache->set($cacheKey,$ret, 3600*24*28);//若您的CMS有请改成memcache保存缓存的方式 
  60. $access_token_baidu =$ret['access_token']; 
  61. $postDatafy= [ 
  62. 'from' =>'auto'
  63. 'to' => $_POST['category'],//目标语种方向(前端POST传过来的)PS:请根据自己的CMS做好变量过滤处理,比如帝国的过滤函数RepPostStr,那就可以改为RepPostStr($_POST['category']) 
  64. 'q' =>$_POST['content'],//请求翻译文本(前端POST传过来的)PS:请根据自己的CMS做好变量过滤处理,比如帝国的过滤函数RepPostStr,那就可以改为RepPostStr($_POST['content']) 
  65. ]; 
  66. $baidufyres =curlRequest("https://aip.baidubce.com/rpc/2.0/mt/texttrans/v1?access_token=".$access_token_baidu,'POST', json_encode($postDatafy));//翻译接口 
  67. $baidufy_array = json_decode($baidufyres, true); 
  68. if(isset($baidufy_array['error_code'])){ 
  69. $date= array('result'=>$baidufy_array['error_msg'],'code'=>0,); 
  70. echo json_encode($date); 
  71. exit;         
  72. $date= array('result'=>$baidufy_array['result']['trans_result'][0],'code'=>1,); 
  73. echo json_encode($date); 
api后端接口就写好了哦,那我们命名为baidufanyi.php,其实百度所有的接口开发流程就是这样的,先获取百度独有的token(这里应该设为缓存,好像1个月内是不过期的,减少点curl时间的花销),而后在请求相关的接口。好人做到底,那顺便也把前端也写个例子,代码如下:
  1. var category = $('#category').val();//这是用户填写的翻译的语言方向,如果只翻译为英语。那可以为固定值 
  2. var content = $.trim($("textarea[name=content]").val());//这是用户填写的需要翻译的内容 
  3. if (category== "" || category == null) { 
  4. layer.msg('请选择语言类型', {icon: 5, time: 2000, area: '200px', type: 0, anim: 6,}); 
  5. return false
  6. }         
  7. if (content== "" || content == null) { 
  8. layer.msg('请输入翻译内容', {icon: 5, time: 2000, area: '200px', type: 0, anim: 6,}); 
  9. return false
  10. $.ajax({ 
  11. url: 'baidufanyi.php'
  12. type: 'POST'
  13. data: {category: category,content: content}, 
  14. dataType : 'json'
  15. success: function(json) { 
  16. $("#fyresult").html(json.result.dst);//json.result.dst这个就是后端返回的翻译最终结果json.result.dst 
  17. }, 
  18. }); 

【审核人:站长】

收藏   加好友   生成海报   分享
点赞(0)
打赏
Tags: 帝国CMS 雷锋

发布者资料

热门文章

技术文摘

查看更多技术文摘
首页
栏目
搜索
会员
投稿