forked from emiddleton/gads
-
Notifications
You must be signed in to change notification settings - Fork 1
/
ad.go
176 lines (152 loc) · 6.49 KB
/
ad.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
package gads
import "encoding/xml"
// CommonAd define the parent type Ad type as defined
// https://developers.google.com/adwords/api/docs/reference/v201809/AdGroupAdService.Ad
type CommonAd struct {
Type string `xml:"xsi:type,attr,omitempty"`
ID int64 `xml:"id,omitempty"`
URL string `xml:"url,omitempty"`
DisplayURL string `xml:"displayUrl,omitempty"`
FinalURLs []string `xml:"finalUrls,omitempty"`
FinalMobileURLs []string `xml:"finalMobileUrls,omitempty"`
FinalAppURLs []AppUrl `xml:"finalAppUrls,omitempty"`
TrackingURLTemplate *string `xml:"trackingUrlTemplate"`
URLCustomParameters *CustomParameters `xml:"urlCustomParameters,omitempty"`
DevicePreference int64 `xml:"devicePreference,omitempty"`
}
// Ad is the common interface for accessing properties shared by all
// child types of ads
type Ad interface {
GetID() int64
GetURL() string
GetType() string
GetTrackingURLTemplate() *string
GetFinalURLs() []string
CloneForTemplate([]string, *string) Ad
}
// GetID returns the Ad's id
func (c CommonAd) GetID() int64 {
return c.ID
}
// Get Type returns the type of the Ad
func (c CommonAd) GetType() string {
return c.Type
}
// GetURL returns the Ad's url (a.k.a destination url)
func (c CommonAd) GetURL() string {
return c.URL
}
// GetTrackingURLTemplate returns the tracking url template
func (c CommonAd) GetTrackingURLTemplate() *string {
return c.TrackingURLTemplate
}
// GetFinalURLs returns the list of Final urls (can be empty array)
func (c CommonAd) GetFinalURLs() []string {
return c.FinalURLs
}
// CloneForTemplate create a clone of an Ad, to recreate it for changing the tracking Url Template (as Ad are immutable)
func (c CommonAd) CloneForTemplate(finalURLs []string, trackingURLTemplate *string) Ad {
c.ID = 0 // value used by go for omitempty
c.URL = "" // template needs an empty destination url (as it deprecates this field)
c.FinalURLs = finalURLs
c.TrackingURLTemplate = trackingURLTemplate
return c
}
// CloneForTemplate create a clone of an Ad, to recreate it for changing the tracking Url Template
func (c TextAd) CloneForTemplate(finalURLs []string, trackingURLTemplate *string) Ad {
c.ID = 0 // value used by go for omitempty
c.URL = "" // template needs an empty destination url (as it deprecates this field)
c.FinalURLs = finalURLs
c.TrackingURLTemplate = trackingURLTemplate
return c
}
// CloneForTemplate create a clone of an Ad, to recreate it for changing the tracking Url Template
func (c ImageAd) CloneForTemplate(finalURLs []string, trackingURLTemplate *string) Ad {
c.ID = 0 // value used by go for omitempty
c.URL = "" // template needs an empty destination url (as it deprecates this field)
c.FinalURLs = finalURLs
c.TrackingURLTemplate = trackingURLTemplate
return c
}
// CloneForTemplate create a clone of an Ad, to recreate it for changing the tracking Url Template
func (c TemplateAd) CloneForTemplate(finalURLs []string, trackingURLTemplate *string) Ad {
c.ID = 0 // value used by go for omitempty
c.URL = "" // template needs an empty destination url (as it deprecates this field)
c.FinalURLs = finalURLs
c.TrackingURLTemplate = trackingURLTemplate
return c
}
// CloneForTemplate create a clone of an Ad, to recreate it for changing the tracking Url Template
func (c DynamicSearchAd) CloneForTemplate(finalURLs []string, trackingURLTemplate *string) Ad {
c.ID = 0 // value used by go for omitempty
c.URL = "" // template needs an empty destination url (as it deprecates this field)
c.FinalURLs = finalURLs
c.TrackingURLTemplate = trackingURLTemplate
return c
}
// CloneForTemplate create a clone of an Ad, to recreate it for changing the tracking Url Template
func (c ExpandedTextAd) CloneForTemplate(finalURLs []string, trackingURLTemplate *string) Ad {
c.ID = 0 // value used by go for omitempty
c.URL = "" // template needs an empty destination url (as it deprecates this field)
c.FinalURLs = finalURLs
c.TrackingURLTemplate = trackingURLTemplate
return c
}
// TextAd represents the TextAd object as documented here
// https://developers.google.com/adwords/api/docs/reference/v201809/AdGroupAdService.TextAd
type TextAd struct {
CommonAd
Headline string `xml:"headline"`
Description1 string `xml:"description1"`
Description2 string `xml:"description2"`
}
type ProductAd struct {
CommonAd
}
// DynamicSearchAd represents the equivalent object documented here
// https://developers.google.com/adwords/api/docs/reference/v201809/AdGroupAdService.DynamicSearchAd
type DynamicSearchAd struct {
CommonAd
Description1 string `xml:"description1"`
Description2 string `xml:"description2"`
}
// ImageAd represents the equivalent object documented here
// https://developers.google.com/adwords/api/docs/reference/v201809/AdGroupAdService.ImageAd
type ImageAd struct {
CommonAd
Image int64 `xml:"imageId"` //TODO should actually be Image object, not just an int
Name string `xml:"name"`
AdToCopyImageFrom int64 `xml:"adToCopyImageFrom"`
}
// TemplateAd represents the equivalent object documented here
// https://developers.google.com/adwords/api/docs/reference/v201809/AdGroupAdService.TemplateAd
type TemplateAd struct {
CommonAd
TemplateID int64 `xml:"templateId"`
AdUnionID int64 `xml:"adUnionId>id"`
TemplateElements []TemplateElement `xml:"templateElements"`
Dimensions []Dimensions `xml:"dimensions"`
Name string `xml:"name"`
Duration int64 `xml:"duration"`
originAdID *int64 `xml:"originAdId"`
}
// ExpandedTextAd epresents the equivalent object documented here
// https://developers.google.com/adwords/api/docs/reference/v201809/AdGroupAdService.ExpandedTextAd
type ExpandedTextAd struct {
CommonAd
HeadlinePart1 string `xml:"headlinePart1"`
HeadlinePart2 string `xml:"headlinePart2"`
Description string `xml:"description"`
Path1 string `xml:"path1"`
Path2 string `xml:"path2"`
}
// MarshalXML returns unimplemented error as the structure does not
// match yet 100% of the field required by google api
func (c ImageAd) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
return ERROR_NOT_YET_IMPLEMENTED
}
// MarshalXML returns unimplemented error as the structure does not
// match yet 100% of the field required by google api
func (c TemplateAd) MarshalXML(e *xml.Encoder, start xml.StartElement) error {
return ERROR_NOT_YET_IMPLEMENTED
}