private WebRequest CreateAdwordsReportRequest(DeliveryFile file, AdWordsUser user, string postBody) { var config = user.Config as AdWordsAppConfig; var request = WebRequest.Create(file.SourceUrl) as HttpWebRequest; if (config == null || request == null) { return(null); } request.Timeout = 100000; if (!string.IsNullOrEmpty(postBody)) { request.Method = "POST"; } if (!string.IsNullOrEmpty(config.ClientCustomerId)) { request.Headers.Add("clientCustomerId: " + (user.Config as AdWordsAppConfig).ClientCustomerId); } request.ContentType = "application/x-www-form-urlencoded"; if (config.EnableGzipCompression) { request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; } else { request.AutomaticDecompression = DecompressionMethods.None; } if (config.AuthorizationMethod == AdWordsAuthorizationMethod.ClientLogin) { string authToken = AdwordsUtill.GetAuthToken(user); (user.Config as AdWordsAppConfig).AuthToken = authToken; request.Headers["Authorization"] = "GoogleLogin auth=" + authToken; } request.Headers.Add("returnMoneyInMicros: true"); request.Headers.Add("developerToken: " + (user.Config as AdWordsAppConfig).DeveloperToken); //Try to unmark the following comment in case of api error //The client library will use only apiMode = true. //request.Headers.Add("apiMode", "true"); return(request); }
protected override Core.Services.ServiceOutcome DoPipelineWork() { _batchDownloadOperation = new BatchDownloadOperation() { MaxConcurrent = 1 }; _batchDownloadOperation.Progressed += new EventHandler(_batchDownloadOperation_Progressed); _filesInProgress = this.Delivery.Files.Count; bool includeZeroImpression = Boolean.Parse(this.Delivery.Parameters["includeZeroImpression"].ToString()); //Sets Date Range and time period _dateRange = GA201406.ReportDefinitionDateRangeType.CUSTOM_DATE; string startDate = this.TimePeriod.Start.ToDateTime().ToString("yyyyMMdd"); string endDate = this.TimePeriod.End.ToDateTime().ToString("yyyyMMdd"); _waitHandle = new AutoResetEvent(false); foreach (string clientId in (string[])this.Delivery.Parameters["AdwordsClientIDs"]) { //Get all files on specific client var files = from f in this.Delivery.Files where f.Parameters["AdwordsClientID"].ToString() == clientId select f; #region Adwords User //================================================================================== Dictionary <string, string> headers = new Dictionary <string, string>() { { "DeveloperToken", this.Delivery.Parameters["DeveloperToken"].ToString() }, { "UserAgent", FileManager.UserAgentString }, { "EnableGzipCompression", "true" }, { "ClientCustomerId", clientId }, { "Email", this.Delivery.Parameters["MccEmail"].ToString() } }; AdWordsUser user = new AdWordsUser(headers); (user.Config as AdWordsAppConfig).AuthorizationMethod = AdWordsAuthorizationMethod.OAuth2; AdwordsUtill.GetOAuthDetailsFromDB(this.Delivery.Parameters["OAuth2ClientId"].ToString(), user); //================================================================================== #endregion Adwords User bool firstCheck = true; List <string> awqls = new List <string>(); foreach (DeliveryFile file in files) { GA201406.ReportDefinitionReportType reportType; //Validate Google report type if (Enum.IsDefined(typeof(GA201406.ReportDefinitionReportType), file.Parameters["ReportType"].ToString())) { reportType = (GA201406.ReportDefinitionReportType)Enum.Parse(typeof(GA201406.ReportDefinitionReportType), file.Parameters["ReportType"].ToString(), true); } else { throw new Exception("Google Adwords Report Type Error ! Could not find Enum value for report type"); } if (Enum.IsDefined(typeof(GA201406.ReportDefinitionReportType), file.Parameters["ReportType"].ToString())) { reportType = (GA201406.ReportDefinitionReportType)Enum.Parse(typeof(GA201406.ReportDefinitionReportType), file.Parameters["ReportType"].ToString(), true); } else { throw new Exception("Google Adwords Report Type Error ! Could not find Enum value for report type"); } //Creating AWQL StringBuilder sb = new StringBuilder(); sb.Append("SELECT "); foreach (string item in GoogleStaticReportFields.REPORTS_FIELDS[reportType][file.Parameters["ReportFieldsType"].ToString()]) { sb.Append(item); sb.Append(","); } sb.Remove(sb.Length - 1, 1); // removing last "," sb.Append(" FROM " + reportType.ToString()); if (!includeZeroImpression && GoogleStaticReportFields.REPORTS_FIELDS[reportType][file.Parameters["ReportFieldsType"].ToString()].Contains("")) { sb.Append(" WHERE Impressions > 0"); } if (file.Name.Equals(GoogleStaticReportsNamesUtill._reportNames[GA201406.ReportDefinitionReportType.PLACEHOLDER_FEED_ITEM_REPORT])) //Site link file { if (sb.ToString().Contains("WHERE")) { sb.Append("AND ClickType IN [SITELINKS] AND PlaceholderType IN [1] "); } else { sb.Append(" WHERE ClickType IN [SITELINKS] AND PlaceholderType IN [1] "); } } sb.Append(string.Format(" DURING {0},{1}", startDate, endDate)); AdWordsAppConfig config = (AdWordsAppConfig)user.Config; string QUERY_REPORT_URL_FORMAT = "{0}/api/adwords/reportdownload/{1}?" + "__fmt={2}"; string reportVersion = "v201406"; string format = GA201406.DownloadFormat.GZIPPED_CSV.ToString(); file.SourceUrl = string.Format(QUERY_REPORT_URL_FORMAT, config.AdWordsApiServer, reportVersion, format); string query = sb.ToString(); string postData = string.Format("__rdquery={0}", HttpUtility.UrlEncode(query)); awqls.Add(query); //Validate Report if (firstCheck) { string error = string.Empty; if (!ValidateReport(file, user, postData, out error)) { //CHEKING FOR INVALID AUTHTOKEN if (error.Contains(GA201406.AuthenticationErrorReason.GOOGLE_ACCOUNT_COOKIE_INVALID.ToString())) { //RENEWING AUTHTOKEN throw new Exception("GOOGLE_ACCOUNT_COOKIE_INVALID, RENEWING AUTHTOKEN is not supported on version V201406"); //(user.Config as AdWordsAppConfig).AuthToken = AdwordsUtill.GetAuthToken(user, generateNew: true); } else { throw new Exception("Google Adwords API Error: " + error); } } firstCheck = !firstCheck; } //If Validate - Success DownloadFile(file, user, postData); } } _batchDownloadOperation.Start(); _batchDownloadOperation.Wait(); _batchDownloadOperation.EnsureSuccess(); //INCASE OF GENERAL EXCEPTION OPEN DELIVERY FILE HAS HTML AND VIEW INNER ERROR this.Delivery.Save(); return(Core.Services.ServiceOutcome.Success); }
protected override ServiceOutcome DoPipelineWork() { _batchDownloadOperation = new BatchDownloadOperation { MaxConcurrent = 1 }; _batchDownloadOperation.Progressed += _batchDownloadOperation_Progressed; var includeZeroImpression = Boolean.Parse(Delivery.Parameters["includeZeroImpression"].ToString()); // time period var startDate = Delivery.TimePeriodDefinition.Start.ToDateTime().ToString("yyyyMMdd"); var endDate = Delivery.TimePeriodDefinition.End.ToDateTime().ToString("yyyyMMdd"); foreach (var clientId in (string[])Delivery.Parameters["AdwordsClientIDs"]) { //Get all files on specific client var files = Delivery.Files.Where(x => x.Parameters["AdwordsClientID"].ToString() == clientId); //Setting Adwords User var headers = new Dictionary <string, string> { { "DeveloperToken", Delivery.Parameters["DeveloperToken"].ToString() }, { "UserAgent", FileManager.UserAgentString }, { "EnableGzipCompression", "true" }, { "ClientCustomerId", clientId }, { "Email", Delivery.Parameters["MccEmail"].ToString() } }; var user = new AdWordsUser(headers); // AuthToken var config = user.Config as AdWordsAppConfig; if (config == null) { throw new Exception("Failed to convert AdwordUser.Config to AdWordsAppConfig"); } config.AuthToken = AdwordsUtill.GetAuthToken(user); var firstCheck = true; var awqls = new List <string>(); foreach (var file in files) { // report type GA201302.ReportDefinitionReportType reportType; if (Enum.IsDefined(typeof(GA201302.ReportDefinitionReportType), file.Parameters["ReportType"].ToString())) { reportType = (GA201302.ReportDefinitionReportType)Enum.Parse(typeof(GA201302.ReportDefinitionReportType), file.Parameters["ReportType"].ToString(), true); } else { throw new ConfigurationErrorsException(String.Format("Unknown Google Adwords Report Type '{0}'", file.Parameters["ReportType"])); } // Creating AWQL var sb = new StringBuilder(); sb.AppendFormat("SELECT {0} FROM {1}", file.Parameters["ReportFields"], file.Parameters["ReportType"]); if (!includeZeroImpression) { sb.Append(" WHERE Impressions > 0"); } sb.AppendFormat(" DURING {0},{1}", startDate, endDate); var format = GA201302.DownloadFormat.GZIPPED_CSV.ToString(); file.SourceUrl = string.Format(QUERY_REPORT_URL_FORMAT, config.AdWordsApiServer, REPORT_VERSION, format); var query = sb.ToString(); var postData = string.Format("__rdquery={0}", HttpUtility.UrlEncode(query)); awqls.Add(query); //Validate Report if (firstCheck) { string error; if (!ValidateReport(file, user, postData, out error)) { //CHEKING FOR INVALID AUTHTOKEN if (error.Contains(GA201302.AuthenticationErrorReason.GOOGLE_ACCOUNT_COOKIE_INVALID.ToString())) { //RENEWING AUTHTOKEN config.AuthToken = AdwordsUtill.GetAuthToken(user, generateNew: true); } else { throw new Exception(String.Format("Google Adwords API Error: {0}", error)); } } firstCheck = false; } //If Validate - Success DownloadFile(file, user, postData); } } Progress = 0.2; _batchDownloadOperation.Start(); _batchDownloadOperation.Wait(); _batchDownloadOperation.EnsureSuccess(); //INCASE OF GENERAL EXCEPTION OPEN DELIVERY FILE HAS HTML AND VIEW INNER ERROR Progress = 0.9; Delivery.Save(); return(ServiceOutcome.Success); }