/
contacts.go
65 lines (56 loc) · 1.82 KB
/
contacts.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
package marogo
import "sync"
import "errors"
import "github.com/jeffail/gabs"
import "encoding/json"
import "io/ioutil"
import "fmt"
var ErrNotParsed = errors.New("Could not get gabs to parse json buffer")
func (m Maropost) NewContact(first_name string, last_name string, email string) *Contact {
contact := Contact{m, first_name, last_name, email, "", "", make(map[string]interface{}), false}
return &contact
}
func (c *Contact) SubscribeToLists(lists []string) (bool, error) {
wg := &sync.WaitGroup{}
for _, v := range lists {
wg.Add(1)
go MakeAsyncRequest(c.Account+"/lists/"+v+"/contacts.json?auth_token="+c.AuthToken, "POST", c, wg, false)
}
wg.Wait()
return true, nil
}
func (m *Maropost) GetContactsByList(list string, page string) (*gabs.Container, error) {
// Make our request
response, err := MakeRequest(m.Account+"/lists/"+list+"/contacts.json?page="+page+"&auth_token="+m.AuthToken, "GET", nil, false)
if err != nil {
return nil, err
}
var object interface{}
jsonDecoder := json.NewDecoder(response.Body)
if err = jsonDecoder.Decode(&object); err != nil {
return nil, err
}
jsonObject := gabs.New()
jsonObject.SetP(object, "array")
defer response.Body.Close()
return jsonObject.S("array"), nil
}
func (m *Maropost) UpdateContact(id string, listId string, data interface{}) (*gabs.Container, error) {
object := make(map[string]interface{})
object["contact"] = data
url := m.Account + "/lists/" + listId + "/contacts/" + id + ".json?auth_token=" + m.AuthToken
response, err := MakeRequest(url, "PUT", object, true)
if err != nil {
return nil, err
}
defer response.Body.Close()
jsonBytes, err := ioutil.ReadAll(response.Body)
if err != nil {
return nil, err
}
jsonParsed, err := gabs.ParseJSON(jsonBytes)
if err != nil {
fmt.Printf("%s\n%s\n\n", url, string(jsonBytes))
}
return jsonParsed, err
}