首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用mixpanel API?

如何使用mixpanel API?
EN

Stack Overflow用户
提问于 2012-10-30 21:43:31
回答 6查看 7.3K关注 0票数 9

我无法连接到mixpanel。

我尝试使用正确的api_key和api_secret,如下所示:

代码语言:javascript
复制
<html>
<head>
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.2.min.js" />
    </script>
    <script type="text/javascript" src="faulty-labs-md5.js" />
    </script>
</head>
<body>
    <script type="text/javascript">
$(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);
            }
        });
    });
});
    </script>
    <input type="text" id="date1" value="2012-10-29" />
    <input type="text" id="date2" value="2012-10-29" />
    <button onclick="return false" id="btnTest">Test</button>
</body>
</html>

正如您所看到的,我尝试将此API与JSONP一起使用,但我迷失了方向。有没有人了解mixpanel和JSONP?

提前谢谢你。

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-11-20 10:39:55

从文档中:

jsonp我们没有JS客户端库,但我们在

后台实现了jsonp。有关简要概述,请参阅Wikipedia文章。我们的jsonp参数是'callback‘。签名计算时不会使用该参数。

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

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

代码语言:javascript
复制
 $.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);
        });
票数 1
EN

Stack Overflow用户

发布于 2013-02-05 09:27:05

下面是我意识到的几件事。我可以让它与我尝试过的所有其他端点一起工作,但“导出”除外。我很想相信这只是原始数据导出端点所特有的。通过读取它们的docs,原始数据端点是惟一的端点,它不是主API的一部分,因此需要不同的基URI "https://data.mixpanel.com/api/2.0“。所有其他端点“事件”、“分段”等都使用"https://mixpanel.com/api/2.0“。我已经记下了我在下面经历的步骤。我为md5实现使用了jquery.MD5

代码语言:javascript
复制
$(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/

希望你会发现它是有用的。

票数 3
EN

Stack Overflow用户

发布于 2012-11-01 03:49:24

看了看api之后,我确信你需要对你的this PHP签名做一个md5散列。

导入this one等md5库

代码语言:javascript
复制
<script type="text/javascript" src="jquery.md5.min.js"></script>

然后做一些像这样的事情:

代码语言:javascript
复制
var sig = "api_key=" + api_key + "expire=" + expire + "from_date=" + from_date + "to_date=" + to_date + "bigsecret2";
sig = $.md5(sig);

我正在试着完成和你一样的事情,但不幸的是我仍然没有让它工作。

编辑-这是粗略的。如果有任何参数没有使用sig进行散列,API将会失败。如果包含的参数不是API的一部分,它也会失败。JsonP添加了一个“回调”和一个"_“时间戳参数,这样它就可以做它所做的事情,这就中断了调用。您可以通过使用cache: true排除时间戳并使用特殊的jsonp插件来解决此问题,该插件允许您重命名callback参数。这里我将其重命名为to_date,并将回调函数命名为"2012-10-29“。这很疯狂,但它仍然不能工作,因为回复不是有效的json。它是一系列以换行符分隔的json对象,无法求值,我仍然被这部分卡住了。这是我到目前为止所得到的:

代码语言:javascript
复制
<script type="text/javascript" src="jquery-1.8.2.js"></script>
<script type="text/javascript" src="jquery.md5.min.js"></script>
<script type="text/javascript" src="jquery.jsonp-2.4.0.js"></script>

<script>
    var events = document.getElementById("events");

    var api_key = "secret";
    var expire = "1351811239";
    var from_date = "2012-10-29";
    var to_date = "2012-10-29";

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


    var path = 'https://data.mixpanel.com/api/2.0/export?api_key=' + api_key + "&expire=" + expire + "&from_date=" + from_date;
    // to_date will be added later as the sneaky callback

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

    $.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);
        }
    });

</script>

最终,我放弃了我的双手,写了一个C#程序来点击应用程序接口,并为我吐出一个CSV。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13140336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档