-
Notifications
You must be signed in to change notification settings - Fork 1
/
serverchan.go
59 lines (55 loc) · 1.55 KB
/
serverchan.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
// Package serverchan make it easier for you to use ServerChan service
package serverchan
import (
"encoding/json"
"errors"
"io/ioutil"
"net/http"
"net/url"
)
// ServerChan define a class to serve ServerChan service
type ServerChan struct {
gw string
}
// NewServerChan creates a new ServerChan pointer instance.
//
// Parameters:
// secretKey: your ServerChan secret key, type string, required
//
// Returns:
// new ServerChan pointer instance
func NewServerChan(secretKey string) *ServerChan {
return &ServerChan{
gw: "https://sc.ftqq.com/" + secretKey + ".send",
}
}
// Send message to ServerChan service server.
//
// Parameters:
// title: message's title, type string, required, must be escaped and content max length: 256 byte
// content: message's content, type string, max length: 64 kB, suport Markdown syntax
//
// Returns:
// msg: message returnd from ServerChan service server
// err: error message
func (sc *ServerChan) Send(title, content string) (msg string, err error) {
uVlues, err := url.ParseQuery("text=" + url.QueryEscape(title) + "&desp=" + content)
if err != nil {
return "error", err
}
resp, err := http.PostForm(sc.gw, uVlues)
if err != nil {
return "error", err
}
defer resp.Body.Close()
p, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "error", err
}
t := make(map[string]interface{}, 0)
json.Unmarshal(p, &t)
if int(t["data"].(map[string]interface{})["errno"].(float64)) == 1024 {
return t["errmsg"].(string), errors.New("messages of the same content can only be sent once a minute")
}
return "success", nil
}