-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathapi.go
124 lines (103 loc) · 2.7 KB
/
api.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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
package vkapi
import (
"errors"
"log"
"net/url"
"os"
)
const (
defaultVersion = "5.67"
defaultScheme = "https"
defaultHost = "api.vk.com"
defaultPath = "method"
defaultMethod = "GET"
defaultHTTPS = "1"
defaultLanguage = LangEN
paramVersion = "v"
paramLanguage = "lang"
paramHTTPS = "https"
paramToken = "access_token"
)
const (
ErrApiClientNotFound = "APIClient not found."
)
const (
LangRU = "ru" //Russian
LangUA = "ua" //Ukrainian
LangBE = "be" //Belarusian
LangEN = "en" //English
LangES = "es" //Spanish
LangFI = "fi" //Finnish
LangDE = "de" //German
LangIT = "it" //Italian
)
// APIClient allows you to send requests to API server.
type APIClient struct {
httpClient HTTPClient
APIVersion string
AccessToken *AccessToken
secureToken string
// If log is true, APIClient will write logs.
log bool
logger *log.Logger
// HTTPS defines if use https instead of http. 1 - use https. 0 - use http.
HTTPS string
// Language define the language in which different data will be returned, for example, names of countries and cities.
Language string
}
// SetLogger sets logger to APIClient.
func (api *APIClient) SetLogger(logger *log.Logger) {
api.logger = logger
}
// SetHTTPClient sets HTTPClient to APIClient.
func (api *APIClient) SetHTTPClient(httpClient HTTPClient) {
api.httpClient = httpClient
}
// SetAccessToken sets access token to APIClient.
func (api *APIClient) SetAccessToken(token string) {
api.AccessToken = &AccessToken{
AccessToken: token,
}
}
// Values returns values from this APIClient.
func (api *APIClient) Values() (values url.Values) {
values = url.Values{}
values.Add(paramVersion, api.APIVersion)
values.Add(paramLanguage, api.Language)
values.Add(paramHTTPS, api.HTTPS)
return
}
// Authenticate run authentication this APIClient from Application.
func (api *APIClient) Authenticate(application Application) (err error) {
api.AccessToken, err = Authenticate(api, application)
if err != nil {
return err
}
if api.AccessToken.Error != "" {
return errors.New(api.AccessToken.Error + " : " + api.AccessToken.ErrorDescription)
}
return nil
}
// NewApiClient creates a new *APIClient instance.
func NewApiClient() *APIClient {
client := &APIClient{
httpClient: defaultHTTPClient(),
APIVersion: defaultVersion,
logger: log.New(os.Stdout, "", log.LstdFlags),
HTTPS: defaultHTTPS,
Language: defaultLanguage,
}
return client
}
// ApiURL return standard url for interacting with server API.
func ApiURL() (url url.URL) {
url.Host = defaultHost
url.Path = defaultPath
url.Scheme = defaultScheme
return url
}
func (api *APIClient) logPrintf(format string, v ...interface{}) {
if api.log {
api.logger.Printf(format, v...)
}
}