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.0
。 HKEY_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,一个空对象 ("{}") 将帮助您开始。
我已经尝试通过 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.0
。 HKEY_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,一个空对象 ("{}") 将帮助您开始。