我如何使用mixpanel API?

我无法连接到mixpanel。

我试过一个正确的api_key和api_secret,像这样:

         $(document).ready(function() { $("#btnTest").click(function() { var api_key = 'BigSecret'; var api_secret = 'BigSecret2'; var expire = new Date('2012', '12', '24').getTime() / 1000 + 3600; var from_date = $("#date1").val(); var to_date = $("#date2").val(); var sig = faultylabs.MD5("api_key=" + api_key + "expire=" + expire + "from_date=" + from_date + "to_date=" + to_date + api_secret); //var path = 'https://data.mixpanel.com/api/2.0/export?api_key=' + api_key + "&expire=" + expire + "&from_date=" + from_date + "&to_date=" + to_date; var path = 'https://data.mixpanel.com/api/2.0/export?api_key=' + api_key + "&expire=" + expire + "&from_date=" + from_date; path = path + "&sig=" + sig.toLowerCase(); $.jsonp({ type: 'GET', url: path, async: false, callback: to_date, // sneaky bogus shenanigans callbackParameter: 'to_date', // more of same contentType: "application/json", dataType: 'jsonp', cache: true, success: function(json) { alert(json); }, error: function(e) { console.log(e.message); } }); }); });       

正如您所看到的,我尝试将此API与JSONP一起使用,但我迷失在树林里。 有没有人知道mixpanel和JSONP?

先感谢您。

编辑:我添加了新版本的页面。

从文件:

我们没有JS客户端库,但我们在API后端实现了jsonp。 有关简要概述,请参阅Wikipedia文章。 我们的jsonp参数是’回调’。 在签名计算期间不会使用此参数。

https://mixpanel.com/docs/api-documentation/data-export-api#libs-js

假设您正确计算了签名,下面的示例将起作用:

  $.getJSON('http://mixpanel.com/api/2.0/segmentation/?callback=?', { event: event, from_date: from_date, to_date: to_date, expire: expire, sig: sig, api_key: api_key }, function (result) { alert(result); }); 

这里有一些我意识到的事情。 我能够使用我尝试的所有其他终点,但“导出”。 我很想相信它只是原始数据导出端点所特有的。 通过阅读他们的文档 ,原始数据端点是唯一不属于主API的端点,因此需要不同的基本URI“ https://data.mixpanel.com/api/2.0 ”。 所有其他端点“事件”,“分段”等使用“ https://mixpanel.com/api/2.0 ”。 我已经记下了我在下面介绍的步骤。 我正在使用jquery.MD5 lib来实现md5

 $(function() { $("#test_request").click(function() { var api_secret, arg_keys, args, args_concat, end_point, key, mixpanel_base_uri, sig, sorted_keys, _i, _len; args = {}; end_point = "export"; api_secret = "BIG_SECRET2"; args.api_key = "BIG_SECRET"; args.from_date = $("input[name=from_date]").val(); args.to_date = $("input[name=to_date]").val(); //using Math.floor to round to integer as api expects integer args.expire = Math.floor(new Date().getTime() / 1000 + 3600); arg_keys = Object.keys(args); sorted_keys = arg_keys.sort(); args_concat = ""; //concatenating key value pairs for (_i = 0, _len = sorted_keys.length; _i < _len; _i++) { key = sorted_keys[_i]; args_concat = "" + args_concat + key + "=" + args[key]; } sig = $.md5(args_concat + api_secret); //merge signature property with args hash $.extend(args, { sig: sig }); //export endpoint isn't part of the main api and data.mixpanel instead of just mixpanel.com DATA_URI = "https://data.mixpanel.com/api/2.0" DEFAULT_URI = "https://mixpanel.com/api/2.0" BASE_URI = end_point === "export" ? DATA_URI : DEFAULT_URI; $.getJSON("" + BASE_URI + "/" + end_point + "?callback=?", args, function(result) { alert("result is" + JSON.stringify(result)); }); }); }); 

我还为所有其他端点提供了一个可行的解决方案。 这是链接http://jsfiddle.net/Dantheta/CmKQN/

希望你觉得它有用。

在眯着眼看这个PHP之后 ,我很确定你需要对你的api签名做一个md5哈希。

导入一个像这样的md5库

  

然后做这样的事情:

 var sig = "api_key=" + api_key + "expire=" + expire + "from_date=" + from_date + "to_date=" + to_date + "bigsecret2"; sig = $.md5(sig); 

我正在努力完成同样的事情,但不幸的是我还没有完成它。

编辑 – 这很粗糙。 如果ANF参数未使用sig进行哈希处理,则API将失败。 如果包含任何不属于API的参数,它也将失败。 JsonP添加了一个“回调”和一个“_”时间戳参数,因此它可以执行它的操作,这会中断调用。 您可以通过使用cache: true排除时间戳并使用特殊的jsonp插件来解决此问题,该插件允许您重命名callback参数。 在这里,我将其重命名为to_date并将回调函数命名为“2012-10-29”。 它很疯狂,它仍然无法正常工作,因为答案无效json。 这是一系列新行分隔的json对象,无法进行评估,我仍然坚持这一部分。 这是我到目前为止所得到的:

     

最后,我举起手来写了一个C#程序来点击API并为我吐出一个CSV。

正如Tyler提到的那样,在将签名附加到请求URL之前,您需要对签名进行MD5哈希处理。

另外,如果你粘贴的是你的代码,你就有一个错误:

path = path + + "&sig=" + sig;

应该:

path = path + "&sig=" + sig

我尝试了很多东西但是我没有成功向mixpanel发送请求和jsonp,因为它生成了新的参数。 没人给我看一个有效的解决方案,所以我觉得这个问题无法解决。 如果有人向我展示了解决方案,我很乐意删除这个答案并接受他/她的回答。

/ export端点看起来好像不支持JSONP回调。 如果您计算签名并在没有回调且没有缓存破坏程序(默认情况下提供$ .ajax调用)的情况下调用URL,您将获得结果。