Skip to content

Commit

Permalink
add campaign criterion example and query method
Browse files Browse the repository at this point in the history
  • Loading branch information
bbachtel committed Aug 1, 2016
1 parent 7523f60 commit 6ce6984
Show file tree
Hide file tree
Showing 3 changed files with 104 additions and 5 deletions.
45 changes: 40 additions & 5 deletions v201603/campaign_criterion.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@ func NewCampaignCriterionService(auth *Auth) *CampaignCriterionService {

type CampaignCriterion struct {
CampaignId int64 `xml:"campaignId"`
IsNegative bool `xml:"isNegative,omitempty"`
Criterion Criterion `xml:"criterion"`
BidModifier float64 `xml:"bidModifier,omitempty"`
BidModifier *float64 `xml:"bidModifier,omitempty"`
Errors []error `xml:"-"`
}

Expand All @@ -38,14 +39,19 @@ func (cc CampaignCriterion) MarshalXML(e *xml.Encoder, start xml.StartElement) e
if err := criterionMarshalXML(cc.Criterion, e); err != nil {
return err
}
if cc.BidModifier != nil {
e.EncodeElement(&cc.BidModifier, xml.StartElement{Name: xml.Name{"", "bidModifier"}})
}

e.EncodeToken(start.End())
return nil
}

type NegativeCampaignCriterion struct {
CampaignId int64 `xml:"campaignId"`
IsNegative bool `xml:"isNegative,omitempty"`
Criterion Criterion `xml:"criterion"`
BidModifier float64 `xml:"bidModifier,omitempty"`
BidModifier *float64 `xml:"bidModifier,omitempty"`
Errors []error `xml:"-"`
}

Expand Down Expand Up @@ -89,10 +95,14 @@ func (ccs *CampaignCriterions) UnmarshalXML(dec *xml.Decoder, start xml.StartEle
return err
}
cc.Criterion = criterion
case "BidModifier":
case "bidModifier":
if err := dec.DecodeElement(&cc.BidModifier, &start); err != nil {
return err
}
case "isNegative":
if err := dec.DecodeElement(&cc.IsNegative, &start); err != nil {
return err
}
}
}
}
Expand Down Expand Up @@ -232,6 +242,31 @@ func (s *CampaignCriterionService) Mutate(campaignCriterionOperations CampaignCr
return mutateResp.CampaignCriterions, err
}

func (s *CampaignCriterionService) Query(query string) (campaignCriterions CampaignCriterions, err error) {
return campaignCriterions, err
func (s *CampaignCriterionService) Query(query string) (campaignCriterions CampaignCriterions, totalCount int64, err error) {
respBody, err := s.Auth.request(
campaignCriterionServiceUrl,
"query",
AWQLQuery{
XMLName: xml.Name{
Space: baseUrl,
Local: "query",
},
Query: query,
},
)

if err != nil {
return campaignCriterions, totalCount, err
}

getResp := struct {
Size int64 `xml:"rval>totalNumEntries"`
CampaignCriterions CampaignCriterions `xml:"rval>entries"`
}{}

err = xml.Unmarshal([]byte(respBody), &getResp)
if err != nil {
return campaignCriterions, totalCount, err
}
return getResp.CampaignCriterions, getResp.Size, err
}
63 changes: 63 additions & 0 deletions v201603/cli/campaign_criterion.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package main

import (
"encoding/json"
"flag"
"fmt"
gads "github.com/colinmutter/gads/v201603"
"log"
)

var configJson = flag.String("oauth", "./oauth.json", "API credentials")

func main() {
flag.Parse()
config, err := gads.NewCredentialsFromFile(*configJson)
if err != nil {
log.Fatal(err)
}

cs := gads.NewCampaignCriterionService(&config.Auth)

//bidmodifier := float64(2)
//var bidmodifier float64
//bidmodifier = 1.04

campaignCriterions := gads.CampaignCriterions{
gads.NegativeCampaignCriterion{
CampaignId: 123456789,
Criterion: gads.Location{
Id: 21168,
},
},
gads.CampaignCriterion{
CampaignId: 123456789,
Criterion: gads.Location{
Id: 21167,
},
},
}

criterions, err := cs.Mutate(
gads.CampaignCriterionOperations{
"ADD": campaignCriterions,
},
)

fmt.Println(criterions)
criterionJSON, _ := json.MarshalIndent(criterions, "", " ")
fmt.Printf("%s\n", criterionJSON)

// show all Location Criterion
fmt.Printf("Campaign Criterion\n")
foundCriterions, totalCount, err := cs.Query("SELECT CampaignId,IsNegative,BidModifier,CriteriaType,Id,LocationName,DisplayType,ParentLocations WHERE CampaignId = '211793582' AND CriteriaType IN ['LOCATION']")
fmt.Println(totalCount)
if err != nil {
log.Fatal(err)
}
for _, criterion := range foundCriterions {
criterionJSON, _ := json.MarshalIndent(criterion, "", " ")
fmt.Printf("%s\n", criterionJSON)
}

}
1 change: 1 addition & 0 deletions v201603/criterion.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ type LanguageCriterion struct {
// ParentLocations:
type Location struct {
Id int64 `xml:"id,omitempty"`
Type string `xml:"type,omitempty"`
LocationName string `xml:"locationName,omitempty"`
DisplayType string `xml:"displayType,omitempty"`
TargetingStatus string `xml:"targetingStatus,omitempty"`
Expand Down

0 comments on commit 6ce6984

Please # to comment.