forked from justwatch/facebook-marketing-api-golang-sdk
/
service.go
77 lines (68 loc) · 2.28 KB
/
service.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
package v16
import (
"context"
"errors"
"github.com/flycan/facebook-marketing-api-golang-sdk/fb"
"github.com/go-kit/kit/log"
)
// Version of the graph API being used.
var Version = "v16.0"
// Service interacts with the Facebook Marketing API.
type Service struct {
*fb.Client
AdAccounts *AdAccountService
AdCreatives *AdCreativeService
Adsets *AdsetService
Ads *AdService
Audiences *AudienceService
Campaigns *CampaignService
CustomConversions *CustomConversionService
Events *EventService
Insights *InsightsService
Interests *InterestService
Images *ImageService
Pages *PageService
Posts *PostService
Search *SearchService
Videos *VideoService
}
// New initializes a new Service and all the Services contained.
func New(l log.Logger, accessToken, appSecret string) (*Service, error) {
c := fb.NewClient(l, accessToken, appSecret)
err := c.GetJSON(context.Background(), fb.NewRoute(Version, "/me").String(), &struct{}{})
if err != nil {
return nil, err
}
return &Service{
Client: c,
AdAccounts: &AdAccountService{c},
AdCreatives: &AdCreativeService{c, fb.NewStatsContainer()},
Adsets: &AdsetService{c},
Ads: &AdService{c},
Audiences: &AudienceService{c},
Campaigns: &CampaignService{c},
CustomConversions: &CustomConversionService{c},
Events: &EventService{c},
Insights: newInsightsService(l, c),
Interests: &InterestService{c},
Images: &ImageService{c},
Pages: &PageService{c},
Posts: &PostService{c, fb.NewStatsContainer()},
Search: &SearchService{c},
Videos: &VideoService{c},
}, nil
}
// GetMetadata returns the metadata of a graph API object.
func (s *Service) GetMetadata(ctx context.Context, id string) (*fb.Metadata, error) {
res := &fb.MetadataContainer{}
err := s.Client.GetJSON(ctx, fb.NewRoute(Version, "/%s", id).Metadata(true).String(), res)
if err != nil {
return nil, err
} else if res.Metadata == nil {
return nil, errors.New("could not get metadata")
}
return res.Metadata, nil
}
func (s *Service) SetVersion(version string) {
Version = version
}