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

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("你好")

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...