我有一个在Excel VBA上调用Survey Monkey方法的包装函数:
Function SM_Method(https As String, method As String, query As Variant) As String
Dim objSM As Object
Set objSM = CreateObject("MSXML2.XMLHTTP.6.0")
With objSM
.Open https, charSMAPI & method & "?api_key=" & charAPIKey
.setRequestHeader "Authorization", "Bearer " & charToken
.setRequestHeader "Content-Type", "application/json"
.Send query
SM_Method = .responseText
End With
End Function
我将此函数调用如下,指定用于打印某些字段的API查询:
Dim Request As Variant
Request = "{""fields"":[""per_page""]" & "}"
MsgBox (SM_Method("GET", "/surveys", Request))
但上面的消息框还会打印出其他字段,例如“total”,“data”,“page”,“links”等...
我很想让查询参数正常工作,并想知道上面的代码出了什么问题。非常感谢您的帮助!
答案 0 :(得分:1)
您正在尝试执行的请求:
/v3/surveys?api_key=<key>&fields=per_page
并且期望返回的字段只是per_page(没有数据或其他任何内容)?
我认为这不会起作用,我认为fields
url参数仅适用于特定资源,而不适用于资源列表。
因此,如果你想过滤掉一个特定的调查,这将有效:
/v3/surveys/<survey_id>?api_key=<key>&fields=title
但不是资源列表,它总是返回可用项目的总数,您当前所在的页面,每页有多少项目,分页链接以及{{1下的所有资源项目}}
编辑:解释如何获得调查回复
获取调查回复的文档为here。根据您的评论,您想要做的是:
data
这将为您提供所提供电子邮件的受访者的所有回复(按ID),并且在和指定的日期范围内。
然后,您可以在此处获取该响应的所有详细信息(每个页面的每个答案):
GET /v3/surveys/<id>/responses?api_key=<key>&email=<email>&start_created_at=<begin_range>&end_created_at=<end_range>
鉴于您正在使用电子邮件收集器(这就是您收到电子邮件的方式),并且在该调查的列表中确实应该只返回一个响应ID,除非他们多次回答调查。如果是这种情况,那么你可以做
GET /v3/surveys/<id>/responses/<response_id>?api_key=<key>
只有一个请求,您可以在一个请求中获得所有回复,包括给定电子邮件的答案。
答案 1 :(得分:0)
我的代码就像 vRequestBody =“{”“survey_id”“:”&amp;引用(sSurveyID)_ &安培; “,”“fields”“:[”“collector_id”“,”“url”“,”“open”“,”“type”“,”“name”“,”“date_created”“,”“date_modified”“ ] _ &安培; “}”
或
vRequestBody =“{”_ &安培; JKeyValue(“fields”,Array(“title”,“date_created”,“date_modified”,“num_responses”,_ “language_id”,“question_count”,“preview_url”,“analysis_url”))&amp; “}”
JKeyValue使用json类 https://code.google.com/archive/p/vba-json/
函数引用(var As Variant)As String 引用= Chr(34)&amp;替换(var,Chr(34),“''”)&amp;带有嵌入式双引号的Chr(34)'“str”被成对的单引号取代 结束功能
函数JKeyValue(sKey as String,vValues As Variant)As String Dim jLib As New ClsJSONLib JKeyValue = jLib.toString(sKey)&amp; “:”&amp; jLib.toString(vValues) 设置jLib = Nothing 结束功能