【问题标题】:Survey Monkey API Query Parameters not working on Excel VBASurvey Monkey API 查询参数不适用于 Excel VBA
【发布时间】:2016-10-18 01:55:59
【问题描述】:

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

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

【问题讨论】:

    标签: json vba excel surveymonkey


    【解决方案1】:

    您正在尝试执行的请求是:

    /v3/surveys?api_key=<key>&fields=per_page
    

    并期望返回的字段仅为 per_page(无数据或其他任何内容)?

    我认为这行不通,我认为fields url 参数仅适用于特定资源,而不适用于资源列表。

    因此,如果您想过滤掉特定的调查,这会起作用:

    /v3/surveys/<survey_id>?api_key=<key>&fields=title
    

    但不是资源列表,它总是会返回可用项目的总量,你当前在哪个页面,每页有多少项目,分页链接以及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,除非他们多次回答该调查。如果是这种情况,那么您可以这样做

    GET /v3/surveys/<id>/responses/bulk?api_key=<key>&email=<email>&start_created_at=<begin_range>&end_created_at=<end_range>
    

    仅,通过一个请求,您可以获得所有响应,包括一个请求中给定电子邮件的答案。

    【讨论】:

    • 感谢您的回复。这个link bold 以某种方式暗示
    • 啊,该链接适用于 API V2,其工作方式略有不同。在这种情况下,显示fields 参数中指定的字段。在 API 的 V3 中,fields 过滤掉除指定内容之外的所有内容,如果不包含它,您将得到所有内容。你不需要在 V3 中使用那个 URL 参数,我会忽略它。
    • 对不起,我的意思是说我尝试做类似的事情: Dim vRequestBody As String and assign vRequestBody = "{""survey_id:""86003167"",""fields"":[""title ""]" & "}" 并将此输入作为上面定义的 VBA 函数中的发送方法的一部分传递。仅对标题进行子集化并没有太多运气。看起来像这样link 建议这将是正确的方法,但似乎不适用于我...非常感谢您再次提供帮助!
    • 我想我最终想要实现的是检索特定用户(可能通过电子邮件识别)和/或特定时间段的调查回复。此外,如果响应跨越多个页面,我想通过 API 查询来访问其他页面。让那个查询条件开始工作有点困难哈哈
    • 啊!这很好用。似乎所有查询都可以在 http 语句上完成。非常感谢!
    【解决方案2】:

    我有类似的代码 vRequestBody = "{""survey_id"":" & Quoted(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”))和“}”

    JKeyValue 使用 json 类的地方 https://code.google.com/archive/p/vba-json/

    函数引用(var As Variant) As String 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 = 无 结束函数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      • 2013-01-19
      • 2021-10-11
      • 2017-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多