예제 #1
0
        public async static Task <dynamic> ImpressionsYesterday(List <string> companyNames)
        {
            var dailyImpressionsDTO = new DailyImpressionsDTO();

            dailyImpressionsDTO.DailyImpressionsSummary = new List <CompanyDailyImpressionsSummary>();

            foreach (string company in companyNames)
            {
                string customerID;

                try
                {
                    using (Entities db = new Entities())
                    {
                        customerID = AliasMethods.GetAlias(company, db, "GoogleAdsCustomerID");
                    }
                }
                catch
                {
                    return(new ArgumentException($"No ID found for the company { company }"));
                }

                try
                {
                    GoogleAdsClient client = new GoogleAdsClient();

                    // Get the GoogleAdsService.
                    GoogleAdsServiceClient googleAdsService = client.GetService(
                        Services.V4.GoogleAdsService);

                    string dailyImpressionsQuery = "SELECT "
                                                   + "campaign.id, "
                                                   + "campaign.name, "
                                                   + "metrics.impressions "
                                                   + "FROM campaign "
                                                   + "WHERE campaign.serving_status='SERVING' "
                                                   + "AND segments.date DURING YESTERDAY";

                    RepeatedField <GoogleAdsRow> dailyImpressionsResults = RequestMethods.SearchRequest(customerID, dailyImpressionsQuery, googleAdsService);

                    if (dailyImpressionsResults.Any(x => x.Metrics.Impressions > 0 && x.Metrics.Impressions < 100))
                    {
                        dailyImpressionsDTO.DailyImpressionsSummary.Add(new CompanyDailyImpressionsSummary(company, dailyImpressionsResults));
                    }
                }
                catch (GoogleAdsException e)
                {
                    Debug.WriteLine("Failure:");
                    Debug.WriteLine($"Message: {e.Message}");
                    Debug.WriteLine($"Failure: {e.Failure}");
                    Debug.WriteLine($"Request ID: {e.RequestId}");
                }
            }

            return(await SendEmailAlert(dailyImpressionsDTO));
        }
예제 #2
0
        public async static Task <string> SendEmailAlert(DailyImpressionsDTO dailyImpressionsSummary)
        {
            Dictionary <string, string> emailConfig = ConfigDictionary.EmailConfig();

            string companies = string.Empty;

            foreach (CompanyDailyImpressionsSummary company in dailyImpressionsSummary.DailyImpressionsSummary)
            {
                string failingCampaigns = string.Empty;

                foreach (CampaignDailyImpressionsSummary campaign in company.Campaigns)
                {
                    failingCampaigns += $"<li>{ campaign.Name }: <span style='color:red;font-weight:bold;'>{ campaign.Impressions }</span> impressions</li>";
                }

                companies += $"<li><b>{ company.Name }</b>: <ul>{ failingCampaigns }</ul></li>";
            }

            string messageBody = "<html><body>" +
                                 $"<span style='display:inline-block;'><img src='https://cdn.shopify.com/s/files/applications/75204543d0fec5bbf9e7f1db609e8804_512x512.png?1594118407' style='width:50%;'/><h2>Google Ads Campaign Alert</h2></span>" +
                                 $"<p>The following campaigns achieved fewer than 100 impressions yesterday:</p><br/>" +
                                 $"<ul>{ companies }</ul>" +
                                 "</body></html>";

            try
            {
                await EmailAlert.SendEmailAlert(new EmailAddress(emailConfig["GoogleAdsRecipientAddress"]),
                                                $"Google Ads Campaign Alert",
                                                messageBody);

                return("Email sent!");
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception.ToString());

                return("Email failed to send.");
            }
        }