VBA 和 SurveyMonkey API

VBA and SurveyMonkey API

我已经尝试通过 VBA 访问 SM API。由于我已经有麻烦了,所以我暂时省略了 JSON。结果是 "Developer Inactive",尽管我在 VB.NET 中有另一个项目(使用 .NET DLL),其中相同的密钥和令牌工作正常,我可以检索调查列表。 我究竟做错了什么?

Public Sub GetSMList()

Dim apiKey As String
Dim Token As String
Dim sm As Object

apiKey = "myKey" 
Token = "myToken"

Set sm = CreateObject("MSXML2.XMLHTTP.6.0")

With sm
    .Open "POST", "https://api.surveymonkey.net/v2/surveys/get_survey_list", False
    .setRequestHeader "Authorization", "Bearer " & Token
    .setRequestHeader "Content-Type", "application/json"

    .send "api_key=" & apiKey

    result = .responseText
End With

End Sub

这段代码的目的是展示错误处理。这是 vbscript,但 vbscript 可以粘贴到 VBA。该错误可能会告诉您原因。

总是在文件(用户删除它们)、网络或互联网(它们不能保证工作)和注册表读取(用户删除它们)上出错

URL 必须 100% 正确。与浏览器不同,没有代码可以修复 urls.

我的程序的目的是获取错误详细信息。

我如何获得正确的 URL 是在浏览器中输入我的 url,导航,正确的 URL 通常在地址栏中。另一种方法是使用 link 等的属性来获取 URL.

Microsoft.XMLHTTP 映射到 Microsoft.XMLHTTP.1.0HKEY_CLASSES_ROOT\Msxml2.XMLHTTP 映射到 Msxml2.XMLHTTP.3.0。稍后试试

使用 xmlhttp 尝试这种方式。编辑 url 等。如果它似乎有效,请注释掉 if / end if 以转储信息,即使看起来有效。它是 vbscript 但 vbscript 在 vb6 中工作。

 On Error Resume Next
 Set File = WScript.CreateObject("Microsoft.XMLHTTP")
 File.Open "GET", "http://www.microsoft.com/en-au/default.aspx", False
 'This is IE 8 headers
 File.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 1.1.4322; .NET CLR 3.5.30729; .NET CLR 3.0.30618; .NET4.0C; .NET4.0E; BCD2000; BCD2000)"
 File.Send
 If err.number <> 0 then 
    line =""
    Line  = Line &  vbcrlf & "" 
    Line  = Line &  vbcrlf & "Error getting file" 
    Line  = Line &  vbcrlf & "==================" 
    Line  = Line &  vbcrlf & "" 
    Line  = Line &  vbcrlf & "Error " & err.number & "(0x" & hex(err.number) & ") " & err.description 
    Line  = Line &  vbcrlf & "Source " & err.source 
    Line  = Line &  vbcrlf & "" 
    Line  = Line &  vbcrlf & "HTTP Error " & File.Status & " " & File.StatusText
    Line  = Line &  vbcrlf &  File.getAllResponseHeaders
    wscript.echo Line
    Err.clear
    wscript.quit
 End If

On Error Goto 0

 Set BS = CreateObject("ADODB.Stream")
 BS.type = 1
 BS.open
 BS.Write File.ResponseBody
 BS.SaveToFile "c:\users\test.txt", 2

同时查看这些其他对象是否有效。

C:\Users>reg query hkcr /f xmlhttp

HKEY_CLASSES_ROOT\Microsoft.XMLHTTP
HKEY_CLASSES_ROOT\Microsoft.XMLHTTP.1.0
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.3.0
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.4.0
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.5.0
HKEY_CLASSES_ROOT\Msxml2.ServerXMLHTTP.6.0
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.3.0
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.4.0
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.5.0
HKEY_CLASSES_ROOT\Msxml2.XMLHTTP.6.0

End of search: 12 match(es) found.

另请注意,在发生锁定之前可以调用任何特定 XMLHTTP 对象的次数是有限制的。如果发生这种情况,并且在调试代码时确实如此,只需更改为不同的 xmlhttp 对象

您要将 API 密钥作为 POST 请求的请求正文的一部分发送。直接将查询参数添加到 URL,这应该可以工作。

"https://api.surveymonkey.net/v2/surveys/get_survey_list?api_key=" & apiKey

然后您需要使用 "send" 发送一个 JSON 编码的请求对象。对于 get_survey_list,一个空对象 ("{}") 将帮助您开始。