9

mixpanelに接続できません。

次のように、正しい api_key と api_secret を試しました。

<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に詳しい方いらっしゃいませんか?

前もって感謝します。

編集: ページの新しいバージョンを追加しました。

4

6 に答える 6

3

ここで私が気づいたことがいくつかあります。試した他のすべてのエンドポイントで動作させることができましたが、「エクスポート」しました。これは生データのエクスポート エンドポイントだけに特有のものだと思いたくなりました。彼らのドキュメントを読むと、生データ エンド ポイントはメイン API の一部ではない唯一のエンド ポイントであるため、別のベース URI " https://data.mixpanel.com/api/2.0 " が必要です。他のすべてのエンドポイント「イベント」、「セグメンテーション」などは、「https://mixpanel.com/api/2.0」を使用します。以下に行った手順を書き留めます。md5実装にjquery.MD5 libを使用しています

$(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/

お役に立てば幸いです。

于 2013-02-05T01:27:04.687 に答える
2

この PHPに目を細めた後、API 署名の md5 ハッシュを実行する必要があると確信しています。

このようなmd5ライブラリをインポートします

<script type="text/javascript" src="jquery.md5.min.js"></script>

そして、次のようにします。

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 オブジェクトであり、私はまだその部分にこだわっています。ここに私がこれまでに持っているものがあります:

<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# プログラムを作成し、API にアクセスして CSV を出力しました。

于 2012-10-31T19:49:23.987 に答える
1

ドキュメントから:

JS クライアント ライブラリはありませんが、API バックエンドに jsonp を実装しています。簡単な概要については、ウィキペディアの記事を参照してください。jsonp パラメータは「callback」です。このパラメーターは、署名の計算中には使用されません。

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);
        });
于 2012-11-20T02:39:54.820 に答える
0

Tyler が言及したように、署名をリクエスト URL に追加する前に MD5 ハッシュする必要があります。

さらに、貼り付けたものが自分のコードである場合は、バグがあります。

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

次のようにする必要があります。

path = path + "&sig=" + sig

于 2012-11-02T19:50:27.483 に答える
0

多くのことを試しましたが、新しいパラメーターが生成されたため、jsonp を使用して mixpanel にリクエストを送信できませんでした。誰も実用的な解決策を教えてくれなかったので、この問題は解決できないと思います。誰かが私に解決策を示した場合、私は喜んでこの回答を削除し、彼/彼女の回答を受け入れます.

于 2012-11-12T15:51:47.803 に答える
0

/export エンドポイントは、JSONP コールバックをサポートしていないように見えます。署名を計算し、コールバックとキャッシュバスター (デフォルトでは $.ajax 呼び出しで提供) なしで URL を呼び出すと、結果が得られます。

于 2013-08-12T20:47:39.733 に答える