using KdanCommon.CMSCollection.Data; using KdanCommon.GoogleCloud.Data.Vision; using KdanCommon.Helpers; using KdanCommon.Mixpanel.Data; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using Windows.ApplicationModel.Email.DataProvider; using Windows.Data.Json; using Windows.Media.Protection.PlayReady; namespace KdanCommon.Mixpanel { public class Mixpanel { private static string MixpanelDomain = "https://api.mixpanel.com"; private HttpClient _httpClient = null; private string _projectId = null; private string _projectToken = null; private Uri _importUri = null; private Uri _setProfileUri = null; private Uri _createAlias = null; public Mixpanel(string userName, string userSecret, string projectId) { _projectId = projectId; _httpClient = new HttpClient(); string authValue = Convert.ToBase64String(Encoding.UTF8.GetBytes(userName + ":" + userSecret)); _httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", authValue); _importUri = new Uri($"{MixpanelDomain}/import?strict=1&project_id={projectId}"); _setProfileUri = new Uri($"{MixpanelDomain}/engage?verbose=1#profile-set"); _createAlias = new Uri($"{MixpanelDomain}/import?project_id={projectId}#identity-create-alias"); } ~Mixpanel() { _httpClient.Dispose(); } public async Task ImportEvents(EventData[] events) { var eventsJsonStr = JsonConvert.SerializeObject(events); var content = new StringContent(eventsJsonStr, System.Text.Encoding.UTF8, "application/json"); var res = await _httpClient.PostAsync(_importUri, content); if(res.Content != null) { var jsonString = await res.Content.ReadAsStringAsync(); var response = JsonTool.DeserializeJSON(jsonString); if(response.Code != 200) { // log } } } public async Task SetProfile(ProfileData[] profiles) { var profilesJsonStr = JsonConvert.SerializeObject(profiles); var content = new StringContent(profilesJsonStr, System.Text.Encoding.UTF8, "application/json"); var res = await _httpClient.PostAsync(_setProfileUri, content); if (res.Content != null) { var jsonString = await res.Content.ReadAsStringAsync(); var response = JsonTool.DeserializeJSON(jsonString); if (response.Error != null) { // log } } } public async Task CreateAlias(string distinctId, string aliasTo, string projectToken) { var alias = new AliasData() { Event = "$create_alias", Properties = new Properties() { DistinctId = distinctId, Alias = aliasTo, Token = projectToken } }; var aliasJsonStr = JsonConvert.SerializeObject(alias); var formData = new FormUrlEncodedContent(new[] { new KeyValuePair("data", aliasJsonStr), new KeyValuePair("strict", "1"), }); var res = await _httpClient.PostAsync(_createAlias, formData); if (res.Content != null) { var jsonString = await res.Content.ReadAsStringAsync(); var response = JsonTool.DeserializeJSON(jsonString); if (response.Error != null) { // log } } } } }