forked from emiddleton/gads
-
Notifications
You must be signed in to change notification settings - Fork 1
/
data.go
96 lines (89 loc) · 3.08 KB
/
data.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
package gads
import (
"encoding/xml"
)
// DataService struct for service
type DataService struct {
Auth
}
// CriterionBidLandscape struct for CriterionBidLandscape
type CriterionBidLandscape struct {
CampaignID uint64 `xml:"campaignId"`
AdGroupID uint64 `xml:"adGroupId"`
CriterionID uint64 `xml:"criterionId"`
StartDate string `xml:"startDate"`
EndDate string `xml:"endDate"`
LandscapePoints []LandscapePoint `xml:"landscapePoints"`
}
// LandscapePoint struct for LandscapePoint
type LandscapePoint struct {
Bid uint64 `xml:"bid>microAmount"`
Clicks uint64 `xml:"clicks"`
Cost uint64 `xml:"cost>microAmount"`
Impressions uint64 `xml:"impressions"`
PromotedImpressions uint64 `xml:"promotedImpressions"`
RequiredBudget uint64 `xml:"requiredBudget>microAmount"`
BidModifier float64 `xml:"bidModifier"`
TotalImpressions uint64 `xml:"totalLocalImpressions"`
TotalLocalClicks uint64 `xml:"totalLocalClicks"`
TotalLocalCost uint64 `xml:"totalLocalCost>microAmount"`
TotalLocalPromotedImpressions uint64 `xml:"totalLocalPromotedImpressions"`
}
// NewDataService returns new instance of DataService
func NewDataService(auth *Auth) *DataService {
return &DataService{Auth: *auth}
}
// GetCriterionBidLandscape returns CriterionBidLandscape
func (s *DataService) GetCriterionBidLandscape(selector Selector) ([]CriterionBidLandscape, int64, error) {
selector.XMLName = xml.Name{Space: "", Local: "serviceSelector"}
respBody, err := s.Auth.request(
dataServiceUrl,
"getCriterionBidLandscape",
struct {
XMLName xml.Name
Sel Selector
}{
XMLName: xml.Name{Space: baseUrl, Local: "getCriterionBidLandscape"},
Sel: selector,
},
)
if err != nil {
return nil, 0, err
}
getResp := struct {
Size int64 `xml:"rval>totalNumEntries"`
CriterionBidLandscapes []CriterionBidLandscape `xml:"rval>entries"`
}{}
err = xml.Unmarshal(respBody, &getResp)
if err != nil {
return nil, 0, err
}
return getResp.CriterionBidLandscapes, getResp.Size, err
}
// GetCampaignCriterionBidLandscape returns CriterionBidLandscape
func (s *DataService) GetCampaignCriterionBidLandscape(selector Selector) ([]CriterionBidLandscape, int64, error) {
selector.XMLName = xml.Name{Space: "", Local: "serviceSelector"}
respBody, err := s.Auth.request(
dataServiceUrl,
"getCampaignCriterionBidLandscape",
struct {
XMLName xml.Name
Sel Selector
}{
XMLName: xml.Name{Space: baseUrl, Local: "getCampaignCriterionBidLandscape"},
Sel: selector,
},
)
if err != nil {
return nil, 0, err
}
getResp := struct {
Size int64 `xml:"rval>totalNumEntries"`
CriterionBidLandscapes []CriterionBidLandscape `xml:"rval>entries"`
}{}
err = xml.Unmarshal(respBody, &getResp)
if err != nil {
return nil, 0, err
}
return getResp.CriterionBidLandscapes, getResp.Size, err
}