public IEnumerable<IMetricsProvider> GetMetrics(int days) { List<IMetricsProvider> list = new List<IMetricsProvider>(); string payload = string.Empty; Task task = Task.Run(new Action(() => { payload = GetPayload(days).Result; })); task.Wait(); JArray jobjects = JArray.Parse(payload); foreach (JObject jobject in jobjects) { ProviderMetrics item = new ProviderMetrics(); item.Name = (string)jobject["date"]; JArray stats = (JArray)jobject["stats"]; JObject metrics = (JObject)stats[0]["metrics"]; item.Bounces = (int)metrics["bounces"]; item.Clicks = (int)metrics["clicks"]; item.Opens = (int)metrics["opens"]; item.Sends = (int)metrics["delivered"]; item.Unsubscribes = (int)metrics["unsubscribes"]; list.Add(item); } return list; }
public IEnumerable<IMetricsProvider> GetMetrics(int days) { /////////////////////////////////////////////////////////////////// // // Instantiate the client // /////////////////////////////////////////////////////////////////// sessionHeader header = new sessionHeader(); BrontoSoapPortTypeClient client = new BrontoSoapPortTypeClient(); header.sessionId = client.login(ConfigurationManager.AppSettings[GetType().Name]); /////////////////////////////////////////////////////////////////// // // Retrieve the contact for which you need the metrics. // /////////////////////////////////////////////////////////////////// contactFilter cf = new contactFilter(); cf.id = new string[] { "4a8e4dc1-e38f-438b-b8b5-75e46799bc9c" }; readContacts rc = new readContacts(); rc.filter = cf; contactObject[] co = client.readContacts(header, rc); contactObject mycontact = co[0]; /////////////////////////////////////////////////////////////////// // // Create a deliverFilter and read all deliverObjects // /////////////////////////////////////////////////////////////////// deliveryFilter df = new deliveryFilter(); df.deliveryType = new string[] { "normal","test","automated","split","transactional","triggered" }; readDeliveries rd = new readDeliveries(); rd.filter = df; deliveryObject[] dos = client.readDeliveries(header, rd); /////////////////////////////////////////////////////////////////// // // Extract deliverObjects into ProviderMetrics // /////////////////////////////////////////////////////////////////// List<IMetricsProvider> list = new List<IMetricsProvider>(); try { foreach (deliveryObject doj in dos) { ProviderMetrics item = new ProviderMetrics(); //deliveryRecipientObject[] dro = doj.recipients; // id can be contact id, list id or segment id //dro[0].id // if contactId, there are metrics by contact, but that doesn't tell the full story /* deliveryRecipientFilter drf = new deliveryRecipientFilter(); drf.deliveryId = doj.id; readDeliveryRecipients rdr = new readDeliveryRecipients(); rdr.filter = drf; deliveryRecipientStatObject[] drso = client.readDeliveryRecipients(header, rdr); */ // Once we receive the deliveryRecipientStatObject, we have to check // if this object has click/send/bounce and store the contactId accordingly item.Name = doj.messageId; item.Bounces = (int)doj.numBounces; item.Clicks = (int)doj.numClicks; item.Opens = (int)doj.numOpens; item.Sends = (int)doj.numSends; // read unsubscribes unsubscribeFilter uf = new unsubscribeFilter(); uf.deliveryId = doj.id; readUnsubscribes ru = new readUnsubscribes(); ru.filter = uf; ru.pageNumber = 1; if (client.readUnsubscribes(header, ru) == null) item.Unsubscribes = 0; else item.Unsubscribes = client.readUnsubscribes(header, ru).Length; list.Add(item); } } catch (Exception e) { MessageBox.Show(e.Message); ProviderMetrics item = new ProviderMetrics(); item.Name = "null"; item.Bounces = 0; item.Clicks = 0; item.Opens = 0; item.Sends = 0; item.Unsubscribes = 0; list.Add(item); } return list; }