Survey Monkey API 查询参数在 Excel VBA 上不起作用
Survey Monkey API Query Parameters not working on Excel VBA
我有一个包装函数,它在 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"等...
我很想让查询参数正常工作,并且想知道我上面的代码有什么问题。非常感谢您的帮助!
您要执行的请求是:
/v3/surveys?api_key=<key>&fields=per_page
并期望字段 returned 仅为 per_page(无数据或其他任何内容)?
我认为这行不通,我认为 fields
url 参数仅适用于特定资源,不适用于资源列表。
因此,如果您想过滤掉特定的调查,这会起作用:
/v3/surveys/<survey_id>?api_key=<key>&fields=title
但对于资源列表而言,它总是 return 可用项目的总数、您当前所在的页面、每页的项目数、分页链接以及所有data
.
下的资源项目
编辑:解释如何获得调查回复
获取调查回复的文档是 here。根据您的评论,您想做的是:
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>
鉴于您正在使用电子邮件收集器(这就是您收集他们的电子邮件的方式),并且该调查的列表中实际上应该只有一个响应 ID returned,除非他们回答调查的次数超过一次。如果是这样,那么您可以
GET /v3/surveys/<id>/responses/bulk?api_key=<key>&email=<email>&start_created_at=<begin_range>&end_created_at=<end_range>
只有一个请求,您可以获得所有回复,包括在一个请求中给定电子邮件的答复。
我有这样的代码
vRequestBody = "{""survey_id"":" & Quoted(sSurveyID) _
& ", ""fields"":[""collector_id"", ""url"", ""open"", ""type"", ""name" ", ""date_created"", ""date_modified""]" _
& "}"
或
vRequestBody = "{"_
& JKeyValue("fields", 数组("title", "date_created", "date_modified", "num_responses", _
"language_id"、"question_count"、"preview_url"、"analysis_url")) & "}"
其中 JKeyValue 使用 json class
https://code.google.com/archive/p/vba-json/
函数引用(var As Variant)作为字符串
Quoted = Chr(34) & Replace(var, Chr(34), "''") & Chr(34) ' "str" 用成对的单引号替换嵌入的双引号
结束函数
函数 JKeyValue(sKey As String, vValues As Variant) As String
将 jLib 调暗为新的 ClsJSONLib
JKeyValue = jLib.toString(sKey) & ":" & jLib.toString(vValues)
设置 jLib = 无
结束函数
我有一个包装函数,它在 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"等...
我很想让查询参数正常工作,并且想知道我上面的代码有什么问题。非常感谢您的帮助!
您要执行的请求是:
/v3/surveys?api_key=<key>&fields=per_page
并期望字段 returned 仅为 per_page(无数据或其他任何内容)?
我认为这行不通,我认为 fields
url 参数仅适用于特定资源,不适用于资源列表。
因此,如果您想过滤掉特定的调查,这会起作用:
/v3/surveys/<survey_id>?api_key=<key>&fields=title
但对于资源列表而言,它总是 return 可用项目的总数、您当前所在的页面、每页的项目数、分页链接以及所有data
.
编辑:解释如何获得调查回复
获取调查回复的文档是 here。根据您的评论,您想做的是:
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>
鉴于您正在使用电子邮件收集器(这就是您收集他们的电子邮件的方式),并且该调查的列表中实际上应该只有一个响应 ID returned,除非他们回答调查的次数超过一次。如果是这样,那么您可以
GET /v3/surveys/<id>/responses/bulk?api_key=<key>&email=<email>&start_created_at=<begin_range>&end_created_at=<end_range>
只有一个请求,您可以获得所有回复,包括在一个请求中给定电子邮件的答复。
我有这样的代码 vRequestBody = "{""survey_id"":" & Quoted(sSurveyID) _ & ", ""fields"":[""collector_id"", ""url"", ""open"", ""type"", ""name" ", ""date_created"", ""date_modified""]" _ & "}"
或
vRequestBody = "{"_ & JKeyValue("fields", 数组("title", "date_created", "date_modified", "num_responses", _ "language_id"、"question_count"、"preview_url"、"analysis_url")) & "}"
其中 JKeyValue 使用 json class https://code.google.com/archive/p/vba-json/
函数引用(var As Variant)作为字符串 Quoted = Chr(34) & Replace(var, Chr(34), "''") & Chr(34) ' "str" 用成对的单引号替换嵌入的双引号 结束函数
函数 JKeyValue(sKey As String, vValues As Variant) As String 将 jLib 调暗为新的 ClsJSONLib JKeyValue = jLib.toString(sKey) & ":" & jLib.toString(vValues) 设置 jLib = 无 结束函数