I am trying to get all the advertiser accounts under my MCC account and
generate an ad performance report for each. I wanted to run the report
once - but that isn't allowed from the MCC account. I'm coding in vb.net.
I have used some of the example code as my starting point. I have the
list of advertiser accounts under the MCC account - and I need to be able
to change to the new ClientCustomerId. The ClientCustomerId value
specified in my app.config file is that of the MCC account. How to I do
this? Right now when I run it - I am getting the
error CUSTOMER_SERVING_TYPE_REPORT_MISMATCH because it is trying to run the
report using the customer ID of the MCC account.
Thank you!
Imports System
Imports System.Collections.Generic
Imports System.IO
Imports System.Web
Imports System.Text
Imports Google.Api.Ads.AdWords.Lib
Imports Google.Api.Ads.AdWords.Util.Reports
Imports Google.Api.Ads.AdWords.v201402
Namespace Google.Api.Ads.AdWords.Examples.VB.v201402
Public Class DoubleClick_Adwords_Report_Download_With_AQWL
Public Shared Sub Main(ByVal args As String())
Try
Dim AcctHeirarchy As New
DoubleClick_Adwords_Report_Download_With_AQWL
' Get accounts (advertisers) under the MCM account ID that
was supplied in the app.config file
AcctHeirarchy.GetAccts(New AdWordsUser)
Catch ex As System.Exception
Console.WriteLine("An exception occurred", ex)
Environment.Exit(-1)
End Try
End Sub
Public Sub GetAccts(ByVal user As AdWordsUser)
' Get the ManagedCustomerService.
Dim mcService As ManagedCustomerService =
user.GetService(AdWordsService.v201402.ManagedCustomerService)
mcService.RequestHeader.clientCustomerId = Nothing
' Create selector.
Dim selector As New Selector()
selector.fields = New String() {"Login", "CustomerId", "Name"}
Try
' Get results.
Dim page As ManagedCustomerPage = mcService.get(selector)
' Display serviced account graph.
If Not page.entries Is Nothing Then
' Create map from customerId to customer node.
Dim customerIdToCustomerNode As Dictionary(Of Long,
ManagedCustomerTreeNode) = New Dictionary(Of Long,
ManagedCustomerTreeNode)()
' Create account tree nodes for each customer.
For Each customer As ManagedCustomer In page.entries
Dim node As New ManagedCustomerTreeNode()
node.Account = customer
customerIdToCustomerNode.Add(customer.customerId,
node)
Next
' For each link, connect nodes in tree.
If (Not page.links Is Nothing) Then
For Each link As ManagedCustomerLink In page.links
Dim managerNode As ManagedCustomerTreeNode =
customerIdToCustomerNode(link.managerCustomerId)
Dim childNode As ManagedCustomerTreeNode =
customerIdToCustomerNode(link.clientCustomerId)
childNode.ParentNode = managerNode
If (Not managerNode Is Nothing) Then
managerNode.ChildAccounts.Add(childNode)
End If
Next
End If
' Find the root account node in the tree.
Dim rootNode As ManagedCustomerTreeNode = Nothing
For Each account As ManagedCustomer In page.entries
If
(customerIdToCustomerNode(account.customerId).ParentNode Is Nothing) Then
rootNode =
customerIdToCustomerNode(account.customerId)
Exit For
End If
Next
' Display account tree.
' Console.WriteLine("Login, CustomerId, Name")
' Console.WriteLine(rootNode.ToTreeString(0, New
StringBuilder()))
* 'Generate Report for Each Account*
* For Each childAccount As ManagedCustomerTreeNode In
rootNode.ChildAccounts*
* Dim AdWordsReport As New
DoubleClick_Adwords_Report_Download_With_AQWL*
* Dim fileName As String = "Adwords" & "_" &
Format(Now(), "yyyyMMddHHmmss").ToString() & "_AdwordsDailyReporting_" &
childAccount.Account.customerId.ToString() & ".csv"*
* AdWordsReport.RunReport(New AdWordsUser, fileName)*
* Next*
Else
Console.WriteLine("No accounts were found.")
End If
Catch ex As Exception
Throw New System.ApplicationException("Failed to get
accounts.", ex)
End Try
End Sub
Public Sub RunReport(ByVal user As AdWordsUser, ByVal fileName As
String)
Dim query As String = "SELECT AccountDescriptiveName, Date,
CampaignName, AdGroupName, Id, " &
"Clicks, Impressions, Cost, ViewThroughConversions,
Conversions, ConversionsManyPerClick, Headline " &
"FROM AD_PERFORMANCE_REPORT WHERE Impressions > 0 DURING
LAST_30_DAYS "
Dim filePath As String = "K:\BulkLoad\DoubleClick" &
Path.DirectorySeparatorChar & fileName
Try
Dim utilities As New ReportUtilities(user)
utilities.ReportVersion = "v201402"
utilities.DownloadClientReport(query,
DownloadFormat.CSVFOREXCEL.ToString(), filePath)
Console.WriteLine("Report was downloaded to '{0}'.",
filePath)
Catch ex As Exception
Throw New System.ApplicationException("Failed to generate
report.", ex)
End Try
End Sub
Class ManagedCustomerTreeNode
''' <summary>
''' The parent node.
''' </summary>
Private _parentNode As ManagedCustomerTreeNode
''' <summary>
''' The account associated with this node.
''' </summary>
Private _account As ManagedCustomer
''' <summary>
''' The list of child accounts.
''' </summary>
Private _childAccounts As New List(Of ManagedCustomerTreeNode)
''' <summary>
''' Gets or sets the parent node.
''' </summary>
Public Property ParentNode() As ManagedCustomerTreeNode
Get
Return _parentNode
End Get
Set(ByVal value As ManagedCustomerTreeNode)
_parentNode = value
End Set
End Property
''' <summary>
''' Gets or sets the account.
''' </summary>
Public Property Account() As ManagedCustomer
Get
Return _account
End Get
Set(ByVal value As ManagedCustomer)
_account = value
End Set
End Property
''' <summary>
''' Gets or sets the child accounts.
''' </summary>
Public Property ChildAccounts() As List(Of
ManagedCustomerTreeNode)
Get
Return _childAccounts
End Get
Set(ByVal value As List(Of ManagedCustomerTreeNode))
_childAccounts = value
End Set
End Property
''' <summary>
''' Returns a <see cref="System.String"/> that represents this
instance.
''' </summary>
''' <returns>
''' A <see cref="System.String"/> that represents this instance.
''' </returns>
Public Overrides Function ToString() As String
Dim login As String = "(no login)"
If (Not String.IsNullOrEmpty(_account.login)) Then
login = _account.login
End If
Return String.Format("{0}, {1}, {2}", login,
_account.customerId, _account.name)
End Function
Public Function ToTreeString(ByVal depth As Integer, ByVal sb
As StringBuilder) As StringBuilder
For i As Integer = 0 To depth * 2
sb.Append("-")
Next
sb.Append(Me)
sb.Append("\n")
For Each childAccount As ManagedCustomerTreeNode In
_childAccounts
childAccount.ToTreeString(depth + 1, sb)
Next
Return sb
End Function
End Class
End Class
End Namespace
--
--
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
Also find us on our blog and Google+:
https://googleadsdeveloper.blogspot.com/
https://plus.google.com/+GoogleAdsDevelopers/posts
=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~=~
You received this message because you are subscribed to the Google
Groups "AdWords API Forum" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/adwords-api?hl=en
---
You received this message because you are subscribed to the Google Groups
"AdWords API Forum" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.