百度翻译新版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, 0, StrPtr(AppID & Text & Salt & Key), I, Arr(0), I * 3 + 1, vbNullString, 0)
    If I < 1 Then Exit Function
    MD5Update stcContext, Arr(0), 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, PostData, """") - I - 12)
     Else
        I = 1
        PostData = Replace(PostData, "\""", "\'")
        Do Until InStr(I, PostData, """dst"":""") = 0
            I = InStr(I, PostData, """dst"":""") + 7
            Result = IIf(Len(Result) = 0, "", Result & vbCrLf) & Mid(PostData, I, InStr(I, PostData, """") - I)
        Loop
        Result = Replace(Result, "\'", """")
        ReDim Arr(1)
        Do Until InStr(Result, "\u") = 0
            I = InStr(Result, "\u")
            Result = Replace(Result, Mid(Result, I, 6), ChrW("&H" & Mid(Result, I + 2, 4)))
        Loop
    End If
    Translate = Result
End Function


调用方法

Debug.Print Translate("你好")


补一下,在Windows XP系统下用

CreateObject("WinHttp.WinHttpRequest.5.1")创建出来的对象,POST提交时langth项会变成0,需要改下代码变成工程引用后再定义。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值