api_key = $api_key; $this->api_secret = $api_secret; } public function request($end_point, $method, $params, $format='json') { // $end_point is an API end point such as events, properties, funnels, etc. // $method is an API method such as general, unique, average, etc. // $params is an associative array of parameters. // See http://mixpanel.com/api/docs/guides/api/ if (count($params) < 1) return false; if (!isset($params['api_key'])) $params['api_key'] = $this->api_key; $params['format'] = $format; if (!isset($params['expire'])) { $current_utc_time = time() - date('Z'); $params['expire'] = $current_utc_time + 600; // Default 10 minutes } foreach ($params as $param => &$value) { if (is_array($value)) $value = json_encode($value); //$param_query = null; $param_query .= '&' . urlencode($param) . '=' . urlencode($value); } $sig = $this->signature($params); $uri = 'api/' . $end_point . '/' . $this->version . '/' . $method; $request_url = $uri . '?sig=' . $sig . $param_query; $curl_handle=curl_init(); curl_setopt($curl_handle,CURLOPT_URL,'http://mixpanel.com/'.$request_url); curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2); curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1); $data = curl_exec($curl_handle); curl_close($curl_handle); return $data; } private function signature($params) { ksort($params); //$param_string =''; foreach ($params as $param => $value) { $param_string .= $param . '=' . $value; } return md5($param_string . $this->api_secret); } // // Example usage // $api_key = 'your key'; // $api_secret = 'your token'; // // $mp = new Mixpanel($api_key, $api_secret); // $data = $mp->request('properties', 'unique', array( // 'name' => 'domain', // 'event' => 'pageview', // 'unit' => 'day', // 'interval' => '20', // 'limit' => '20' // )); }?>