加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

百度翻译新版API的VB实现代码

发布时间:2020-12-17 07:43:02 所属栏目:百科 来源:网络整理
导读:Public Const BAIDU_APP_ID = "XXXXXXXXXXXXXXXXXXXXX" '在百度申请后得到Public Const BAIDU_APP_KEY = "XXXXXXXXXXXXXXXXXXXXXX" '在百度申请后得到 Public Type MD5_CTX dwNUMa As Long dwNUMb As Long Buffer(15) As Byte cIN(63) As Byte cDig(15) As B
Public Const BAIDU_APP_ID = "XXXXXXXXXXXXXXXXXXXXX" '在百度申请后得到
Public Const BAIDU_APP_KEY = "XXXXXXXXXXXXXXXXXXXXXX" '在百度申请后得到 

Public Type MD5_CTX
 dwNUMa As Long
 dwNUMb As Long
 Buffer(15) As Byte
 cIN(63) As Byte
 cDig(15) As Byte
End Type
 
Public Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long,ByVal dwFlags As Long,ByVal lpWideCharStr As Long,ByVal cchWideChar As Long,ByRef lpMultiByteStr As Any,ByVal cchMultiByte As Long,ByVal lpDefaultChar As String,ByVal lpUsedDefaultChar As Long) As Long
Public Declare Sub MD5Final Lib "advapi32" (lpContext As MD5_CTX)
Public Declare Sub MD5Init Lib "advapi32" (lpContext As MD5_CTX)
Public Declare Sub MD5Update Lib "advapi32" (lpContext As MD5_CTX,ByRef lpBuffer As Any,ByVal BufSize As Long)

Public Function Translate(ByVal Text As String,Optional ByVal Source As String = "auto",Optional ByVal Target As String = "auto",Optional ByVal AppID As String = BAIDU_APP_ID,Optional ByVal Key As String = BAIDU_APP_KEY) As String
 Dim XML As Object,stcContext As MD5_CTX,URL As String,PostData As String,Salt As String
 Dim Arr() As Byte,I As Long,Result As String
 URL = "http://api.fanyi.baidu.com/api/trans/vip/translate"
 Randomize
 Salt = Replace(Rnd,".","")
 MD5Init stcContext
 PostData = "q=" & Text
 PostData = PostData & "&appid=" & AppID
 PostData = PostData & "&salt=" & Salt
 PostData = PostData & "&from=" & Source
 PostData = PostData & "&to=" & Target
 PostData = PostData & "&sign="
 I = Len(AppID & Text & Salt & Key)
 ReDim Arr(I * 3)
 I = WideCharToMultiByte(65001,StrPtr(AppID & Text & Salt & Key),I,Arr(0),I * 3 + 1,vbNullString,0)
 If I < 1 Then Exit Function
 MD5Update stcContext,I
 MD5Final stcContext
 For I = 0 To UBound(stcContext.cDig)
 PostData = PostData & LCase(IIf(stcContext.cDig(I) < 16,"0" & Hex(stcContext.cDig(I)),Hex(stcContext.cDig(I))))
 Next
 Set XML = CreateObject("WinHttp.WinHttpRequest.5.1")
 XML.Option(6) = False
 XML.Option(4) = 13056
 XML.Open "POST",URL
 XML.SetRequestHeader "Content-Type","application/x-www-form-urlencoded"
 XML.SetRequestHeader "Content-Length",LenB(StrConv(PostData,vbFromUnicode))
 XML.Send PostData
 PostData = XML.ResponseText
 Set XML = Nothing
 I = InStr(PostData,"error_code")
 If I > 0 Then
 Result = "错误代码:" & Mid(PostData,I + 13,InStr(I + 13,PostData,"""") - I - 13)
 I = InStr(PostData,"error_msg")
 Result = Result & ",说明:" & Mid(PostData,I + 12,InStr(I + 12,"""") - I - 12)
 Else
 I = 1
 PostData = Replace(PostData,"""","'")
 Do Until InStr(I,"""dst"":""") = 0
 I = InStr(I,"""dst"":""") + 7
 Result = IIf(Len(Result) = 0,"",Result & vbCrLf) & Mid(PostData,InStr(I,"""") - I)
 Loop
 Result = Replace(Result,"'","""")
 ReDim Arr(1)
 Do Until InStr(Result,"u") = 0
 I = InStr(Result,"u")
 Result = Replace(Result,Mid(Result,6),ChrW("&H" & Mid(Result,I + 2,4)))
 Loop
 End If
 Translate = Result
End Function


调用方法

Debug.Print Translate("你好")

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读