Created
August 13, 2019 14:35
-
-
Save Rickedb/4fca03328793136109e74b131edd47bb to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class GoogleAdWordsService | |
{ | |
private readonly AdWordsAppConfig _config; | |
public GoogleAdWordsService(AdWordsAppConfig config) | |
{ | |
_config = config; | |
} | |
public async Task<object> GetReport(string customerId) | |
{ | |
var reportDefinition = new ReportDefinition() | |
{ | |
reportName = "MyReportName", | |
selector = new Selector() | |
{ | |
dateRange = new DateRange() | |
{ | |
min = DateTime.Now.AddDays(-2).ToString("yyyy-MM-dd"), | |
max = DateTime.Now.ToString("yyyy-MM-dd") | |
}, | |
fields = new string[] | |
{ | |
"CampaignName", | |
"AdGroupName", | |
"Date", | |
"Cost", | |
"CostPerConversion", | |
"Ctr", | |
"Impressions", | |
"Conversions", | |
"ConversionRate", | |
"Clicks", | |
"PercentNewVisitors" | |
} | |
}, | |
dateRangeType = ReportDefinitionDateRangeType.CUSTOM_DATE, | |
downloadFormat = DownloadFormat.XML, | |
reportType = ReportDefinitionReportType.AD_PERFORMANCE_REPORT, | |
}; | |
_config.ClientCustomerId = customerId; | |
var user = new AdWordsUser(_config); | |
user.OAuthProvider.RefreshAccessTokenIfExpiring(); | |
var response = await GetResponse(user, reportDefinition); | |
return await DownloadContent(response); | |
} | |
private async Task<ReportResponse> GetResponse(AdWordsUser user, IReportDefinition reportDefinition) | |
{ | |
var utils = new ReportUtilities(user, reportDefinition); | |
var response = default(ReportResponse); | |
utils.OnReady = new AdsReportUtilities.OnReadyCallback((r) => response = r); | |
utils.OnFailed = new AdsReportUtilities.OnFailedCallback((ex) => throw ex); | |
var task = Task.Run(async () => | |
{ | |
while (response == default(ReportResponse)) | |
await Task.Delay(300); | |
return response; | |
}); | |
utils.GetResponseAsync(); | |
return await task; | |
} | |
private async Task<object> DownloadContent(ReportResponse response) | |
{ | |
var result = default(object); | |
response.OnDownloadSuccess = new ReportResponse.OnDownloadSuccessCallback((bytes) => result = Encoding.UTF8.GetString(bytes)); | |
response.OnFailed = new ReportResponse.OnFailedCallback((ex) => result = ex.Message); | |
var task = Task.Run(async () => | |
{ | |
while (result == null) | |
await Task.Delay(1000); | |
return result; | |
}); | |
response.DownloadAsync(); | |
return await task; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment