Survey Monkey API查询参数无法在Excel VBA上运行

时间:2016-10-18 01:55:59

标签: json vba excel-vba surveymonkey excel

我有一个在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”等...

我很想让查询参数正常工作,并想知道上面的代码出了什么问题。非常感谢您的帮助!

2 个答案:

答案 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 结束功能