private XmlDocument GetGoogleReport(long id, string email, string
password, DateTime startDate, DateTime endDate)
{
Console.WriteLine("Enter GetGoogleReport");
XmlDocument xDoc = new XmlDocument();
SafeReportService service = new SafeReportService();
service.emailValue = new email();
service.emailValue.Text = new String[] { email };
service.passwordValue = new password();
service.passwordValue.Text = new String[] { password };
service.clientEmailValue = new clientEmail();
service.clientEmailValue.Text = new String[] { email };
service.useragentValue = new useragent();
service.useragentValue.Text = new String[] { "XXXXXXX: Get Daily Url
Reports" };
service.developerTokenValue = new developerToken();
service.developerTokenValue.Text = new String[]
{ Constants.GoogleDeveloperTokenValue };
service.applicationTokenValue = new applicationToken();
service.applicationTokenValue.Text = new String[]
{ Constants.GoogleApplicationTokenValue };
// Create report job structure.
Console.WriteLine("Create Job");
DefinedReportJob job = new DefinedReportJob();
job.selectedReportType = "Url";
job.name = "Daily Url Report";
job.aggregationTypes = new String[] { "Daily" };
job.adWordsType = AdWordsType.SearchOnly;
job.keywordType = KeywordType.Broad;
job.startDay = new DateTime();
job.startDay = startDate;
job.endDay = new DateTime();
job.endDay = endDate;
job.selectedColumns = new String[]
{
"Campaign", "AdGroup", "DestinationURL", "MaximumCPC",
"MaxContentCPC", "Impressions", "Clicks", "CTR",
"Cost"
};
// Validate report.
try
{
Console.WriteLine("Validate Job");
service.validateReportJob(job);
Thread.Sleep(15000);
// Schedule report.
Console.WriteLine("Get Job Id");
long jobId = service.scheduleReportJob(job);
Thread.Sleep(15000);
// Wait for report to finish.
Console.WriteLine("Get Status");
ReportJobStatus status = service.getReportJobStatus(jobId);
while (status != ReportJobStatus.Completed && status !=
ReportJobStatus.Failed)
{
Console.WriteLine("Report job status is \"" + status + "\".");
Thread.Sleep(30000);
status = service.getReportJobStatus(jobId);
}
if (status == ReportJobStatus.Failed)
{
Console.WriteLine("Report job generation failed.");
Logger.WriteLog("Report job generation failed.",
EventLogEntryType.Error);
return null;
}
// Download report.
Thread.Sleep(15000);
String url = service.getGzipReportDownloadUrl(jobId);
Console.WriteLine("Report is available at \"" + url + "\".");
service.Dispose();
// get the file
Console.WriteLine("Get job File");
HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(url);
HttpWebResponse webResponse = (HttpWebResponse)
webRequest.GetResponse();
GZipStream zipStream = new
GZipStream(webResponse.GetResponseStream(),
CompressionMode.Decompress);
byte[] buffer = new byte[2048];
MemoryStream memoryStream = new MemoryStream();
while (true)
{
int read = zipStream.Read(buffer, 0, buffer.Length);
if (read <= 0) break;
memoryStream.Write(buffer, 0, read);
}
memoryStream.Position = 0;
Console.WriteLine("Load To XML");
xDoc.Load(memoryStream);
}
catch (Exception ex2)
{
Console.WriteLine("Report job failed validation due to the following
error: \"" + ex2.Message + "\".");
Logger.WriteLog("Report job failed validation due to the following
error: \"" + ex2.Message + "\".", EventLogEntryType.Warning);
}
return xDoc;
}
*****************************************************************************************************
using System;
using System.Net;
namespace GetGoogleReports
{
public class SafeReportService : Google.ReportService.ReportService
{
protected override WebRequest GetWebRequest(Uri uri)
{
ServicePointManager.Expect100Continue = false;
HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(uri);
request.KeepAlive = false;
request.ProtocolVersion = HttpVersion.Version10;
return request;
}
}
}
On May 20, 3:30 pm, AdWords API Advisor <
adwordsapiadvi...@google.com>