Compare commits

...

114 Commits

Author SHA1 Message Date
李光春 7e7d891e9d - update
8 months ago
李光春 b3963e6e92 - update jobs
8 months ago
李光春 36b3f3e8df - update
8 months ago
李光春 7547e8251c - update log
8 months ago
李光春 894d5f3b85 - update jobs
8 months ago
李光春 a2f67b40aa - update jobs
8 months ago
李光春 81a73cf248 - update jobs
8 months ago
李光春 ecd418c96c - update log
8 months ago
李光春 9a7764a98b - update
8 months ago
李光春 37af6411fd - update log
8 months ago
李光春 0bf72b945e - update jobs
8 months ago
李光春 b612eab3d8 - update vendor
8 months ago
李光春 624394f6d4 - update golog
8 months ago
李光春 3d3c2109ae - update vendor
8 months ago
李光春 7d30f4f791 - update vendor
8 months ago
李光春 32895c815d - update log
8 months ago
李光春 315d1a7c0b - update
8 months ago
李光春 efda705822 - update
8 months ago
李光春 9d1ad9e708 - update
8 months ago
李光春 afad52b41f - update goip
8 months ago
李光春 c4c56d63d5 - update vendor
8 months ago
李光春 d3ebd06eda - update wechatpayapiv2
8 months ago
李光春 ff052e838e - update wechatpayapiv2
8 months ago
李光春 1099e35ff9 - update vendor
8 months ago
李光春 0e505abfd7 - update
8 months ago
李光春 1ee569b43a - update
8 months ago
李光春 c22e2ce46e - update vendor
9 months ago
李光春 4f086f2626 - update service/kuaidi100
9 months ago
李光春 dc3bc54468 - update vendor
10 months ago
李光春 6e49867d6f - update kuaidi100
10 months ago
李光春 f3654bb868 - update ip
10 months ago
李光春 6c9c05afa2 - update ip
10 months ago
李光春 f947bad45d - update request
10 months ago
李光春 0eb1f6a62b - update vendor
10 months ago
李光春 b28923b086 - update vendor
11 months ago
李光春 3250e2402f - update wechatopen
11 months ago
李光春 b2ee634db1 - update vendor
11 months ago
李光春 1d7ef4fb34 - update
11 months ago
李光春 49df014426 - update log
11 months ago
李光春 19b44285e3 - update gostring
11 months ago
李光春 eb28bb82ec - update gostring
11 months ago
李光春 8f236f4832 - update gostring
11 months ago
李光春 6137f53c38 - update
11 months ago
李光春 003f87b4d7 - update vendor
12 months ago
李光春 f415a8ef19 - update
12 months ago
李光春 f762653c62 - update
12 months ago
李光春 ae848ac95d - update
12 months ago
李光春 af516e8040 - update
12 months ago
李光春 a5294551f0 - update
12 months ago
李光春 2486eeba26 - update
12 months ago
李光春 e440a5dccb - update
12 months ago
李光春 abcb9cdce0 - update vendor
12 months ago
李光春 470f5dba37 - update wechatopen
12 months ago
李光春 c238ba648a - update wechatopen
12 months ago
李光春 4f4201a9ca - update wechatopen
12 months ago
李光春 b40a8afea0 - update wechatopen
1 year ago
李光春 61d1c2f975 - update
1 year ago
李光春 f4c498a916 - update vendor
1 year ago
李光春 e97ef679f5 - update
1 year ago
李光春 c4d4e3a29a - add mq135
1 year ago
李光春 6286960982 - update vendor
1 year ago
李光春 6443d8b05b - update vendor
1 year ago
李光春 e16702fcb6 - update request
1 year ago
李光春 96cd1fc326 - update string
1 year ago
李光春 50011b492a - update wechatopen
1 year ago
李光春 4094a91645 - update
1 year ago
李光春 03adb53e41 - update wnfuwu
1 year ago
李光春 b9ced960c0 - update wikeyun
1 year ago
李光春 9d5d1efff1 - update ejiaofei
1 year ago
李光春 fa2a2e15ab - update eastiot
1 year ago
李光春 50d5b3216c - update vendor
1 year ago
李光春 fdd6dfbc63 - update vendor
1 year ago
李光春 5ac7b3ef0a - update wechatopen
1 year ago
李光春 b9d5e40fe1 - update ejiaofei
1 year ago
李光春 41f01c0dd6 - update vendor
1 year ago
李光春 4585d3f4a2 - update caiyunapp
1 year ago
李光春 b141867b87 - update caiyunapp
1 year ago
李光春 eee9be019c - update caiyunapp
1 year ago
李光春 2bb6fd0d2e - update
1 year ago
李光春 535d75c175 - update wechat
1 year ago
李光春 bf3c02d004 - update baidu
1 year ago
李光春 7cac7a8f72 - update baidu
1 year ago
李光春 733ac2012b - update amap
1 year ago
李光春 fcdd3f0c6f - update wikeyun
1 year ago
李光春 69e6bc38d7 - update wechatopen
1 year ago
李光春 68c4d59d03 - update wechatopen
1 year ago
李光春 7329a8c2d1 - update wikeyun
1 year ago
李光春 d7d720df1b - update wikeyun
1 year ago
李光春 ee837eb351 - update wikeyun
1 year ago
李光春 6da1aa5772 - update wikeyun
1 year ago
李光春 ab6661281d - update wikeyun
1 year ago
李光春 873be7b05c - update wechatpayapiv2
1 year ago
李光春 af820fe08c - update storage
1 year ago
李光春 efdef3152a - update log
1 year ago
李光春 b7ee53add0 - update storage
1 year ago
李光春 9669639225 - update log
1 year ago
李光春 07f8e4e1e4 - update log
1 year ago
李光春 75239c0ad6 - update log
1 year ago
李光春 831266f9fb - update wechatopen
1 year ago
李光春 a0c4903cd4 - update wechatopen
1 year ago
李光春 45207efad1 - update
1 year ago
李光春 7c1c532c8f - update
1 year ago
李光春 a0e6bcb331 - update qq
1 year ago
李光春 0e39809c43 - update
1 year ago
李光春 278e19fb40 - update amap
1 year ago
李光春 634db15adf - update amap
1 year ago
李光春 b81beb300b - update amap
1 year ago
李光春 b3896afd96 - update caiyunapp
1 year ago
李光春 2a2a8e151c - update caiyunapp
1 year ago
李光春 b8bf6d7288 - update caiyunapp
1 year ago
李光春 85200de579 - update caiyunapp
1 year ago
李光春 88d7de18cb - add caiyunapp
1 year ago
李光春 52e43d730b - update
1 year ago
李光春 70e338cdd6 - update
1 year ago

9
.gitignore vendored

@ -8,4 +8,11 @@
*_test.go
/service/*_test.go
/utils/*_test.go
*.text
*.text
/utils/goip/geoip/GeoLite2-ASN.mmdb
/utils/goip/geoip/GeoLite2-City.mmdb
/utils/goip/geoip/GeoLite2-Country.mmdb
/utils/goip/ip2region/ip2region.db
/utils/goip/ip2region_v2/ip2region.xdb
/utils/goip/ipv6wry/ipv6wry.db
/utils/goip/qqwry/qqwry.dat

@ -1,3 +1,57 @@
## v1.0.115
- update [golog](utils%2Fgolog)
- update [gostorage](utils%2Fgostorage)
## v1.0.114
- update [golog](utils%2Fgolog)
## v1.0.113
- update [golog](utils%2Fgolog)
- update [gorequest](utils%2Fgorequest)
## v1.0.111-v1.0.112
- update [wechatopen](service%2Fwechatopen)
- update [wechatminiprogram](service%2Fwechatminiprogram)
## v1.0.110
- add [caiyunapp](service%2Fcaiyunapp)
- add [amap](service%2Famap)
- add [qq](service%2Fqq)
## v1.0.109
- update [goip](utils%2Fgoip)
- update [gojobs](utils%2Fgojobs)
- update [wikeyun](service%2Fwikeyun)
- update [wechatunion](service%2Fwechatunion)
- update [wechatqy](service%2Fwechatqy)
- update [wechatpayopen](service%2Fwechatpayopen)
- update [wechatpayapiv3](service%2Fwechatpayapiv3)
- update [wechatopen](service%2Fwechatopen)
- update [wechatoffice](service%2Fwechatoffice)
- update [wechatminiprogram](service%2Fwechatminiprogram)
- update [taobao](service%2Ftaobao)
- update [pintoto](service%2Fpintoto)
- update [pinduoduo](service%2Fpinduoduo)
- update [nldyp](service%2Fnldyp)
- update [meituan](service%2Fmeituan)
- update [kashangwl](service%2Fkashangwl)
- update [jd](service%2Fjd)
- update [feishu](service%2Ffeishu)
- update [ejiaofei](service%2Fejiaofei)
- update [eastiot](service%2Feastiot)
- update [dingtalk](service%2Fdingtalk)
- update [dingdanxia](service%2Fdingdanxia)
- update [alipayopen](service%2Falipayopen)
- update [leshuazf](service%2Fleshuazf)
- update [pconline](service%2Fpconline)
- update [sendcloud](service%2Fsendcloud)
## v1.0.108
- add [rocron](utils%2Frocron)

111
go.mod

@ -4,83 +4,74 @@ go 1.20
require (
github.com/MercuryEngineering/CookieMonster v0.0.0-20180304172713-1584578b3403
github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible
github.com/aliyun/aliyun-oss-go-sdk v2.2.9+incompatible
github.com/allegro/bigcache/v3 v3.1.0
github.com/baidubce/bce-sdk-go v0.9.146
github.com/baidubce/bce-sdk-go v0.9.156
github.com/basgys/goxml2json v1.1.0
github.com/bytedance/sonic v1.8.6
github.com/gin-gonic/gin v1.9.0
github.com/go-co-op/gocron v1.19.0
github.com/bytedance/sonic v1.10.1
github.com/gin-gonic/gin v1.9.1
github.com/go-playground/locales v0.14.1
github.com/go-playground/universal-translator v0.18.1
github.com/go-playground/validator/v10 v10.12.0
github.com/go-sql-driver/mysql v1.7.0
github.com/go-playground/validator/v10 v10.15.3
github.com/goccy/go-json v0.10.2
github.com/gogf/gf/v2 v2.3.3
github.com/json-iterator/go v1.1.12
github.com/lib/pq v1.10.7
github.com/mitchellh/mapstructure v1.5.0
github.com/mvdan/xurls v1.1.0
github.com/natefinch/lumberjack v2.0.0+incompatible
github.com/oschwald/geoip2-golang v1.8.0
github.com/qiniu/go-sdk/v7 v7.14.0
github.com/redis/go-redis/v9 v9.0.2
github.com/oschwald/geoip2-golang v1.9.0
github.com/qiniu/go-sdk/v7 v7.17.1
github.com/redis/go-redis/v9 v9.1.0
github.com/robfig/cron/v3 v3.0.1
github.com/saracen/go7z v0.0.0-20191010121135-9c09b6bd7fda
github.com/shirou/gopsutil v3.21.11+incompatible
github.com/sirupsen/logrus v1.9.0
github.com/tencentyun/cos-go-sdk-v5 v0.7.41
go.mongodb.org/mongo-driver v1.11.3
go.uber.org/zap v1.24.0
golang.org/x/crypto v0.7.0
golang.org/x/text v0.8.0
github.com/sirupsen/logrus v1.9.3
github.com/tencentyun/cos-go-sdk-v5 v0.7.43
go.mongodb.org/mongo-driver v1.12.1
golang.org/x/crypto v0.13.0
golang.org/x/text v0.13.0
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df
gorm.io/datatypes v1.1.1
gorm.io/driver/mysql v1.4.7
gorm.io/driver/postgres v1.5.0
gorm.io/gen v0.3.21
gorm.io/gorm v1.24.7-0.20230306060331-85eaf9eeda11
xorm.io/xorm v1.3.2
gopkg.in/natefinch/lumberjack.v2 v2.2.1
gorm.io/datatypes v1.2.0
gorm.io/driver/mysql v1.5.1
gorm.io/driver/postgres v1.5.2
gorm.io/gen v0.3.23
gorm.io/gorm v1.25.4
)
require (
github.com/bitly/go-simplejson v0.5.0 // indirect
github.com/cespare/xxhash/v2 v2.2.0 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
github.com/chenzhuoyu/iasm v0.9.0 // indirect
github.com/clbanning/mxj v1.8.4 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/fatih/color v1.15.0 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/go-logr/logr v1.2.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-ole/go-ole v1.3.0 // indirect
github.com/go-sql-driver/mysql v1.7.1 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/go-cmp v0.5.9 // indirect
github.com/google/go-querystring v1.1.0 // indirect
github.com/jackc/pgpassfile v1.0.0 // indirect
github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect
github.com/jackc/pgx/v5 v5.3.1 // indirect
github.com/jackc/pgx/v5 v5.4.3 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
github.com/klauspost/compress v1.16.3 // indirect
github.com/klauspost/cpuid/v2 v2.2.4 // indirect
github.com/leodido/go-urn v1.2.2 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.18 // indirect
github.com/klauspost/compress v1.16.7 // indirect
github.com/klauspost/cpuid/v2 v2.2.5 // indirect
github.com/leodido/go-urn v1.2.4 // indirect
github.com/mattn/go-isatty v0.0.19 // indirect
github.com/mattn/go-sqlite3 v2.0.3+incompatible // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/montanaflynn/stats v0.7.0 // indirect
github.com/mozillazg/go-httpheader v0.3.1 // indirect
github.com/oschwald/maxminddb-golang v1.10.0 // indirect
github.com/pelletier/go-toml/v2 v2.0.7 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/montanaflynn/stats v0.7.1 // indirect
github.com/mozillazg/go-httpheader v0.4.0 // indirect
github.com/oschwald/maxminddb-golang v1.12.0 // indirect
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
github.com/rogpeppe/go-internal v1.8.1 // indirect
github.com/saracen/go7z-fixtures v0.0.0-20190623165746-aa6b8fba1d2f // indirect
github.com/saracen/solidblock v0.0.0-20190426153529-45df20abab6f // indirect
github.com/syndtr/goleveldb v1.0.0 // indirect
github.com/tidwall/pretty v1.2.0 // indirect
github.com/tklauser/go-sysconf v0.3.11 // indirect
github.com/tklauser/numcpus v0.6.0 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.11 // indirect
github.com/ulikunitz/xz v0.5.11 // indirect
@ -88,25 +79,17 @@ require (
github.com/xdg-go/scram v1.1.2 // indirect
github.com/xdg-go/stringprep v1.0.4 // indirect
github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect
github.com/yusufpapurcu/wmi v1.2.2 // indirect
go.opentelemetry.io/otel v1.14.0 // indirect
go.opentelemetry.io/otel/sdk v1.14.0 // indirect
go.opentelemetry.io/otel/trace v1.14.0 // indirect
go.uber.org/atomic v1.10.0 // indirect
go.uber.org/multierr v1.10.0 // indirect
golang.org/x/arch v0.3.0 // indirect
golang.org/x/mod v0.9.0 // indirect
golang.org/x/net v0.8.0 // indirect
golang.org/x/sync v0.1.0 // indirect
golang.org/x/sys v0.6.0 // indirect
github.com/yusufpapurcu/wmi v1.2.3 // indirect
golang.org/x/arch v0.5.0 // indirect
golang.org/x/mod v0.12.0 // indirect
golang.org/x/net v0.15.0 // indirect
golang.org/x/sync v0.3.0 // indirect
golang.org/x/sys v0.12.0 // indirect
golang.org/x/time v0.3.0 // indirect
golang.org/x/tools v0.7.0 // indirect
google.golang.org/protobuf v1.30.0 // indirect
golang.org/x/tools v0.13.0 // indirect
google.golang.org/protobuf v1.31.0 // indirect
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
gorm.io/hints v1.1.1 // indirect
gorm.io/plugin/dbresolver v1.4.1 // indirect
xorm.io/builder v0.3.12 // indirect
gorm.io/hints v1.1.2 // indirect
gorm.io/plugin/dbresolver v1.4.7 // indirect
)

867
go.sum

File diff suppressed because it is too large Load Diff

@ -1,5 +1,5 @@
package go_library
func Version() string {
return "1.0.108"
return "1.0.169"
}

@ -0,0 +1,17 @@
package alipayopen
import (
"context"
"github.com/dtapps/go-library/utils/gorequest"
)
func (c *Client) Get(ctx context.Context, _method string, notMustParams ...gorequest.Params) ([]byte, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := c.request(ctx, c.newParamsWithType(_method, params))
if err != nil {
return nil, err
}
return request.ResponseBody, err
}

@ -30,9 +30,9 @@ type Client struct {
alipayRSA2 string // 支付宝公钥
aes string // 接口内容加密方式
}
log struct {
status bool // 状态
client *golog.ApiClient // 日志服务
slog struct {
status bool // 状态
client *golog.ApiSLog // 日志服务
}
}

@ -2,11 +2,11 @@ package alipayopen
import "github.com/dtapps/go-library/utils/golog"
// ConfigApiClientFun 日志配置
func (c *Client) ConfigApiClientFun(apiClientFun golog.ApiClientFun) {
apiClient := apiClientFun()
if apiClient != nil {
c.log.client = apiClient
c.log.status = true
// ConfigSLogClientFun 日志配置
func (c *Client) ConfigSLogClientFun(apiSLogFun golog.ApiSLogFun) {
apiSLog := apiSLogFun()
if apiSLog != nil {
c.slog.client = apiSLog
c.slog.status = true
}
}

@ -1,7 +1,5 @@
package alipayopen
import "github.com/dtapps/go-library/utils/golog"
func (c *Client) GetAppId() string {
return c.config.appId
}
@ -21,7 +19,3 @@ func (c *Client) GetAlipayRSA2() string {
func (c *Client) GetAes() string {
return c.config.aes
}
func (c *Client) GetLog() *golog.ApiClient {
return c.log.client
}

@ -2,7 +2,6 @@ package alipayopen
import (
"context"
"github.com/dtapps/go-library"
"github.com/dtapps/go-library/utils/gorequest"
"github.com/dtapps/go-library/utils/gostring"
)
@ -21,9 +20,6 @@ func (c *Client) request(ctx context.Context, param map[string]interface{}) (gor
// 设置用户代理
client.SetUserAgent(gorequest.GetRandomUserAgentSystem())
// 传入SDk版本
client.AfferentSdkUserVersion(go_library.Version())
// 发起请求
request, err := client.Get(ctx)
if err != nil {
@ -31,8 +27,8 @@ func (c *Client) request(ctx context.Context, param map[string]interface{}) (gor
}
// 记录日志
if c.log.status {
go c.log.client.MiddlewareCustom(ctx, gostring.ToString(params["method"]), request, go_library.Version())
if c.slog.status {
go c.slog.client.MiddlewareCustom(ctx, gostring.ToString(params["method"]), request)
}
return request, err

@ -0,0 +1,35 @@
package amap
import (
"github.com/dtapps/go-library/utils/golog"
"github.com/dtapps/go-library/utils/gorequest"
)
// ClientConfig 实例配置
type ClientConfig struct {
Key string
}
// Client 实例
type Client struct {
requestClient *gorequest.App // 请求服务
config struct {
key string
}
slog struct {
status bool // 状态
client *golog.ApiSLog // 日志服务
}
}
// NewClient 创建实例化
func NewClient(config *ClientConfig) (*Client, error) {
c := &Client{}
c.config.key = config.Key
c.requestClient = gorequest.NewHttp()
return c, nil
}

@ -0,0 +1,12 @@
package amap
import "github.com/dtapps/go-library/utils/golog"
// ConfigSLogClientFun 日志配置
func (c *Client) ConfigSLogClientFun(apiSLogFun golog.ApiSLogFun) {
apiSLog := apiSLogFun()
if apiSLog != nil {
c.slog.client = apiSLog
c.slog.status = true
}
}

@ -0,0 +1,9 @@
package amap
const (
apiUrl = "https://restapi.amap.com/v3"
)
const (
LogTable = "amap"
)

@ -0,0 +1,66 @@
package amap
import (
"context"
"github.com/dtapps/go-library/utils/gojson"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
type GeocodeGeoResponse struct {
Status string `json:"status"`
Info string `json:"info"`
Infocode string `json:"infocode"`
Count string `json:"count"`
Geocodes []struct {
FormattedAddress string `json:"formatted_address"`
Country string `json:"country"`
Province string `json:"province"`
Citycode string `json:"citycode"`
City string `json:"city"`
District string `json:"district"`
Township []interface{} `json:"township"`
Neighborhood struct {
Name []interface{} `json:"name"`
Type []interface{} `json:"type"`
} `json:"neighborhood"`
Building struct {
Name []interface{} `json:"name"`
Type []interface{} `json:"type"`
} `json:"building"`
Adcode string `json:"adcode"`
Street string `json:"street"`
Number string `json:"number"`
Location string `json:"location"`
Level string `json:"level"`
} `json:"geocodes"`
}
type GeocodeGeoResult struct {
Result GeocodeGeoResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
}
func newGeocodeGeoResult(result GeocodeGeoResponse, body []byte, http gorequest.Response) *GeocodeGeoResult {
return &GeocodeGeoResult{Result: result, Body: body, Http: http}
}
// GeocodeGeo 地理编码
// https://lbs.amap.com/api/webservice/guide/api/georegeo
func (c *Client) GeocodeGeo(ctx context.Context, address string, notMustParams ...gorequest.Params) (*GeocodeGeoResult, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
params.Set("key", c.GetKey())
params.Set("address", address)
params.Set("output", "JSON")
// 请求
request, err := c.request(ctx, apiUrl+"/geocode/geo", params, http.MethodGet)
if err != nil {
return newGeocodeGeoResult(GeocodeGeoResponse{}, request.ResponseBody, request), err
}
// 定义
var response GeocodeGeoResponse
err = gojson.Unmarshal(request.ResponseBody, &response)
return newGeocodeGeoResult(response, request.ResponseBody, request), err
}

@ -0,0 +1,113 @@
package amap
import (
"context"
"github.com/dtapps/go-library/utils/gojson"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
type GeocodeRegeoResponse struct {
Status string `json:"status"`
Regeocode struct {
Roads []struct {
Id string `json:"id"`
Location string `json:"location"`
Direction string `json:"direction"`
Name string `json:"name"`
Distance string `json:"distance"`
} `json:"roads"`
Roadinters []struct {
SecondName string `json:"second_name"`
FirstId string `json:"first_id"`
SecondId string `json:"second_id"`
Location string `json:"location"`
Distance string `json:"distance"`
FirstName string `json:"first_name"`
Direction string `json:"direction"`
} `json:"roadinters"`
FormattedAddress string `json:"formatted_address"`
AddressComponent struct {
City []interface{} `json:"city"`
Province string `json:"province"`
Adcode string `json:"adcode"`
District string `json:"district"`
Towncode string `json:"towncode"`
StreetNumber struct {
Number string `json:"number"`
Location string `json:"location"`
Direction string `json:"direction"`
Distance string `json:"distance"`
Street string `json:"street"`
} `json:"streetNumber"`
Country string `json:"country"`
Township string `json:"township"`
BusinessAreas []struct {
Location string `json:"location"`
Name string `json:"name"`
Id string `json:"id"`
} `json:"businessAreas"`
Building struct {
Name string `json:"name"`
Type string `json:"type"`
} `json:"building"`
Neighborhood struct {
Name string `json:"name"`
Type string `json:"type"`
} `json:"neighborhood"`
Citycode string `json:"citycode"`
} `json:"addressComponent"`
Aois []struct {
Area string `json:"area"`
Type string `json:"type"`
Id string `json:"id"`
Location string `json:"location"`
Adcode string `json:"adcode"`
Name string `json:"name"`
Distance string `json:"distance"`
} `json:"aois"`
Pois []struct {
Id string `json:"id"`
Direction string `json:"direction"`
Businessarea string `json:"businessarea"`
Address string `json:"address"`
Poiweight string `json:"poiweight"`
Name string `json:"name"`
Location string `json:"location"`
Distance string `json:"distance"`
Tel interface{} `json:"tel"`
Type string `json:"type"`
} `json:"pois"`
} `json:"regeocode"`
Info string `json:"info"`
Infocode string `json:"infocode"`
}
type GeocodeRegeoResult struct {
Result GeocodeRegeoResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
}
func newGeocodeRegeoResult(result GeocodeRegeoResponse, body []byte, http gorequest.Response) *GeocodeRegeoResult {
return &GeocodeRegeoResult{Result: result, Body: body, Http: http}
}
// GeocodeRegeo 逆地理编码
// https://lbs.amap.com/api/webservice/guide/api/georegeo
func (c *Client) GeocodeRegeo(ctx context.Context, location string, notMustParams ...gorequest.Params) (*GeocodeRegeoResult, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
params.Set("key", c.GetKey())
params.Set("location", location)
params.Set("output", "JSON")
// 请求
request, err := c.request(ctx, apiUrl+"/geocode/regeo", params, http.MethodGet)
if err != nil {
return newGeocodeRegeoResult(GeocodeRegeoResponse{}, request.ResponseBody, request), err
}
// 定义
var response GeocodeRegeoResponse
err = gojson.Unmarshal(request.ResponseBody, &response)
return newGeocodeRegeoResult(response, request.ResponseBody, request), err
}

@ -0,0 +1,5 @@
package amap
func (c *Client) GetKey() string {
return c.config.key
}

@ -0,0 +1,46 @@
package amap
import (
"context"
"github.com/dtapps/go-library/utils/gojson"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
type IpResponse struct {
Status string `json:"status"` // 值为0或1,0表示失败1表示成功
Info string `json:"info"` // 返回状态说明status为0时info返回错误原因否则返回“OK”。
Infocode string `json:"infocode"` // 返回状态说明,10000代表正确,详情参阅info状态表
Province string `json:"province"` // 若为直辖市则显示直辖市名称; 如果在局域网 IP网段内则返回“局域网” 非法IP以及国外IP则返回空
City string `json:"city"` // 若为直辖市则显示直辖市名称; 如果为局域网网段内IP或者非法IP或国外IP则返回空
Adcode string `json:"adcode"` // 城市的adcode编码
Rectangle string `json:"rectangle"` // 所在城市矩形区域范围
}
type IpResult struct {
Result IpResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
}
func newIpResult(result IpResponse, body []byte, http gorequest.Response) *IpResult {
return &IpResult{Result: result, Body: body, Http: http}
}
// Ip IP定位
// https://lbs.amap.com/api/webservice/guide/api/ipconfig
func (c *Client) Ip(ctx context.Context, ip string, notMustParams ...gorequest.Params) (*IpResult, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
params.Set("key", c.GetKey())
params.Set("ip", ip)
// 请求
request, err := c.request(ctx, apiUrl+"/ip", params, http.MethodGet)
if err != nil {
return newIpResult(IpResponse{}, request.ResponseBody, request), err
}
// 定义
var response IpResponse
err = gojson.Unmarshal(request.ResponseBody, &response)
return newIpResult(response, request.ResponseBody, request), err
}

@ -0,0 +1,37 @@
package amap
import (
"context"
"github.com/dtapps/go-library/utils/gorequest"
)
func (c *Client) request(ctx context.Context, url string, params map[string]interface{}, method string) (gorequest.Response, error) {
// 创建请求
client := c.requestClient
// 设置请求地址
client.SetUri(url)
// 设置方式
client.SetMethod(method)
// 设置格式
client.SetContentTypeJson()
// 设置参数
client.SetParams(params)
// 发起请求
request, err := client.Request(ctx)
if err != nil {
return gorequest.Response{}, err
}
// 记录日志
if c.slog.status {
go c.slog.client.Middleware(ctx, request)
}
return request, err
}

@ -0,0 +1,77 @@
package amap
import (
"context"
"github.com/dtapps/go-library/utils/gojson"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
type WeatherWeatherInfoResponse struct {
Status string `json:"status"` // 值为0或1 1成功0失败
Count string `json:"count"` // 返回结果总数目
Info string `json:"info"` // 返回的状态信息
Infocode string `json:"infocode"` // 返回状态说明,10000代表正确
Lives []struct {
Province string `json:"province"` // 省份名
City string `json:"city"` // 城市名
Adcode string `json:"adcode"` // 区域编码
Weather string `json:"weather"` // 天气现象(汉字描述)
Temperature string `json:"temperature"` // 实时气温,单位:摄氏度
Winddirection string `json:"winddirection"` // 风向描述
Windpower string `json:"windpower"` // 风力级别,单位:级
Humidity string `json:"humidity"` // 空气湿度
Reporttime string `json:"reporttime"` // 数据发布的时间
TemperatureFloat string `json:"temperature_float"` // 温度
HumidityFloat string `json:"humidity_float"` // 湿度
} `json:"lives"` // 实况天气数据信息
Forecasts []struct {
City string `json:"city"` // 城市名称
Adcode string `json:"adcode"` // 城市编码
Province string `json:"province"` // 省份名称
Reporttime string `json:"reporttime"` // 预报发布时间
Casts []struct {
Date string `json:"date"` // 日期
Week string `json:"week"` // 星期几
Dayweather string `json:"dayweather"` // 白天天气现象
Nightweather string `json:"nightweather"` // 晚上天气现象
Daytemp string `json:"daytemp"` // 白天温度
Nighttemp string `json:"nighttemp"` // 晚上温度
Daywind string `json:"daywind"` // 白天风向
Nightwind string `json:"nightwind"` // 晚上风向
Daypower string `json:"daypower"` // 白天风力
Nightpower string `json:"nightpower"` // 晚上风力
DaytempFloat string `json:"daytemp_float"` // 日温度
NighttempFloat string `json:"nighttemp_float"` // 夜间温度
} `json:"casts"` // 预报数据list结构元素cast,按顺序为当天、第二天、第三天的预报数据
} `json:"forecasts"` // 预报天气信息数据
}
type WeatherWeatherInfoResult struct {
Result WeatherWeatherInfoResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
}
func newWeatherWeatherInfoResult(result WeatherWeatherInfoResponse, body []byte, http gorequest.Response) *WeatherWeatherInfoResult {
return &WeatherWeatherInfoResult{Result: result, Body: body, Http: http}
}
// WeatherWeatherInfo 天气查询
// https://lbs.amap.com/api/webservice/guide/api/weatherinfo
func (c *Client) WeatherWeatherInfo(ctx context.Context, city string, notMustParams ...gorequest.Params) (*WeatherWeatherInfoResult, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
params.Set("key", c.GetKey())
params.Set("city", city)
params.Set("output", "JSON")
// 请求
request, err := c.request(ctx, apiUrl+"/weather/weatherInfo", params, http.MethodGet)
if err != nil {
return newWeatherWeatherInfoResult(WeatherWeatherInfoResponse{}, request.ResponseBody, request), err
}
// 定义
var response WeatherWeatherInfoResponse
err = gojson.Unmarshal(request.ResponseBody, &response)
return newWeatherWeatherInfoResult(response, request.ResponseBody, request), err
}

@ -3,35 +3,31 @@ package baidu
import (
"github.com/dtapps/go-library/utils/golog"
"github.com/dtapps/go-library/utils/gorequest"
"gorm.io/gorm"
)
type ConfigClient struct {
PgsqlDb *gorm.DB // 日志数据库
// ClientConfig 实例配置
type ClientConfig struct {
Ak string
}
type Client struct {
client *gorequest.App // 请求客户端
log *golog.ApiClient // 日志服务
config *ConfigClient // 配置
requestClient *gorequest.App // 请求服务
config struct {
ak string
}
slog struct {
status bool // 状态
client *golog.ApiSLog // 日志服务
}
}
func NewClient(config *ConfigClient) (*Client, error) {
// NewClient 创建实例化
func NewClient(config *ClientConfig) (*Client, error) {
var err error
c := &Client{config: config}
c := &Client{}
c.client = gorequest.NewHttp()
c.config.ak = config.Ak
if c.config.PgsqlDb != nil {
c.log, err = golog.NewApiClient(
golog.WithGormClient(c.config.PgsqlDb),
golog.WithTableName(logTable),
)
if err != nil {
return nil, err
}
}
c.requestClient = gorequest.NewHttp()
return c, nil
}

@ -0,0 +1,12 @@
package baidu
import "github.com/dtapps/go-library/utils/golog"
// ConfigSLogClientFun 日志配置
func (c *Client) ConfigSLogClientFun(apiSLogFun golog.ApiSLogFun) {
apiSLog := apiSLogFun()
if apiSLog != nil {
c.slog.client = apiSLog
c.slog.status = true
}
}

@ -1,5 +1,9 @@
package baidu
const (
logTable = "baidu"
apiUrl = "https://api.map.baidu.com"
)
const (
LogTable = "baidu"
)

@ -1,33 +0,0 @@
package baidu
import (
"github.com/dtapps/go-library/utils/gojson"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
type ExpressResponse struct{}
type ExpressResult struct {
Result ExpressResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
Err error // 错误
}
func newExpressResult(result ExpressResponse, body []byte, http gorequest.Response, err error) *ExpressResult {
return &ExpressResult{Result: result, Body: body, Http: http, Err: err}
}
// Express ipv1
// https://www.cloudflare.com/ips-v4
func (c *Client) Express() *ExpressResult {
// 参数
params := gorequest.NewParams()
// 请求
request, err := c.request("https://m.baidu.com/s?word=快递查询&ts={$ts}&t_kt=0&ie=utf-8&rsv_iqid=&rsv_t=&sa=&rsv_pq=&rsv_sug4=&tj=1&inputT={$input}&sugid=&ss=", params, http.MethodPost)
// 定义
var response ExpressResponse
err = gojson.Unmarshal(request.ResponseBody, &response)
return newExpressResult(response, request.ResponseBody, request, err)
}

@ -0,0 +1,51 @@
package baidu
import (
"context"
"github.com/dtapps/go-library/utils/gojson"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
type GeocodingResponse struct {
Status int `json:"status"`
Result struct {
Location struct {
Lng float64 `json:"lng"`
Lat float64 `json:"lat"`
} `json:"location"`
Precise int `json:"precise"`
Confidence int `json:"confidence"`
Comprehension int `json:"comprehension"`
Level string `json:"level"`
} `json:"result"`
}
type GeocodingResult struct {
Result GeocodingResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
}
func newGeocodingResult(result GeocodingResponse, body []byte, http gorequest.Response) *GeocodingResult {
return &GeocodingResult{Result: result, Body: body, Http: http}
}
// Geocoding 地理编码服务
// https://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
func (c *Client) Geocoding(ctx context.Context, address string, notMustParams ...gorequest.Params) (*GeocodingResult, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
params.Set("ak", c.GetAk())
params.Set("address", address)
params.Set("output", "json")
// 请求
request, err := c.request(ctx, apiUrl+"/geocoding/v3/", params, http.MethodGet)
if err != nil {
return newGeocodingResult(GeocodingResponse{}, request.ResponseBody, request), err
}
// 定义
var response GeocodingResponse
err = gojson.Unmarshal(request.ResponseBody, &response)
return newGeocodingResult(response, request.ResponseBody, request), err
}

@ -0,0 +1,5 @@
package baidu
func (c *Client) GetAk() string {
return c.config.ak
}

@ -0,0 +1,57 @@
package baidu
import (
"context"
"github.com/dtapps/go-library/utils/gojson"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
type LocationIpResponse struct {
Address string `json:"address"` // 详细地址信息
Content struct {
AddressDetail struct {
Province string `json:"province"` // 省份
City string `json:"city"` // 城市
District string `json:"district"`
Street string `json:"street"`
StreetNumber string `json:"street_number"`
CityCode int `json:"city_code"` // 百度城市代码
Adcode string `json:"adcode"`
} `json:"address_detail"`
Address string `json:"address"` // 简要地址信息
Point struct {
X string `json:"x"` // 当前城市中心点经度
Y string `json:"y"` // 当前城市中心点纬度
} `json:"point"`
} `json:"content"`
Status int `json:"status"`
}
type LocationIpResult struct {
Result LocationIpResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
}
func newLocationIpResult(result LocationIpResponse, body []byte, http gorequest.Response) *LocationIpResult {
return &LocationIpResult{Result: result, Body: body, Http: http}
}
// LocationIp 普通IP定位
// https://lbsyun.baidu.com/index.php?title=webapi/ip-api
func (c *Client) LocationIp(ctx context.Context, ip string, notMustParams ...gorequest.Params) (*LocationIpResult, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
params.Set("ak", c.GetAk())
params.Set("ip", ip)
// 请求
request, err := c.request(ctx, apiUrl+"/location/ip", params, http.MethodGet)
if err != nil {
return newLocationIpResult(LocationIpResponse{}, request.ResponseBody, request), err
}
// 定义
var response LocationIpResponse
err = gojson.Unmarshal(request.ResponseBody, &response)
return newLocationIpResult(response, request.ResponseBody, request), err
}

@ -1,11 +1,14 @@
package baidu
import "github.com/dtapps/go-library/utils/gorequest"
import (
"context"
"github.com/dtapps/go-library/utils/gorequest"
)
func (c *Client) request(url string, params map[string]interface{}, method string) (gorequest.Response, error) {
func (c *Client) request(ctx context.Context, url string, params map[string]interface{}, method string) (gorequest.Response, error) {
// 创建请求
client := c.client
client := c.requestClient
// 设置请求地址
client.SetUri(url)
@ -20,14 +23,14 @@ func (c *Client) request(url string, params map[string]interface{}, method strin
client.SetParams(params)
// 发起请求
request, err := client.Request()
request, err := client.Request(ctx)
if err != nil {
return gorequest.Response{}, err
}
// 日志
if c.config.PgsqlDb != nil {
go c.log.GormMiddleware(request)
// 记录日志
if c.slog.status {
go c.slog.client.Middleware(ctx, request)
}
return request, err

@ -0,0 +1,71 @@
package baidu
import (
"context"
"github.com/dtapps/go-library/utils/gojson"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
type ReverseGeocodingResponse struct {
Status int `json:"status"`
Result struct {
Location struct {
Lng float64 `json:"lng"`
Lat float64 `json:"lat"`
} `json:"location"`
FormattedAddress string `json:"formatted_address"`
Business string `json:"business"`
AddressComponent struct {
Country string `json:"country"`
CountryCode int `json:"country_code"`
CountryCodeIso string `json:"country_code_iso"`
CountryCodeIso2 string `json:"country_code_iso2"`
Province string `json:"province"`
City string `json:"city"`
CityLevel int `json:"city_level"`
District string `json:"district"`
Town string `json:"town"`
TownCode string `json:"town_code"`
Distance string `json:"distance"`
Direction string `json:"direction"`
Adcode string `json:"adcode"`
Street string `json:"street"`
StreetNumber string `json:"street_number"`
} `json:"addressComponent"`
Pois []interface{} `json:"pois"`
Roads []interface{} `json:"roads"`
PoiRegions []interface{} `json:"poiRegions"`
SematicDescription string `json:"sematic_description"`
CityCode int `json:"cityCode"`
} `json:"result"`
}
type ReverseGeocodingResult struct {
Result ReverseGeocodingResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
}
func newReverseGeocodingResult(result ReverseGeocodingResponse, body []byte, http gorequest.Response) *ReverseGeocodingResult {
return &ReverseGeocodingResult{Result: result, Body: body, Http: http}
}
// ReverseGeocoding 全球逆地理编码服务
// https://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding-abroad
func (c *Client) ReverseGeocoding(ctx context.Context, location string, notMustParams ...gorequest.Params) (*ReverseGeocodingResult, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
params.Set("ak", c.GetAk())
params.Set("location", location)
params.Set("output", "json")
// 请求
request, err := c.request(ctx, apiUrl+"/reverse_geocoding/v3/", params, http.MethodGet)
if err != nil {
return newReverseGeocodingResult(ReverseGeocodingResponse{}, request.ResponseBody, request), err
}
// 定义
var response ReverseGeocodingResponse
err = gojson.Unmarshal(request.ResponseBody, &response)
return newReverseGeocodingResult(response, request.ResponseBody, request), err
}

@ -0,0 +1,103 @@
package baidu
import (
"context"
"github.com/dtapps/go-library/utils/gojson"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
type WeatherResponse struct {
Status int `json:"status"`
Result struct {
Location struct {
Country string `json:"country"` // 国家名称
Province string `json:"province"` // 省份名称
City string `json:"city"` // 城市名称
Name string `json:"name"` // 区县名称
Id string `json:"id"` // 区县id
} `json:"location"` // 地理位置信息
Now struct {
Text string `json:"text"` // 天气现象
Temp int `json:"temp"` // 温度(℃)
FeelsLike int `json:"feels_like"` // 体感温度(℃)
Rh int `json:"rh"` // 相对湿度(%)
WindClass string `json:"wind_class"` // 风力等级
WindDir string `json:"wind_dir"` // 风向描述
Prec1h float64 `json:"prec_1h"` // 1小时累计降水量(mm)
Clouds int `json:"clouds"` // 云量(%)
Vis int `json:"vis"` // 能见度(m)
Aqi int `json:"aqi"` // 空气质量指数数值
Pm25 int `json:"pm25"` // pm2.5浓度(μg/m3)
Pm10 int `json:"pm10"` // pm10浓度(μg/m3)
No2 int `json:"no2"` // 二氧化氮浓度(μg/m3)
So2 int `json:"so2"` // 二氧化硫浓度(μg/m3)
O3 int `json:"o3"` // 臭氧浓度(μg/m3)
Co float64 `json:"co"` // 一氧化碳浓度(mg/m3)
Uptime string `json:"uptime"` // 数据更新时间,北京时间
} `json:"now"` // 实况数据
Alert []struct {
Type string `json:"type"` // 预警事件类型
Level string `json:"level"` // 预警事件等级
Title string `json:"title"` // 预警标题
Desc string `json:"desc"` // 预警详细提示信息
} `json:"alert"` // 气象预警数据
Indexes []struct {
Name string `json:"name"` // 生活指数中文名称
Brief string `json:"brief"` // 生活指数概要说明
Detail string `json:"detail"` // 生活指数详细说明
} `json:"indexes"` // 生活指数数据
Forecasts []struct {
Date string `json:"date"` // 日期,北京时区
Week string `json:"week"` // 星期,北京时区
High int `json:"high"` // 最高温度(℃)
Low int `json:"low"` // 最低温度(℃)
WcDay string `json:"wc_day"` // 白天风力
WcNight string `json:"wc_night"` // 晚上风力
WdDay string `json:"wd_day"` // 白天风向
WdNight string `json:"wd_night"` // 晚上风向
TextDay string `json:"text_day"` // 白天天气现象
TextNight string `json:"text_night"` // 晚上天气现象
} `json:"forecasts"` // 预报数据
ForecastHours []struct {
Text string `json:"text"` // 天气现象
TempFc int `json:"temp_fc"` // 温度(℃)
WindClass string `json:"wind_class"` // 风力等级
WindDir string `json:"wind_dir"` // 风向描述
Rh int `json:"rh"` // 相对湿度
Prec1h float64 `json:"prec_1h"` // 1小时累计降水量(mm)
Clouds int `json:"clouds"` // 云量(%)
DataTime string `json:"data_time"` // 数据时间
} `json:"forecast_hours"` // 未来24小时逐小时预报
} `json:"result"`
Message string `json:"message"`
}
type WeatherResult struct {
Result WeatherResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
}
func newWeatherResult(result WeatherResponse, body []byte, http gorequest.Response) *WeatherResult {
return &WeatherResult{Result: result, Body: body, Http: http}
}
// Weather 国内天气查询服务
// https://lbsyun.baidu.com/index.php?title=webapi/weather
func (c *Client) Weather(ctx context.Context, districtId string, notMustParams ...gorequest.Params) (*WeatherResult, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
params.Set("ak", c.GetAk())
params.Set("district_id", districtId)
params.Set("output", "json")
// 请求
request, err := c.request(ctx, apiUrl+"/weather/v1/", params, http.MethodGet)
if err != nil {
return newWeatherResult(WeatherResponse{}, request.ResponseBody, request), err
}
// 定义
var response WeatherResponse
err = gojson.Unmarshal(request.ResponseBody, &response)
return newWeatherResult(response, request.ResponseBody, request), err
}

@ -0,0 +1,77 @@
package caiyunapp
func GetCodeType(code string) string {
firsTwo := code[:2]
switch firsTwo {
case "01":
return "台风"
case "02":
return "暴雨"
case "03":
return "暴雪"
case "04":
return "寒潮"
case "05":
return "大风"
case "06":
return "沙尘暴"
case "07":
return "高温"
case "08":
return "干旱"
case "09":
return "雷电"
case "10":
return "冰雹"
case "11":
return "霜冻"
case "12":
return "大雾"
case "13":
return "霾"
case "14":
return "道路结冰"
case "15":
return "森林火险"
case "16":
return "雷雨大风"
case "17":
return "春季沙尘天气趋势预警"
case "18":
return "沙尘"
}
return ""
}
func GetCodeId(code string) string {
lastTwo := code[len(code)-2 : 0]
switch lastTwo {
case "00":
return "白色"
case "01":
return "蓝色"
case "02":
return "黄色"
case "03":
return "橙色"
case "04":
return "红色"
}
return ""
}
func GetCodeIdColor(code string) string {
lastTwo := code[len(code)-2 : 0]
switch lastTwo {
case "00":
return "white"
case "01":
return "blue"
case "02":
return "yellow"
case "03":
return "orange"
case "04":
return "red"
}
return ""
}

@ -0,0 +1,41 @@
package caiyunapp
// GetAqi 空气污染
// https://docs.caiyunapp.com/docs/tables/aqi
// https://www.mee.gov.cn/ywgz/fgbz/bz/bzwb/jcffbz/201203/W020120410332725219541.pdf
func GetAqi(aqi float64) string {
if aqi <= 50 {
return "优"
} else if aqi <= 100 {
return "良"
} else if aqi <= 150 {
return "轻度污染"
} else if aqi <= 200 {
return "中度污染"
} else if aqi <= 300 {
return "重度污染"
} else if aqi > 300 {
return "严重污染"
}
return "缺数据"
}
// GetAqiColor 空气污染
// https://docs.caiyunapp.com/docs/tables/aqi
// https://www.mee.gov.cn/ywgz/fgbz/bz/bzwb/jcffbz/201203/W020120410332725219541.pdf
func GetAqiColor(aqi float64) string {
if aqi <= 50 {
return "green"
} else if aqi <= 100 {
return "yellow"
} else if aqi <= 150 {
return "orange"
} else if aqi <= 200 {
return "red"
} else if aqi <= 300 {
return "purple"
} else if aqi > 300 {
return "maroon"
}
return ""
}

@ -0,0 +1,15 @@
package caiyunapp
// GetCarWashingDesc 洗车指数 https://docs.caiyunapp.com/docs/tables/lifeindex
func GetCarWashingDesc(carWashing float64) string {
if carWashing <= 1 {
return "适宜"
} else if carWashing <= 2 {
return "较适宜"
} else if carWashing <= 3 {
return "较不适宜"
} else if carWashing <= 4 {
return "不适应"
}
return ""
}

@ -0,0 +1,35 @@
package caiyunapp
import (
"github.com/dtapps/go-library/utils/golog"
"github.com/dtapps/go-library/utils/gorequest"
)
// ClientConfig 实例配置
type ClientConfig struct {
Token string
}
// Client 实例
type Client struct {
requestClient *gorequest.App // 请求服务
config struct {
token string
}
slog struct {
status bool // 状态
client *golog.ApiSLog // 日志服务
}
}
// NewClient 创建实例化
func NewClient(config *ClientConfig) (*Client, error) {
c := &Client{}
c.config.token = config.Token
c.requestClient = gorequest.NewHttp()
return c, nil
}

@ -0,0 +1,15 @@
package caiyunapp
// GetColdRiskDesc 感冒指数 https://docs.caiyunapp.com/docs/tables/lifeindex
func GetColdRiskDesc(coldRisk float64) string {
if coldRisk <= 1 {
return "少发"
} else if coldRisk <= 2 {
return "较易发"
} else if coldRisk <= 3 {
return "易发"
} else if coldRisk <= 4 {
return "极易发"
}
return ""
}

@ -0,0 +1,35 @@
package caiyunapp
// GetComfortDesc 舒适度指数 https://docs.caiyunapp.com/docs/tables/lifeindex
func GetComfortDesc(comfort float64) string {
if comfort <= 0 {
return "闷热"
} else if comfort <= 1 {
return "酷热"
} else if comfort <= 2 {
return "很热"
} else if comfort <= 3 {
return "热"
} else if comfort <= 4 {
return "温暖"
} else if comfort <= 5 {
return "舒适"
} else if comfort <= 6 {
return "凉爽"
} else if comfort <= 7 {
return "冷"
} else if comfort <= 8 {
return "很冷"
} else if comfort <= 9 {
return "寒冷"
} else if comfort <= 10 {
return "极冷"
} else if comfort <= 11 {
return "刺骨的冷"
} else if comfort <= 12 {
return "湿冷"
} else if comfort <= 13 {
return "干冷"
}
return ""
}

@ -0,0 +1,12 @@
package caiyunapp
import "github.com/dtapps/go-library/utils/golog"
// ConfigSLogClientFun 日志配置
func (c *Client) ConfigSLogClientFun(apiSLogFun golog.ApiSLogFun) {
apiSLog := apiSLogFun()
if apiSLog != nil {
c.slog.client = apiSLog
c.slog.status = true
}
}

@ -0,0 +1,9 @@
package caiyunapp
const (
apiUrl = "https://api.caiyunapp.com/v2.6"
)
const (
LogTable = "caiyunapp"
)

@ -0,0 +1,262 @@
package caiyunapp
import (
"context"
"fmt"
"github.com/dtapps/go-library/utils/gojson"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
type DailyResponse struct {
Status string `json:"status"` // 状态
ApiVersion string `json:"api_version"` // api版本
ApiStatus string `json:"api_status"` // api状态
Lang string `json:"lang"`
Unit string `json:"unit"`
Tzshift float64 `json:"tzshift"`
Timezone string `json:"timezone"`
ServerTime float64 `json:"server_time"`
Location []float64 `json:"location"`
Result struct {
Alert struct {
Status string `json:"status"`
Content []struct {
Pubtimestamp int `json:"pubtimestamp"` // 发布时间,单位是 Unix 时间戳
AlertID string `json:"alertId"` // 预警 ID
Status string `json:"status"` // 预警信息的状态
Adcode string `json:"adcode"` // 区域代码
Location string `json:"location"` // 位置
Province string `json:"province"` // 省
City string `json:"city"` // 市
County string `json:"county"` // 县
Code string `json:"code"` // 预警代码
Source string `json:"source"` // 发布单位
Title string `json:"title"` // 标题
Description string `json:"description"` // 描述
RegionID string `json:"regionId"`
Latlon []float64 `json:"latlon"`
RequestStatus string `json:"request_status"`
} `json:"content"`
Adcodes []struct {
Adcode int `json:"adcode"`
Name string `json:"name"`
} `json:"adcodes"` // 行政区划层级信息
} `json:"alert"` // 预警数据
Daily struct {
Status string `json:"status"`
Astro []struct {
Date string `json:"date"`
Sunrise struct {
Time string `json:"time"`
} `json:"sunrise"`
Sunset struct {
Time string `json:"time"`
} `json:"sunset"`
} `json:"astro"` // 日出日落时间当地时区的时刻tzshift 不作用在这个变量)
Precipitation08H20H []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
Probability float64 `json:"probability"`
} `json:"precipitation_08h_20h"` // 白天降水数据
Precipitation20H32H []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
Probability float64 `json:"probability"`
} `json:"precipitation_20h_32h"` // 夜晚降水数据
Precipitation []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
Probability float64 `json:"probability"`
} `json:"precipitation"` // 降水数据
Temperature []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
} `json:"temperature"` // 全天地表 2 米气温
Temperature08H20H []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
} `json:"temperature_08h_20h"` // 白天地表 2 米气温
Temperature20H32H []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
} `json:"temperature_20h_32h"` // 夜晚地表 2 米气温
Wind []struct {
Date string `json:"date"`
Max struct {
Speed float64 `json:"speed"` // 全天地表 10 米风速
Direction float64 `json:"direction"`
} `json:"max"`
Min struct {
Speed float64 `json:"speed"` // 全天地表 10 米风速
Direction float64 `json:"direction"`
} `json:"min"`
Avg struct {
Speed float64 `json:"speed"` // 全天地表 10 米风速
Direction float64 `json:"direction"`
} `json:"avg"`
} `json:"wind"`
Wind08H20H []struct {
Date string `json:"date"`
Max struct {
Speed float64 `json:"speed"` // 白天地表 10 米风速
Direction float64 `json:"direction"`
} `json:"max"`
Min struct {
Speed float64 `json:"speed"` // 白天地表 10 米风速
Direction float64 `json:"direction"`
} `json:"min"`
Avg struct {
Speed float64 `json:"speed"` // 白天地表 10 米风速
Direction float64 `json:"direction"`
} `json:"avg"`
} `json:"wind_08h_20h"`
Wind20H32H []struct {
Date string `json:"date"`
Max struct {
Speed float64 `json:"speed"` // 夜晚地表 10 米风速
Direction float64 `json:"direction"`
} `json:"max"`
Min struct {
Speed float64 `json:"speed"` // 夜晚地表 10 米风速
Direction float64 `json:"direction"`
} `json:"min"`
Avg struct {
Speed float64 `json:"speed"` // 夜晚地表 10 米风速
Direction float64 `json:"direction"`
} `json:"avg"`
} `json:"wind_20h_32h"`
Humidity []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
} `json:"humidity"` // 地表 2 米相对湿度(%)
Cloudrate []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
} `json:"cloudrate"` // 云量(0.0-1.0)
Pressure []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
} `json:"pressure"` // 地面气压
Visibility []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
} `json:"visibility"` // 地表水平能见度
Dswrf []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
} `json:"dswrf"` // 向下短波辐射通量(W/M2)
AirQuality struct {
Aqi []struct {
Date string `json:"date"`
Max struct {
Chn float64 `json:"chn"`
Usa float64 `json:"usa"`
} `json:"max"`
Avg struct {
Chn float64 `json:"chn"`
Usa float64 `json:"usa"`
} `json:"avg"`
Min struct {
Chn float64 `json:"chn"`
Usa float64 `json:"usa"`
} `json:"min"`
} `json:"aqi"` // 国标 AQI
Pm25 []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Avg float64 `json:"avg"`
Min float64 `json:"min"`
} `json:"pm25"` // PM2.5 浓度(μg/m3)
} `json:"air_quality"`
Skycon []struct {
Date string `json:"date"`
Value string `json:"value"` // 全天主要 天气现象
} `json:"skycon"`
Skycon08H20H []struct {
Date string `json:"date"`
Value string `json:"value"` // 白天主要 天气现象
} `json:"skycon_08h_20h"`
Skycon20H32H []struct {
Date string `json:"date"`
Value string `json:"value"` // 夜晚主要 天气现象
} `json:"skycon_20h_32h"`
LifeIndex struct {
Ultraviolet []struct {
Date string `json:"date"`
Index string `json:"index"`
Desc string `json:"desc"` // 紫外线指数自然语言
} `json:"ultraviolet"`
CarWashing []struct {
Date string `json:"date"`
Index string `json:"index"`
Desc string `json:"desc"` // 洗车指数自然语言
} `json:"carWashing"`
Dressing []struct {
Date string `json:"date"`
Index string `json:"index"`
Desc string `json:"desc"` // 穿衣指数自然语言
} `json:"dressing"`
Comfort []struct {
Date string `json:"date"`
Index string `json:"index"`
Desc string `json:"desc"` // 舒适度指数自然语言
} `json:"comfort"`
ColdRisk []struct {
Date string `json:"date"`
Index string `json:"index"`
Desc string `json:"desc"` // 感冒指数自然语言
} `json:"coldRisk"`
} `json:"life_index"`
} `json:"daily"` // 天级别预报
Primary float64 `json:"primary"`
} `json:"result"`
}
type DailyResult struct {
Result DailyResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
}
func newDailyResult(result DailyResponse, body []byte, http gorequest.Response) *DailyResult {
return &DailyResult{Result: result, Body: body, Http: http}
}
// Daily 天级别预报
// https://docs.caiyunapp.com/docs/daily
func (c *Client) Daily(ctx context.Context, location string, notMustParams ...gorequest.Params) (*DailyResult, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := c.request(ctx, c.getApiUrl()+fmt.Sprintf("/%s/daily", location), params, http.MethodGet)
if err != nil {
return newDailyResult(DailyResponse{}, request.ResponseBody, request), err
}
// 定义
var response DailyResponse
err = gojson.Unmarshal(request.ResponseBody, &response)
return newDailyResult(response, request.ResponseBody, request), err
}

@ -0,0 +1,25 @@
package caiyunapp
// GetDressingDesc 穿衣指数 https://docs.caiyunapp.com/docs/tables/lifeindex
func GetDressingDesc(dressing float64) string {
if dressing <= 0 {
return "极热"
} else if dressing <= 1 {
return "极热"
} else if dressing <= 2 {
return "很热"
} else if dressing <= 3 {
return "热"
} else if dressing <= 4 {
return "温暖"
} else if dressing <= 5 {
return "凉爽"
} else if dressing <= 6 {
return "冷"
} else if dressing <= 7 {
return "寒冷"
} else if dressing <= 8 {
return "极冷"
}
return ""
}

@ -0,0 +1,9 @@
package caiyunapp
func (c *Client) GetToken() string {
return c.config.token
}
func (c *Client) getApiUrl() string {
return apiUrl + "/" + c.config.token
}

@ -0,0 +1,134 @@
package caiyunapp
import (
"context"
"fmt"
"github.com/dtapps/go-library/utils/gojson"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
type HourlyResponse struct {
Status string `json:"status"`
ApiVersion string `json:"api_version"`
ApiStatus string `json:"api_status"`
Lang string `json:"lang"`
Unit string `json:"unit"`
Tzshift int `json:"tzshift"`
Timezone string `json:"timezone"`
ServerTime int `json:"server_time"`
Location []float64 `json:"location"`
Result struct {
Alert struct {
Status string `json:"status"`
Content []struct {
Pubtimestamp int `json:"pubtimestamp"` // 发布时间,单位是 Unix 时间戳
AlertID string `json:"alertId"` // 预警 ID
Status string `json:"status"` // 预警信息的状态
Adcode string `json:"adcode"` // 区域代码
Location string `json:"location"` // 位置
Province string `json:"province"` // 省
City string `json:"city"` // 市
County string `json:"county"` // 县
Code string `json:"code"` // 预警代码
Source string `json:"source"` // 发布单位
Title string `json:"title"` // 标题
Description string `json:"description"` // 描述
RegionID string `json:"regionId"`
Latlon []float64 `json:"latlon"`
RequestStatus string `json:"request_status"`
} `json:"content"`
Adcodes []struct {
Adcode int `json:"adcode"`
Name string `json:"name"`
} `json:"adcodes"` // 行政区划层级信息
} `json:"alert"` // 预警数据
Hourly struct {
Status string `json:"status"`
Description string `json:"description"`
Precipitation []struct {
Datetime string `json:"datetime"`
Value float64 `json:"value"`
Probability float64 `json:"probability"`
} `json:"precipitation"`
Temperature []struct {
Datetime string `json:"datetime"`
Value float64 `json:"value"` // 地表 2 米气温
} `json:"temperature"`
ApparentTemperature []struct {
Datetime string `json:"datetime"`
Value float64 `json:"value"` // 体感温度
} `json:"apparent_temperature"`
Wind []struct {
Datetime string `json:"datetime"`
Speed float64 `json:"speed"`
Direction float64 `json:"direction"`
} `json:"wind"`
Humidity []struct {
Datetime string `json:"datetime"`
Value float64 `json:"value"` // 地表 2 米相对湿度(%)
} `json:"humidity"`
Cloudrate []struct {
Datetime string `json:"datetime"`
Value float64 `json:"value"`
} `json:"cloudrate"`
Skycon []struct {
Datetime string `json:"datetime"`
Value string `json:"value"`
} `json:"skycon"`
Pressure []struct {
Datetime string `json:"datetime"`
Value float64 `json:"value"` // 地面气压
} `json:"pressure"`
Visibility []struct {
Datetime string `json:"datetime"`
Value float64 `json:"value"`
} `json:"visibility"`
Dswrf []struct {
Datetime string `json:"datetime"`
Value float64 `json:"value"`
} `json:"dswrf"`
AirQuality struct {
Aqi []struct {
Datetime string `json:"datetime"`
Value struct {
Chn float64 `json:"chn"`
Usa float64 `json:"usa"`
} `json:"value"`
} `json:"aqi"`
Pm25 []struct {
Datetime string `json:"datetime"`
Value float64 `json:"value"`
} `json:"pm25"`
} `json:"air_quality"`
} `json:"hourly"` // 小时级别预报
Primary float64 `json:"primary"`
ForecastKeypoint string `json:"forecast_keypoint"`
} `json:"result"`
}
type HourlyResult struct {
Result HourlyResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
}
func newHourlyResult(result HourlyResponse, body []byte, http gorequest.Response) *HourlyResult {
return &HourlyResult{Result: result, Body: body, Http: http}
}
// Hourly 小时级别预报
// https://docs.caiyunapp.com/docs/hourly
func (c *Client) Hourly(ctx context.Context, location string, notMustParams ...gorequest.Params) (*HourlyResult, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := c.request(ctx, c.getApiUrl()+fmt.Sprintf("/%s/hourly", location), params, http.MethodGet)
if err != nil {
return newHourlyResult(HourlyResponse{}, request.ResponseBody, request), err
}
// 定义
var response HourlyResponse
err = gojson.Unmarshal(request.ResponseBody, &response)
return newHourlyResult(response, request.ResponseBody, request), err
}

@ -0,0 +1,83 @@
package caiyunapp
import (
"context"
"fmt"
"github.com/dtapps/go-library/utils/gojson"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
type MinutelyResponse struct {
Status string `json:"status"`
ApiVersion string `json:"api_version"`
ApiStatus string `json:"api_status"`
Lang string `json:"lang"`
Unit string `json:"unit"`
Tzshift float64 `json:"tzshift"`
Timezone string `json:"timezone"`
ServerTime float64 `json:"server_time"`
Location []float64 `json:"location"`
Result struct {
Alert struct {
Status string `json:"status"`
Content []struct {
Pubtimestamp int `json:"pubtimestamp"` // 发布时间,单位是 Unix 时间戳
AlertID string `json:"alertId"` // 预警 ID
Status string `json:"status"` // 预警信息的状态
Adcode string `json:"adcode"` // 区域代码
Location string `json:"location"` // 位置
Province string `json:"province"` // 省
City string `json:"city"` // 市
County string `json:"county"` // 县
Code string `json:"code"` // 预警代码
Source string `json:"source"` // 发布单位
Title string `json:"title"` // 标题
Description string `json:"description"` // 描述
RegionID string `json:"regionId"`
Latlon []float64 `json:"latlon"`
RequestStatus string `json:"request_status"`
} `json:"content"`
Adcodes []struct {
Adcode int `json:"adcode"`
Name string `json:"name"`
} `json:"adcodes"` // 行政区划层级信息
} `json:"alert"` // 预警数据
Minutely struct {
Status string `json:"status"`
Datasource string `json:"datasource"`
Precipitation2H []float64 `json:"precipitation_2h"`
Precipitation []float64 `json:"precipitation"`
Probability []float64 `json:"probability"`
Description string `json:"description"`
} `json:"minutely"` // 分钟级预报
Primary float64 `json:"primary"`
ForecastKeypoint string `json:"forecast_keypoint"`
} `json:"result"`
}
type MinutelyResult struct {
Result MinutelyResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
}
func newMinutelyResult(result MinutelyResponse, body []byte, http gorequest.Response) *MinutelyResult {
return &MinutelyResult{Result: result, Body: body, Http: http}
}
// Minutely 分钟级预报
// https://docs.caiyunapp.com/docs/minutely
func (c *Client) Minutely(ctx context.Context, location string, notMustParams ...gorequest.Params) (*MinutelyResult, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := c.request(ctx, c.getApiUrl()+fmt.Sprintf("/%s/minutely", location), params, http.MethodGet)
if err != nil {
return newMinutelyResult(MinutelyResponse{}, request.ResponseBody, request), err
}
// 定义
var response MinutelyResponse
err = gojson.Unmarshal(request.ResponseBody, &response)
return newMinutelyResult(response, request.ResponseBody, request), err
}

@ -0,0 +1,127 @@
package caiyunapp
import (
"context"
"fmt"
"github.com/dtapps/go-library/utils/gojson"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
type RealtimeResponse struct {
Status string `json:"status"`
ApiVersion string `json:"api_version"`
ApiStatus string `json:"api_status"`
Lang string `json:"lang"`
Unit string `json:"unit"`
Tzshift float64 `json:"tzshift"`
Timezone string `json:"timezone"`
ServerTime float64 `json:"server_time"`
Location []float64 `json:"location"`
Result struct {
Alert struct {
Status string `json:"status"`
Content []struct {
Pubtimestamp int `json:"pubtimestamp"` // 发布时间,单位是 Unix 时间戳
AlertID string `json:"alertId"` // 预警 ID
Status string `json:"status"` // 预警信息的状态
Adcode string `json:"adcode"` // 区域代码
Location string `json:"location"` // 位置
Province string `json:"province"` // 省
City string `json:"city"` // 市
County string `json:"county"` // 县
Code string `json:"code"` // 预警代码
Source string `json:"source"` // 发布单位
Title string `json:"title"` // 标题
Description string `json:"description"` // 描述
RegionID string `json:"regionId"`
Latlon []float64 `json:"latlon"`
RequestStatus string `json:"request_status"`
} `json:"content"`
Adcodes []struct {
Adcode int `json:"adcode"`
Name string `json:"name"`
} `json:"adcodes"` // 行政区划层级信息
} `json:"alert"` // 预警数据
Realtime struct {
Temperature float64 `json:"temperature"` // 地表2米气温
Humidity float64 `json:"humidity"` // 地表2米湿度相对湿度(%)
Cloudrate float64 `json:"cloudrate"` // 总云量(0.0-1.0)
Skycon string `json:"skycon"` // 天气现象
SkyconDesc string `json:"skycon_desc"` // 天气现象
Visibility float64 `json:"visibility"` // 地表水平能见度
Dswrf float64 `json:"dswrf"` // 向下短波辐射通量(W/M2)
Wind struct {
Speed float64 `json:"speed"` // 地表 10 米风速
Direction float64 `json:"direction"` // 地表 10 米风向
} `json:"wind"`
Pressure float64 `json:"pressure"` // 地面气压
ApparentTemperature float64 `json:"apparent_temperature"` // 体感温度
Precipitation struct {
Local struct {
Status string `json:"status"`
Datasource string `json:"datasource"` // 本地降水带与本地的距离
Intensity float64 `json:"intensity"` // 本地降水处的降水强度
} `json:"local"` // 本地降水强度
Nearest struct {
Status string `json:"status"`
Distance float64 `json:"distance"` // 最近降水带与本地的距离
Intensity float64 `json:"intensity"` // 最近降水处的降水强度
} `json:"nearest"` // 最近降水强度
} `json:"precipitation"`
AirQuality struct {
Pm25 float64 `json:"pm25"` // PM25 浓度(μg/m3)
Pm10 float64 `json:"pm10"` // PM10 浓度(μg/m3)
O3 float64 `json:"o3"` // 臭氧浓度(μg/m3)
So2 float64 `json:"so2"` // 二氧化氮浓度(μg/m3)
No2 float64 `json:"no2"` // 二氧化硫浓度(μg/m3)
Co float64 `json:"co"` // 一氧化碳浓度(mg/m3)
Aqi struct {
Chn float64 `json:"chn"` // 国标 AQI
Usa float64 `json:"usa"`
} `json:"aqi"`
Description struct {
Chn string `json:"chn"`
Usa string `json:"usa"`
} `json:"description"`
} `json:"air_quality"`
LifeIndex struct {
Ultraviolet struct {
Index float64 `json:"index"`
Desc string `json:"desc"` // 生活指数
} `json:"ultraviolet"`
Comfort struct {
Index float64 `json:"index"`
Desc string `json:"desc"` // 生活指数
} `json:"comfort"`
} `json:"life_index"`
} `json:"realtime"` // 实况
Primary float64 `json:"primary"`
} `json:"result"`
}
type RealtimeResult struct {
Result RealtimeResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
}
func newRealtimeResult(result RealtimeResponse, body []byte, http gorequest.Response) *RealtimeResult {
return &RealtimeResult{Result: result, Body: body, Http: http}
}
// Realtime 实况
// https://docs.caiyunapp.com/docs/realtime
func (c *Client) Realtime(ctx context.Context, location string, notMustParams ...gorequest.Params) (*RealtimeResult, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := c.request(ctx, c.getApiUrl()+fmt.Sprintf("/%s/realtime", location), params, http.MethodGet)
if err != nil {
return newRealtimeResult(RealtimeResponse{}, request.ResponseBody, request), err
}
// 定义
var response RealtimeResponse
err = gojson.Unmarshal(request.ResponseBody, &response)
return newRealtimeResult(response, request.ResponseBody, request), err
}

@ -0,0 +1,37 @@
package caiyunapp
import (
"context"
"github.com/dtapps/go-library/utils/gorequest"
)
func (c *Client) request(ctx context.Context, url string, params map[string]interface{}, method string) (gorequest.Response, error) {
// 创建请求
client := c.requestClient
// 设置请求地址
client.SetUri(url)
// 设置方式
client.SetMethod(method)
// 设置格式
client.SetContentTypeJson()
// 设置参数
client.SetParams(params)
// 发起请求
request, err := client.Request(ctx)
if err != nil {
return gorequest.Response{}, err
}
// 记录日志
if c.slog.status {
go c.slog.client.Middleware(ctx, request)
}
return request, err
}

@ -0,0 +1,48 @@
package caiyunapp
// GetSkyCon https://docs.caiyunapp.com/docs/tables/skycon
func GetSkyCon(skycon string) string {
switch skycon {
case "CLEAR_DAY":
return "晴(白天)"
case "CLEAR_NIGHT":
return "晴(夜间)"
case "PARTLY_CLOUDY_DAY":
return "多云(白天)"
case "PARTLY_CLOUDY_NIGHT":
return "多云(夜间)"
case "CLOUDY":
return "阴"
case "LIGHT_HAZE":
return "轻度雾霾"
case "MODERATE_HAZE":
return "中度雾霾"
case "HEAVY_HAZE":
return "重度雾霾"
case "LIGHT_RAIN":
return "小雨"
case "MODERATE_RAIN":
return "中雨"
case "HEAVY_RAIN":
return "大雨"
case "STORM_RAIN":
return "暴雨"
case "FOG":
return "雾"
case "LIGHT_SNOW":
return "小雪"
case "MODERATE_SNOW":
return "中雪"
case "HEAVY_SNOW":
return "大雪"
case "STORM_SNOW":
return "暴雪"
case "DUST":
return "浮尘"
case "SAND":
return "沙尘"
case "WIND":
return "大风"
}
return skycon
}

@ -0,0 +1,47 @@
package caiyunapp
// GetRealtimeUltravioletDesc 紫外线 https://docs.caiyunapp.com/docs/tables/lifeindex
func GetRealtimeUltravioletDesc(ultraviolet float64) string {
if ultraviolet <= 0 {
return "无"
} else if ultraviolet <= 1 {
return "很弱"
} else if ultraviolet <= 2 {
return "很弱"
} else if ultraviolet <= 3 {
return "弱"
} else if ultraviolet <= 4 {
return "弱"
} else if ultraviolet <= 5 {
return "中等"
} else if ultraviolet <= 6 {
return "中等"
} else if ultraviolet <= 7 {
return "强"
} else if ultraviolet <= 8 {
return "强"
} else if ultraviolet <= 9 {
return "强"
} else if ultraviolet <= 10 {
return "很强"
} else if ultraviolet <= 11 {
return "极强"
}
return "无"
}
// GetDailyUltravioletDesc 紫外线 https://docs.caiyunapp.com/docs/tables/lifeindex
func GetDailyUltravioletDesc(ultraviolet string) string {
if ultraviolet <= "1" {
return "最弱"
} else if ultraviolet <= "2" {
return "弱"
} else if ultraviolet <= "3" {
return "中等"
} else if ultraviolet <= "4" {
return "强"
} else if ultraviolet <= "5" {
return "很强"
}
return "无"
}

@ -0,0 +1,383 @@
package caiyunapp
import (
"context"
"fmt"
"github.com/dtapps/go-library/utils/gojson"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
type WeatherResponse struct {
Status string `json:"status"`
ApiVersion string `json:"api_version"`
ApiStatus string `json:"api_status"`
Lang string `json:"lang"`
Unit string `json:"unit"`
Tzshift int `json:"tzshift"`
Timezone string `json:"timezone"`
ServerTime int `json:"server_time"`
Location []float64 `json:"location"`
Result struct {
Alert struct {
Status string `json:"status"`
Content []struct {
Pubtimestamp int `json:"pubtimestamp"` // 发布时间,单位是 Unix 时间戳
AlertID string `json:"alertId"` // 预警 ID
Status string `json:"status"` // 预警信息的状态
Adcode string `json:"adcode"` // 区域代码
Location string `json:"location"` // 位置
Province string `json:"province"` // 省
City string `json:"city"` // 市
County string `json:"county"` // 县
Code string `json:"code"` // 预警代码
Source string `json:"source"` // 发布单位
Title string `json:"title"` // 标题
Description string `json:"description"` // 描述
RegionID string `json:"regionId"`
Latlon []float64 `json:"latlon"`
RequestStatus string `json:"request_status"`
} `json:"content"`
Adcodes []struct {
Adcode int `json:"adcode"`
Name string `json:"name"`
} `json:"adcodes"` // 行政区划层级信息
} `json:"alert"` // 预警数据
Realtime struct {
Temperature float64 `json:"temperature"` // 地表2米气温
Humidity float64 `json:"humidity"` // 地表2米湿度相对湿度(%)
Cloudrate float64 `json:"cloudrate"` // 总云量(0.0-1.0)
Skycon string `json:"skycon"` // 天气现象
SkyconDesc string `json:"skycon_desc"` // 天气现象
Visibility float64 `json:"visibility"` // 地表水平能见度
Dswrf float64 `json:"dswrf"` // 向下短波辐射通量(W/M2)
Wind struct {
Speed float64 `json:"speed"` // 地表 10 米风速
Direction float64 `json:"direction"` // 地表 10 米风向
} `json:"wind"`
Pressure float64 `json:"pressure"` // 地面气压
ApparentTemperature float64 `json:"apparent_temperature"` // 体感温度
Precipitation struct {
Local struct {
Status string `json:"status"`
Datasource string `json:"datasource"` // 本地降水带与本地的距离
Intensity float64 `json:"intensity"` // 本地降水处的降水强度
} `json:"local"` // 本地降水强度
Nearest struct {
Status string `json:"status"`
Distance float64 `json:"distance"` // 最近降水带与本地的距离
Intensity float64 `json:"intensity"` // 最近降水处的降水强度
} `json:"nearest"` // 最近降水强度
} `json:"precipitation"`
AirQuality struct {
Pm25 float64 `json:"pm25"` // PM25 浓度(μg/m3)
Pm10 float64 `json:"pm10"` // PM10 浓度(μg/m3)
O3 float64 `json:"o3"` // 臭氧浓度(μg/m3)
So2 float64 `json:"so2"` // 二氧化氮浓度(μg/m3)
No2 float64 `json:"no2"` // 二氧化硫浓度(μg/m3)
Co float64 `json:"co"` // 一氧化碳浓度(mg/m3)
Aqi struct {
Chn float64 `json:"chn"` // 国标 AQI
Usa float64 `json:"usa"`
} `json:"aqi"`
Description struct {
Chn string `json:"chn"`
Usa string `json:"usa"`
} `json:"description"`
} `json:"air_quality"`
LifeIndex struct {
Ultraviolet struct {
Index float64 `json:"index"`
Desc string `json:"desc"` // 生活指数
} `json:"ultraviolet"`
Comfort struct {
Index float64 `json:"index"`
Desc string `json:"desc"` // 生活指数
} `json:"comfort"`
} `json:"life_index"`
} `json:"realtime"` // 实况
Minutely struct {
Status string `json:"status"`
Datasource string `json:"datasource"`
Precipitation2H []float64 `json:"precipitation_2h"`
Precipitation []float64 `json:"precipitation"`
Probability []float64 `json:"probability"`
Description string `json:"description"`
} `json:"minutely"` // 分钟级预报
Hourly struct {
Status string `json:"status"`
Description string `json:"description"`
Precipitation []struct {
Datetime string `json:"datetime"`
Value float64 `json:"value"`
Probability float64 `json:"probability"`
} `json:"precipitation"`
Temperature []struct {
Datetime string `json:"datetime"`
Value float64 `json:"value"` // 地表 2 米气温
} `json:"temperature"`
ApparentTemperature []struct {
Datetime string `json:"datetime"`
Value float64 `json:"value"` // 体感温度
} `json:"apparent_temperature"`
Wind []struct {
Datetime string `json:"datetime"`
Speed float64 `json:"speed"`
Direction float64 `json:"direction"`
} `json:"wind"`
Humidity []struct {
Datetime string `json:"datetime"`
Value float64 `json:"value"` // 地表 2 米相对湿度(%)
} `json:"humidity"`
Cloudrate []struct {
Datetime string `json:"datetime"`
Value float64 `json:"value"`
} `json:"cloudrate"`
Skycon []struct {
Datetime string `json:"datetime"`
Value string `json:"value"`
} `json:"skycon"`
Pressure []struct {
Datetime string `json:"datetime"`
Value float64 `json:"value"` // 地面气压
} `json:"pressure"`
Visibility []struct {
Datetime string `json:"datetime"`
Value float64 `json:"value"`
} `json:"visibility"`
Dswrf []struct {
Datetime string `json:"datetime"`
Value float64 `json:"value"`
} `json:"dswrf"`
AirQuality struct {
Aqi []struct {
Datetime string `json:"datetime"`
Value struct {
Chn float64 `json:"chn"`
Usa float64 `json:"usa"`
} `json:"value"`
} `json:"aqi"`
Pm25 []struct {
Datetime string `json:"datetime"`
Value float64 `json:"value"`
} `json:"pm25"`
} `json:"air_quality"`
} `json:"hourly"` // 小时级别预报
Daily struct {
Status string `json:"status"`
Astro []struct {
Date string `json:"date"`
Sunrise struct {
Time string `json:"time"`
} `json:"sunrise"`
Sunset struct {
Time string `json:"time"`
} `json:"sunset"`
} `json:"astro"` // 日出日落时间当地时区的时刻tzshift 不作用在这个变量)
Precipitation08H20H []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
Probability float64 `json:"probability"`
} `json:"precipitation_08h_20h"` // 白天降水数据
Precipitation20H32H []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
Probability float64 `json:"probability"`
} `json:"precipitation_20h_32h"` // 夜晚降水数据
Precipitation []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
Probability float64 `json:"probability"`
} `json:"precipitation"` // 降水数据
Temperature []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
} `json:"temperature"` // 全天地表 2 米气温
Temperature08H20H []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
} `json:"temperature_08h_20h"` // 白天地表 2 米气温
Temperature20H32H []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
} `json:"temperature_20h_32h"` // 夜晚地表 2 米气温
Wind []struct {
Date string `json:"date"`
Max struct {
Speed float64 `json:"speed"` // 全天地表 10 米风速
Direction float64 `json:"direction"`
} `json:"max"`
Min struct {
Speed float64 `json:"speed"` // 全天地表 10 米风速
Direction float64 `json:"direction"`
} `json:"min"`
Avg struct {
Speed float64 `json:"speed"` // 全天地表 10 米风速
Direction float64 `json:"direction"`
} `json:"avg"`
} `json:"wind"`
Wind08H20H []struct {
Date string `json:"date"`
Max struct {
Speed float64 `json:"speed"` // 白天地表 10 米风速
Direction float64 `json:"direction"`
} `json:"max"`
Min struct {
Speed float64 `json:"speed"` // 白天地表 10 米风速
Direction float64 `json:"direction"`
} `json:"min"`
Avg struct {
Speed float64 `json:"speed"` // 白天地表 10 米风速
Direction float64 `json:"direction"`
} `json:"avg"`
} `json:"wind_08h_20h"`
Wind20H32H []struct {
Date string `json:"date"`
Max struct {
Speed float64 `json:"speed"` // 夜晚地表 10 米风速
Direction float64 `json:"direction"`
} `json:"max"`
Min struct {
Speed float64 `json:"speed"` // 夜晚地表 10 米风速
Direction float64 `json:"direction"`
} `json:"min"`
Avg struct {
Speed float64 `json:"speed"` // 夜晚地表 10 米风速
Direction float64 `json:"direction"`
} `json:"avg"`
} `json:"wind_20h_32h"`
Humidity []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
} `json:"humidity"` // 地表 2 米相对湿度(%)
Cloudrate []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
} `json:"cloudrate"` // 云量(0.0-1.0)
Pressure []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
} `json:"pressure"` // 地面气压
Visibility []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
} `json:"visibility"` // 地表水平能见度
Dswrf []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Min float64 `json:"min"`
Avg float64 `json:"avg"`
} `json:"dswrf"` // 向下短波辐射通量(W/M2)
AirQuality struct {
Aqi []struct {
Date string `json:"date"`
Max struct {
Chn float64 `json:"chn"`
Usa float64 `json:"usa"`
} `json:"max"`
Avg struct {
Chn float64 `json:"chn"`
Usa float64 `json:"usa"`
} `json:"avg"`
Min struct {
Chn float64 `json:"chn"`
Usa float64 `json:"usa"`
} `json:"min"`
} `json:"aqi"` // 国标 AQI
Pm25 []struct {
Date string `json:"date"`
Max float64 `json:"max"`
Avg float64 `json:"avg"`
Min float64 `json:"min"`
} `json:"pm25"` // PM2.5 浓度(μg/m3)
} `json:"air_quality"`
Skycon []struct {
Date string `json:"date"`
Value string `json:"value"` // 全天主要 天气现象
} `json:"skycon"`
Skycon08H20H []struct {
Date string `json:"date"`
Value string `json:"value"` // 白天主要 天气现象
} `json:"skycon_08h_20h"`
Skycon20H32H []struct {
Date string `json:"date"`
Value string `json:"value"` // 夜晚主要 天气现象
} `json:"skycon_20h_32h"`
LifeIndex struct {
Ultraviolet []struct {
Date string `json:"date"`
Index string `json:"index"`
Desc string `json:"desc"` // 紫外线指数自然语言
} `json:"ultraviolet"`
CarWashing []struct {
Date string `json:"date"`
Index string `json:"index"`
Desc string `json:"desc"` // 洗车指数自然语言
} `json:"carWashing"`
Dressing []struct {
Date string `json:"date"`
Index string `json:"index"`
Desc string `json:"desc"` // 穿衣指数自然语言
} `json:"dressing"`
Comfort []struct {
Date string `json:"date"`
Index string `json:"index"`
Desc string `json:"desc"` // 舒适度指数自然语言
} `json:"comfort"`
ColdRisk []struct {
Date string `json:"date"`
Index string `json:"index"`
Desc string `json:"desc"` // 感冒指数自然语言
} `json:"coldRisk"`
} `json:"life_index"`
} `json:"daily"` // 天级别预报
Primary int `json:"primary"`
ForecastKeypoint string `json:"forecast_keypoint"`
} `json:"result"`
}
type WeatherResult struct {
Result WeatherResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
}
func newWeatherResult(result WeatherResponse, body []byte, http gorequest.Response) *WeatherResult {
return &WeatherResult{Result: result, Body: body, Http: http}
}
// Weather 综合
// https://docs.caiyunapp.com/docs/weather
func (c *Client) Weather(ctx context.Context, location string, notMustParams ...gorequest.Params) (*WeatherResult, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := c.request(ctx, c.getApiUrl()+fmt.Sprintf("/%s/weather", location), params, http.MethodGet)
if err != nil {
return newWeatherResult(WeatherResponse{}, request.ResponseBody, request), err
}
// 定义
var response WeatherResponse
err = gojson.Unmarshal(request.ResponseBody, &response)
return newWeatherResult(response, request.ResponseBody, request), err
}

@ -0,0 +1,125 @@
package caiyunapp
import "fmt"
// GetWindSpeed https://docs.caiyunapp.com/docs/tables/wind
func GetWindSpeed(speed float64) string {
if speed <= 0 {
return "0级"
} else if speed <= 5 {
return "1级"
} else if speed <= 11 {
return "2级"
} else if speed <= 19 {
return "3级"
} else if speed <= 28 {
return "4级"
} else if speed <= 38 {
return "5级"
} else if speed <= 49 {
return "6级"
} else if speed <= 61 {
return "7级"
} else if speed <= 74 {
return "8级"
} else if speed <= 88 {
return "9级"
} else if speed <= 102 {
return "10级"
} else if speed <= 117 {
return "11级"
} else if speed <= 133 {
return "12级"
} else if speed <= 149 {
return "13级"
} else if speed <= 166 {
return "14级"
} else if speed <= 183 {
return "15级"
} else if speed <= 201 {
return "16级"
} else if speed <= 220 {
return "17级"
}
return fmt.Sprintf("%v", speed)
}
// GetWindSpeedDesc https://docs.caiyunapp.com/docs/tables/wind
func GetWindSpeedDesc(speed float64) string {
if speed <= 0 {
return "无风"
} else if speed <= 5 {
return "微风徐徐"
} else if speed <= 11 {
return "清风"
} else if speed <= 19 {
return "树叶摇摆"
} else if speed <= 28 {
return "树枝摇动"
} else if speed <= 38 {
return "风力强劲"
} else if speed <= 49 {
return "风力强劲"
} else if speed <= 61 {
return "风力超强"
} else if speed <= 74 {
return "狂风大作"
} else if speed <= 88 {
return "狂风呼啸"
} else if speed <= 102 {
return "暴风毁树"
} else if speed <= 117 {
return "暴风毁树"
} else if speed <= 133 {
return "飓风"
} else if speed <= 149 {
return "台风"
} else if speed <= 166 {
return "强台风"
} else if speed <= 183 {
return "强台风"
} else if speed <= 201 {
return "超强台风"
} else if speed <= 220 {
return "超强台风"
}
return fmt.Sprintf("%v", speed)
}
// GetWindDirectionDesc https://docs.caiyunapp.com/docs/tables/wind
func GetWindDirectionDesc(direction float64) string {
if direction <= 11.26 {
return "北"
} else if direction <= 33.75 {
return "北东北"
} else if direction <= 56.25 {
return "东北"
} else if direction <= 78.75 {
return "东东北"
} else if direction <= 101.25 {
return "东"
} else if direction <= 123.75 {
return "东东南"
} else if direction <= 146.25 {
return "东南"
} else if direction <= 168.75 {
return "南东南"
} else if direction <= 191.25 {
return "南"
} else if direction <= 213.75 {
return "南西南"
} else if direction <= 236.25 {
return "西南"
} else if direction <= 258.75 {
return "西西南"
} else if direction <= 281.25 {
return "西"
} else if direction <= 303.75 {
return "西西北"
} else if direction <= 326.25 {
return "西北"
} else if direction <= 348.75 {
return "北西北"
}
return "北"
}

@ -2,7 +2,6 @@ package cloudflare
import (
"github.com/dtapps/go-library/utils/dorm"
"github.com/dtapps/go-library/utils/golog"
"github.com/dtapps/go-library/utils/gorequest"
"gorm.io/gorm"
)
@ -17,9 +16,8 @@ type ConfigClient struct {
}
type Client struct {
client *gorequest.App // 请求客户端
log *golog.ApiClient // 日志服务
config *ConfigClient // 配置
client *gorequest.App // 请求客户端
config *ConfigClient // 配置
}
func NewClient(config *ConfigClient) (*Client, error) {
@ -29,25 +27,5 @@ func NewClient(config *ConfigClient) (*Client, error) {
c.client = gorequest.NewHttp()
if c.config.PgsqlDb != nil {
c.log, err = golog.NewApiClient(
golog.WithGormClient(c.config.PgsqlDb),
golog.WithTableName(logTable),
)
if err != nil {
return nil, err
}
}
if c.config.MongoDb != nil {
c.log, err = golog.NewApiClient(
golog.WithMongoClient(c.config.MongoDb),
golog.WithDatabaseName(c.config.DatabaseName),
golog.WithCollectionName(logTable),
)
if err != nil {
return nil, err
}
}
return c, nil
}

@ -1,8 +1,11 @@
package cloudflare
import "github.com/dtapps/go-library/utils/gorequest"
import (
"context"
"github.com/dtapps/go-library/utils/gorequest"
)
func (c *Client) request(url string, params map[string]interface{}, method string) (gorequest.Response, error) {
func (c *Client) request(ctx context.Context, url string, params map[string]interface{}, method string) (gorequest.Response, error) {
// 创建请求
client := c.client
@ -20,18 +23,12 @@ func (c *Client) request(url string, params map[string]interface{}, method strin
client.SetParams(params)
// 发起请求
request, err := client.Request()
request, err := client.Request(ctx)
if err != nil {
return gorequest.Response{}, err
}
// 日志
if c.config.PgsqlDb != nil {
go c.log.GormMiddleware(request)
}
if c.config.MongoDb != nil {
go c.log.MongoMiddleware(request)
}
return request, err
}

@ -0,0 +1,25 @@
package dingdanxia
import (
"context"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
func (c *Client) Get(ctx context.Context, _method string, notMustParams ...gorequest.Params) ([]byte, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := c.request(ctx, apiUrl+_method, params, http.MethodGet)
// 定义
return request.ResponseBody, err
}
func (c *Client) Post(ctx context.Context, _method string, notMustParams ...gorequest.Params) ([]byte, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := c.request(ctx, apiUrl+_method, params, http.MethodPost)
// 定义
return request.ResponseBody, err
}

@ -16,9 +16,9 @@ type Client struct {
config struct {
apiKey string // 密钥
}
log struct {
status bool // 状态
client *golog.ApiClient // 日志服务
slog struct {
status bool // 状态
client *golog.ApiSLog // 日志服务
}
}

@ -2,11 +2,11 @@ package dingdanxia
import "github.com/dtapps/go-library/utils/golog"
// ConfigApiClientFun 日志配置
func (c *Client) ConfigApiClientFun(apiClientFun golog.ApiClientFun) {
apiClient := apiClientFun()
if apiClient != nil {
c.log.client = apiClient
c.log.status = true
// ConfigSLogClientFun 日志配置
func (c *Client) ConfigSLogClientFun(apiSLogFun golog.ApiSLogFun) {
apiSLog := apiSLogFun()
if apiSLog != nil {
c.slog.client = apiSLog
c.slog.status = true
}
}

@ -1,11 +1,5 @@
package dingdanxia
import "github.com/dtapps/go-library/utils/golog"
func (c *Client) GetApiKey() string {
return c.config.apiKey
}
func (c *Client) GetLog() *golog.ApiClient {
return c.log.client
}

@ -2,7 +2,6 @@ package dingdanxia
import (
"context"
"github.com/dtapps/go-library"
"github.com/dtapps/go-library/utils/gorequest"
)
@ -27,9 +26,6 @@ func (c *Client) request(ctx context.Context, url string, params map[string]inte
// 设置参数
client.SetParams(params)
// 传入SDk版本
client.AfferentSdkUserVersion(go_library.Version())
// 发起请求
request, err := client.Request(ctx)
if err != nil {
@ -37,8 +33,8 @@ func (c *Client) request(ctx context.Context, url string, params map[string]inte
}
// 记录日志
if c.log.status {
go c.log.client.Middleware(ctx, request, go_library.Version())
if c.slog.status {
go c.slog.client.Middleware(ctx, request)
}
return request, err

@ -0,0 +1,25 @@
package dingtalk
import (
"context"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
func (c *Client) Get(ctx context.Context, _method string, notMustParams ...gorequest.Params) ([]byte, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := c.request(ctx, apiUrl+_method, params, http.MethodGet)
// 定义
return request.ResponseBody, err
}
func (c *Client) Post(ctx context.Context, _method string, notMustParams ...gorequest.Params) ([]byte, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := c.request(ctx, apiUrl+_method, params, http.MethodPost)
// 定义
return request.ResponseBody, err
}

@ -18,9 +18,9 @@ type Client struct {
secret string
accessToken string
}
log struct {
status bool // 状态
client *golog.ApiClient // 日志服务
slog struct {
status bool // 状态
client *golog.ApiSLog // 日志服务
}
}

@ -8,11 +8,11 @@ func (c *Client) Config(secret, accessToken string) *Client {
return c
}
// ConfigApiClientFun 日志配置
func (c *Client) ConfigApiClientFun(apiClientFun golog.ApiClientFun) {
apiClient := apiClientFun()
if apiClient != nil {
c.log.client = apiClient
c.log.status = true
// ConfigSLogClientFun 日志配置
func (c *Client) ConfigSLogClientFun(apiSLogFun golog.ApiSLogFun) {
apiSLog := apiSLogFun()
if apiSLog != nil {
c.slog.client = apiSLog
c.slog.status = true
}
}

@ -1,7 +1,5 @@
package dingtalk
import "github.com/dtapps/go-library/utils/golog"
func (c *Client) GetSecret() string {
return c.config.secret
}
@ -9,7 +7,3 @@ func (c *Client) GetSecret() string {
func (c *Client) GetAccessToken() string {
return c.config.accessToken
}
func (c *Client) GetLog() *golog.ApiClient {
return c.log.client
}

@ -2,7 +2,6 @@ package dingtalk
import (
"context"
"github.com/dtapps/go-library"
"github.com/dtapps/go-library/utils/gorequest"
)
@ -23,9 +22,6 @@ func (c *Client) request(ctx context.Context, url string, params map[string]inte
// 设置参数
client.SetParams(params)
// 传入SDk版本
client.AfferentSdkUserVersion(go_library.Version())
// 发起请求
request, err := client.Request(ctx)
if err != nil {
@ -33,8 +29,8 @@ func (c *Client) request(ctx context.Context, url string, params map[string]inte
}
// 记录日志
if c.log.status {
go c.log.client.Middleware(ctx, request, go_library.Version())
if c.slog.status {
go c.slog.client.Middleware(ctx, request)
}
return request, err

@ -14,9 +14,9 @@ type Client struct {
config struct {
ua string // 用户代理
}
log struct {
status bool // 状态
client *golog.ApiClient // 日志服务
slog struct {
status bool // 状态
client *golog.ApiSLog // 日志服务
}
}

@ -2,11 +2,11 @@ package douyin
import "github.com/dtapps/go-library/utils/golog"
// ConfigApiClientFun 日志配置
func (c *Client) ConfigApiClientFun(apiClientFun golog.ApiClientFun) {
apiClient := apiClientFun()
if apiClient != nil {
c.log.client = apiClient
c.log.status = true
// ConfigSLogClientFun 日志配置
func (c *Client) ConfigSLogClientFun(apiSLogFun golog.ApiSLogFun) {
apiSLog := apiSLogFun()
if apiSLog != nil {
c.slog.client = apiSLog
c.slog.status = true
}
}

@ -1,7 +1 @@
package douyin
import "github.com/dtapps/go-library/utils/golog"
func (c *Client) GetLog() *golog.ApiClient {
return c.log.client
}

@ -2,7 +2,6 @@ package douyin
import (
"context"
"github.com/dtapps/go-library"
"github.com/dtapps/go-library/utils/gorequest"
)
@ -33,8 +32,8 @@ func (c *Client) request(ctx context.Context, url string, params map[string]inte
}
// 记录日志
if c.log.status {
go c.log.client.Middleware(ctx, request, go_library.Version())
if c.slog.status {
go c.slog.client.Middleware(ctx, request)
}
return request, err

@ -8,15 +8,15 @@ import (
)
type IotApiQueryOrderedPkgInfoResponse struct {
Code int `json:"code"`
Istest int `json:"istest"`
Code int64 `json:"code"`
Istest int64 `json:"istest"`
Data []struct {
Name string `json:"name"` // 流量包名字
PkgId int64 `json:"pkgId"` // 流量包ID
Traffic int `json:"traffic"` // 流量大小,单位:MB
Traffic int64 `json:"traffic"` // 流量大小,单位:MB
Ntraffic float64 `json:"ntraffic"` // 已用量,单位:MB
Starttime int `json:"starttime"` // 流量生效起始时间时间戳
Endtime int `json:"endtime"` // 流量生效结束时间时间戳
Starttime int64 `json:"starttime"` // 流量生效起始时间时间戳
Endtime int64 `json:"endtime"` // 流量生效结束时间时间戳
Addtime int64 `json:"addtime"` // 订购时间时间戳
} `json:"data"`
Msg string `json:"msg"`

@ -8,22 +8,22 @@ import (
)
type IotApiQuerySimPkgInfoResponse struct {
Code int `json:"code"`
Istest int `json:"istest"`
Code int64 `json:"code"`
Istest int64 `json:"istest"`
Data []struct {
PkgId int `json:"pkgId"` // 流量包ID
PkgId int64 `json:"pkgId"` // 流量包ID
PkgName string `json:"pkgName"` // 流量包名字
Price float64 `json:"price"` // 流量包成本价格,单位: 元
Sprice float64 `json:"sprice"` // 流量包零售价格,单位: 元
Traffic int `json:"traffic"` // 流量包大小,单位: MB
Type int `json:"type"` // 流量包类型1:叠加包 2:单月套餐 3:季度套餐 4:半年套餐 5:全年套餐 6:每月套餐 (3个月) 7:每月套餐(6个月) 8:每月套餐(12个月) 0:N天套餐
Isdm int `json:"isdm"` // 是否依赖主套餐,此字段只有套餐类型为叠加包时有效; 1:依赖主套餐 0:独立
Isnm int `json:"isnm"` // 是否支持次月生效,此字段只有套餐类型为独立叠加包时有效; 1:支持 0:不支持
Istest int `json:"istest"` // 是否为体验包; 1:是 0:否
Isimm int `json:"isimm"` // 订购后是否立即叠加生效; 1:是 0:否
Traffic int64 `json:"traffic"` // 流量包大小,单位: MB
Type int64 `json:"type"` // 流量包类型1:叠加包 2:单月套餐 3:季度套餐 4:半年套餐 5:全年套餐 6:每月套餐 (3个月) 7:每月套餐(6个月) 8:每月套餐(12个月) 0:N天套餐
Isdm int64 `json:"isdm"` // 是否依赖主套餐,此字段只有套餐类型为叠加包时有效; 1:依赖主套餐 0:独立
Isnm int64 `json:"isnm"` // 是否支持次月生效,此字段只有套餐类型为独立叠加包时有效; 1:支持 0:不支持
Istest int64 `json:"istest"` // 是否为体验包; 1:是 0:否
Isimm int64 `json:"isimm"` // 订购后是否立即叠加生效; 1:是 0:否
Stime string `json:"stime"` // 套餐的生效起始日期
Etime string `json:"etime"` // 套餐的生效结束日期
Daynum int `json:"daynum"` // 当type=0时表示套餐有效天数当type=8 且 daynum>0 时,表示套餐的有效年数
Daynum int64 `json:"daynum"` // 当type=0时表示套餐有效天数当type=8 且 daynum>0 时,表示套餐的有效年数
} `json:"data"`
Msg string `json:"msg"`
}

@ -8,21 +8,21 @@ import (
)
type IotApiQueryUserPkgInfoResponse struct {
Code int `json:"code"`
Code int64 `json:"code"`
Data []struct {
Type int `json:"type"`
Type int64 `json:"type"`
PkgId int64 `json:"pkgId"`
PkgName string `json:"pkgName"`
Price float64 `json:"price"`
Sprice float64 `json:"sprice"`
Traffic int `json:"traffic"`
Caltype int `json:"caltype"`
SimType int `json:"simType"`
Isdm int `json:"isdm"`
Isnm int `json:"isnm"`
Istest int `json:"istest"`
Isimm int `json:"isimm"`
Daynum int `json:"daynum"`
Traffic int64 `json:"traffic"`
Caltype int64 `json:"caltype"`
SimType int64 `json:"simType"`
Isdm int64 `json:"isdm"`
Isnm int64 `json:"isnm"`
Istest int64 `json:"istest"`
Isimm int64 `json:"isimm"`
Daynum int64 `json:"daynum"`
} `json:"data"`
Msg string `json:"msg"`
}

@ -8,7 +8,7 @@ import (
)
type IotApiRechargeSimResponse struct {
Code int `json:"code"`
Code int64 `json:"code"`
Msg string `json:"msg"`
}

@ -8,11 +8,11 @@ import (
)
type IotApiGetAllSimTypeResponse struct {
Code int `json:"code"`
Code int64 `json:"code"`
Data []struct {
Type int `json:"type"` // 卡类型
Type int64 `json:"type"` // 卡类型
Name string `json:"name"` // 类型名
MOrder int `json:"mOrder"` // 是否支持单次充值多个流量包0:不支持 1:支持
MOrder int64 `json:"mOrder"` // 是否支持单次充值多个流量包0:不支持 1:支持
} `json:"data"`
Msg string `json:"msg"`
}

@ -0,0 +1,25 @@
package eastiot
import (
"context"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
func (c *Client) Get(ctx context.Context, _method string, notMustParams ...gorequest.Params) ([]byte, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := c.request(ctx, apiUrl+_method, params, http.MethodGet)
// 定义
return request.ResponseBody, err
}
func (c *Client) Post(ctx context.Context, _method string, notMustParams ...gorequest.Params) ([]byte, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := c.request(ctx, apiUrl+_method, params, http.MethodPost)
// 定义
return request.ResponseBody, err
}

@ -18,9 +18,9 @@ type Client struct {
appId string
apiKey string
}
log struct {
status bool // 状态
client *golog.ApiClient // 日志服务
slog struct {
status bool // 状态
client *golog.ApiSLog // 日志服务
}
}

@ -2,11 +2,11 @@ package eastiot
import "github.com/dtapps/go-library/utils/golog"
// ConfigApiClientFun 日志配置
func (c *Client) ConfigApiClientFun(apiClientFun golog.ApiClientFun) {
apiClient := apiClientFun()
if apiClient != nil {
c.log.client = apiClient
c.log.status = true
// ConfigSLogClientFun 日志配置
func (c *Client) ConfigSLogClientFun(apiSLogFun golog.ApiSLogFun) {
apiSLog := apiSLogFun()
if apiSLog != nil {
c.slog.client = apiSLog
c.slog.status = true
}
}

@ -1,7 +1,5 @@
package eastiot
import "github.com/dtapps/go-library/utils/golog"
func (c *Client) GetAppId() string {
return c.config.appId
}
@ -9,7 +7,3 @@ func (c *Client) GetAppId() string {
func (c *Client) GetApiKey() string {
return c.config.apiKey
}
func (c *Client) GetLog() *golog.ApiClient {
return c.log.client
}

@ -8,7 +8,7 @@ import (
)
type IotApiQueryUserBalanceResponse struct {
Code int `json:"code"`
Code int64 `json:"code"`
Data struct {
Balance float64 `json:"balance"`
} `json:"data"`

@ -2,7 +2,6 @@ package eastiot
import (
"context"
"github.com/dtapps/go-library"
"github.com/dtapps/go-library/utils/gorequest"
"time"
)
@ -38,8 +37,8 @@ func (c *Client) request(ctx context.Context, url string, params map[string]inte
}
// 记录日志
if c.log.status {
go c.log.client.Middleware(ctx, request, go_library.Version())
if c.slog.status {
go c.slog.client.Middleware(ctx, request)
}
return request, err

@ -0,0 +1,25 @@
package ejiaofei
import (
"context"
"github.com/dtapps/go-library/utils/gorequest"
"net/http"
)
func (c *Client) Get(ctx context.Context, _method string, notMustParams ...gorequest.Params) ([]byte, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := c.request(ctx, apiUrl+_method, params, http.MethodGet)
// 定义
return request.ResponseBody, err
}
func (c *Client) Post(ctx context.Context, _method string, notMustParams ...gorequest.Params) ([]byte, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := c.request(ctx, apiUrl+_method, params, http.MethodPost)
// 定义
return request.ResponseBody, err
}

@ -14,22 +14,22 @@ type CheckCostResponse struct {
OrderID string `xml:"orderid"` // 用户提交订单号
Face float64 `xml:"face"` // 官方价格
Price float64 `xml:"price"` // 用户成本价
Error int `xml:"error"` // 错误提示
Error int64 `xml:"error"` // 错误提示
}
type CheckCostResult struct {
Result CheckCostResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
Err error // 错误
}
func newCheckCostResult(result CheckCostResponse, body []byte, http gorequest.Response, err error) *CheckCostResult {
return &CheckCostResult{Result: result, Body: body, Http: http, Err: err}
func newCheckCostResult(result CheckCostResponse, body []byte, http gorequest.Response) *CheckCostResult {
return &CheckCostResult{Result: result, Body: body, Http: http}
}
// CheckCost 会员订单成本价查询接口
func (c *Client) CheckCost(ctx context.Context, orderId string) *CheckCostResult {
// orderID 用户提交的订单号 用户提交的订单号最长32位用户保证其唯一性
func (c *Client) CheckCost(ctx context.Context, orderId string) (*CheckCostResult, error) {
// 参数
param := gorequest.NewParams()
param.Set("orderid", orderId)
@ -38,8 +38,11 @@ func (c *Client) CheckCost(ctx context.Context, orderId string) *CheckCostResult
c.config.signStr = fmt.Sprintf("userid%vpwd%vorderid%v", c.GetUserId(), c.GetPwd(), orderId)
// 请求
request, err := c.request(ctx, apiUrl+"/checkCost.do", params, http.MethodGet)
if err != nil {
return newCheckCostResult(CheckCostResponse{}, request.ResponseBody, request), err
}
// 定义
var response CheckCostResponse
err = xml.Unmarshal(request.ResponseBody, &response)
return newCheckCostResult(response, request.ResponseBody, request, err)
return newCheckCostResult(response, request.ResponseBody, request), err
}

@ -26,18 +26,17 @@ type ChOngZhiJkOrdersResult struct {
Result ChOngZhiJkOrdersResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
Err error // 错误
}
func newChOngZhiJkOrdersResult(result ChOngZhiJkOrdersResponse, body []byte, http gorequest.Response, err error) *ChOngZhiJkOrdersResult {
return &ChOngZhiJkOrdersResult{Result: result, Body: body, Http: http, Err: err}
func newChOngZhiJkOrdersResult(result ChOngZhiJkOrdersResponse, body []byte, http gorequest.Response) *ChOngZhiJkOrdersResult {
return &ChOngZhiJkOrdersResult{Result: result, Body: body, Http: http}
}
// ChOngZhiJkOrders 话费充值接口
// orderid 用户提交的订单号 用户提交的订单号最长32位用户保证其唯一性
// orderID 用户提交的订单号 用户提交的订单号最长32位用户保证其唯一性
// face 充值面值 以元为单位包含10、20、30、50、100、200、300、500 移动联通电信
// account 手机号码 需要充值的手机号码
func (c *Client) ChOngZhiJkOrders(ctx context.Context, orderID string, face int, account string) *ChOngZhiJkOrdersResult {
func (c *Client) ChOngZhiJkOrders(ctx context.Context, orderID string, face int, account string) (*ChOngZhiJkOrdersResult, error) {
// 参数
param := gorequest.NewParams()
param.Set("orderid", orderID)
@ -49,8 +48,11 @@ func (c *Client) ChOngZhiJkOrders(ctx context.Context, orderID string, face int,
c.config.signStr = fmt.Sprintf("userid%vpwd%vorderid%vface%vaccount%vamount1", c.GetUserId(), c.GetPwd(), orderID, face, account)
// 请求
request, err := c.request(ctx, apiUrl+"/chongzhi_jkorders.do", params, http.MethodGet)
if err != nil {
return newChOngZhiJkOrdersResult(ChOngZhiJkOrdersResponse{}, request.ResponseBody, request), err
}
// 定义
var response ChOngZhiJkOrdersResponse
err = xml.Unmarshal(request.ResponseBody, &response)
return newChOngZhiJkOrdersResult(response, request.ResponseBody, request, err)
return newChOngZhiJkOrdersResult(response, request.ResponseBody, request), err
}

@ -21,9 +21,9 @@ type Client struct {
key string
signStr string // 需要签名的字符串
}
log struct {
status bool // 状态
client *golog.ApiClient // 日志服务
slog struct {
status bool // 状态
client *golog.ApiSLog // 日志服务
}
}

@ -2,11 +2,11 @@ package ejiaofei
import "github.com/dtapps/go-library/utils/golog"
// ConfigApiClientFun 日志配置
func (c *Client) ConfigApiClientFun(apiClientFun golog.ApiClientFun) {
apiClient := apiClientFun()
if apiClient != nil {
c.log.client = apiClient
c.log.status = true
// ConfigSLogClientFun 日志配置
func (c *Client) ConfigSLogClientFun(apiSLogFun golog.ApiSLogFun) {
apiSLog := apiSLogFun()
if apiSLog != nil {
c.slog.client = apiSLog
c.slog.status = true
}
}

@ -1,5 +1,7 @@
package ejiaofei
import "fmt"
const (
apiUrl = "http://api.ejiaofei.net:11140"
)
@ -7,3 +9,74 @@ const (
const (
LogTable = "ejiaofei"
)
// OperatorInfo 运营商描述
func OperatorInfo(operator string) string {
switch operator {
case "mobile":
return "移动"
case "unicom":
return "联通"
case "telecom":
return "电信"
}
return fmt.Sprintf("%v", operator)
}
// StateInfo 状态描述
func StateInfo[ST int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 | string](state ST) string {
stateString := fmt.Sprintf("%v", state)
switch stateString {
case "0":
return "充值中"
case "1":
return "充值成功"
case "2":
return "充值失败"
case "8":
return "等待扣款"
}
return stateString
}
// ErrorInfo 错误描述
func ErrorInfo[ET int | int8 | int16 | int32 | int64 | uint | uint8 | uint16 | uint32 | uint64 | string](error ET) string {
errorString := fmt.Sprintf("%v", error)
switch errorString {
case "0":
return "无错误"
case "1003":
return "用户ID或接口密码错误"
case "1004":
return "用户IP错误"
case "1005":
return "用户接口已关闭"
case "1006":
return "加密结果错误"
case "1007":
return "订单号不存在"
case "1011":
return "号码归属地未知"
case "1013":
return "手机对应的商品有误或者没有上架"
case "1014":
return "无法找到手机归属地"
case "1015":
return "余额不足"
case "1016":
return "QQ号格式错误"
case "1017":
return "产品未分配用户,联系商务"
case "1018":
return "订单生成失败"
case "1019":
return "充值号码与产品不匹配"
case "1020":
return "号码运营商未知"
case "9998":
return "参数有误"
case "9999":
return "系统错误"
}
return errorString
}

@ -1,7 +1,5 @@
package ejiaofei
import "github.com/dtapps/go-library/utils/golog"
func (c *Client) GetUserId() string {
return c.config.userId
}
@ -13,7 +11,3 @@ func (c *Client) GetPwd() string {
func (c *Client) GetKey() string {
return c.config.key
}
func (c *Client) GetLog() *golog.ApiClient {
return c.log.client
}

@ -11,10 +11,10 @@ import (
type GprsChOngZhiAdvanceParams struct {
OrderID string `json:"orderid"` // 用户提交的订单号 用户提交的订单号最长32位用户保证其唯一性
Account string `json:"account"` // 充值手机号 需要充值的手机号
Gprs int `json:"gprs"` // 充值流量值 单位MB具体流量值请咨询商务
Area int `json:"area"` // 充值流量范围 0 全国流量1 省内流量
EffectTime int `json:"effecttime"` // 生效日期 0 即时生效1次日生效2 次月生效
Validity int `json:"validity"` // 流量有效期 传入月数0为当月有效
Gprs int64 `json:"gprs"` // 充值流量值 单位MB具体流量值请咨询商务
Area int64 `json:"area"` // 充值流量范围 0 全国流量1 省内流量
EffectTime int64 `json:"effecttime"` // 生效日期 0 即时生效1次日生效2 次月生效
Validity int64 `json:"validity"` // 流量有效期 传入月数0为当月有效
Times string `json:"times"` // 时间戳 格式yyyyMMddhhmmss
}
@ -24,7 +24,7 @@ type GprsChOngZhiAdvanceResponse struct {
OrderID string `xml:"orderid"` // 会员提交订单号
PorderID string `xml:"Porderid"` // 平台订单号
Account string `xml:"account"` // 充值手机号
State int `xml:"state"` // 订单状态
State int64 `xml:"state"` // 订单状态
StartTime string `xml:"starttime"` // 开始时间
EndTime string `xml:"endtime"` // 结束时间
Error string `xml:"error"` // 错误提示
@ -39,23 +39,25 @@ type GprsChOngZhiAdvanceResult struct {
Result GprsChOngZhiAdvanceResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
Err error // 错误
}
func newGprsChOngZhiAdvanceResult(result GprsChOngZhiAdvanceResponse, body []byte, http gorequest.Response, err error) *GprsChOngZhiAdvanceResult {
return &GprsChOngZhiAdvanceResult{Result: result, Body: body, Http: http, Err: err}
func newGprsChOngZhiAdvanceResult(result GprsChOngZhiAdvanceResponse, body []byte, http gorequest.Response) *GprsChOngZhiAdvanceResult {
return &GprsChOngZhiAdvanceResult{Result: result, Body: body, Http: http}
}
// GprsChOngZhiAdvance 流量充值接口
func (c *Client) GprsChOngZhiAdvance(ctx context.Context, notMustParams ...gorequest.Params) *GprsChOngZhiAdvanceResult {
func (c *Client) GprsChOngZhiAdvance(ctx context.Context, notMustParams ...gorequest.Params) (*GprsChOngZhiAdvanceResult, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
// 签名
c.config.signStr = fmt.Sprintf("userid%vpwd%vorderid%vaccount%vgprs%varea%veffecttime%vvalidity%vtimes%v", c.GetUserId(), c.GetPwd(), params["orderid"], params["account"], params["gprs"], params["area"], params["effecttime"], params["validity"], params["times"])
// 请求
request, err := c.request(ctx, apiUrl+"/gprsChongzhiAdvance.do", params, http.MethodGet)
if err != nil {
return newGprsChOngZhiAdvanceResult(GprsChOngZhiAdvanceResponse{}, request.ResponseBody, request), err
}
// 定义
var response GprsChOngZhiAdvanceResponse
err = xml.Unmarshal(request.ResponseBody, &response)
return newGprsChOngZhiAdvanceResult(response, request.ResponseBody, request, err)
return newGprsChOngZhiAdvanceResult(response, request.ResponseBody, request), err
}

@ -11,29 +11,31 @@ import (
type MoneyJkUserResponse struct {
XMLName xml.Name `xml:"response"`
LastMoney float64 `xml:"lastMoney"` // 用户余额
Tag int `xml:"tag"` // 用户状态0正常 1暂停
Error int `xml:"error"` // 错误提示
Tag int64 `xml:"tag"` // 用户状态0正常 1暂停
Error int64 `xml:"error"` // 错误提示
}
type MoneyJkUserResult struct {
Result MoneyJkUserResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
Err error // 错误
}
func newMoneyJkUserResult(result MoneyJkUserResponse, body []byte, http gorequest.Response, err error) *MoneyJkUserResult {
return &MoneyJkUserResult{Result: result, Body: body, Http: http, Err: err}
func newMoneyJkUserResult(result MoneyJkUserResponse, body []byte, http gorequest.Response) *MoneyJkUserResult {
return &MoneyJkUserResult{Result: result, Body: body, Http: http}
}
// MoneyJkUser 用户余额查询
func (c *Client) MoneyJkUser(ctx context.Context) *MoneyJkUserResult {
func (c *Client) MoneyJkUser(ctx context.Context) (*MoneyJkUserResult, error) {
// 签名
c.config.signStr = fmt.Sprintf("userid%vpwd%v", c.GetUserId(), c.GetPwd())
// 请求
request, err := c.request(ctx, apiUrl+"/money_jkuser.do", map[string]interface{}{}, http.MethodGet)
if err != nil {
return newMoneyJkUserResult(MoneyJkUserResponse{}, request.ResponseBody, request), err
}
// 定义
var response MoneyJkUserResponse
err = xml.Unmarshal(request.ResponseBody, &response)
return newMoneyJkUserResult(response, request.ResponseBody, request, err)
return newMoneyJkUserResult(response, request.ResponseBody, request), err
}

@ -26,16 +26,15 @@ type QueryJkOrdersResult struct {
Result QueryJkOrdersResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
Err error // 错误
}
func newQueryJkOrdersResult(result QueryJkOrdersResponse, body []byte, http gorequest.Response, err error) *QueryJkOrdersResult {
return &QueryJkOrdersResult{Result: result, Body: body, Http: http, Err: err}
func newQueryJkOrdersResult(result QueryJkOrdersResponse, body []byte, http gorequest.Response) *QueryJkOrdersResult {
return &QueryJkOrdersResult{Result: result, Body: body, Http: http}
}
// QueryJkOrders 通用查询接口
// orderid 用户提交的订单号 用户提交的订单号最长32位用户保证其唯一性
func (c *Client) QueryJkOrders(ctx context.Context, orderId string) *QueryJkOrdersResult {
// orderId 用户提交的订单号 用户提交的订单号最长32位用户保证其唯一性
func (c *Client) QueryJkOrders(ctx context.Context, orderId string) (*QueryJkOrdersResult, error) {
// 参数
param := gorequest.NewParams()
param.Set("orderid", orderId)
@ -44,8 +43,11 @@ func (c *Client) QueryJkOrders(ctx context.Context, orderId string) *QueryJkOrde
c.config.signStr = fmt.Sprintf("userid%vpwd%vorderid%v", c.GetUserId(), c.GetPwd(), orderId)
// 请求
request, err := c.request(ctx, apiUrl+"/query_jkorders.do", params, http.MethodGet)
if err != nil {
return newQueryJkOrdersResult(QueryJkOrdersResponse{}, request.ResponseBody, request), err
}
// 定义
var response QueryJkOrdersResponse
err = xml.Unmarshal(request.ResponseBody, &response)
return newQueryJkOrdersResult(response, request.ResponseBody, request, err)
return newQueryJkOrdersResult(response, request.ResponseBody, request), err
}

@ -17,21 +17,23 @@ type QueryTxProductResult struct {
Result QueryTxProductResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
Err error // 错误
}
func newQueryTxProductResult(result QueryTxProductResponse, body []byte, http gorequest.Response, err error) *QueryTxProductResult {
return &QueryTxProductResult{Result: result, Body: body, Http: http, Err: err}
func newQueryTxProductResult(result QueryTxProductResponse, body []byte, http gorequest.Response) *QueryTxProductResult {
return &QueryTxProductResult{Result: result, Body: body, Http: http}
}
// QueryTxProduct 可充值腾讯产品查询
func (c *Client) QueryTxProduct(ctx context.Context) *QueryTxProductResult {
func (c *Client) QueryTxProduct(ctx context.Context) (*QueryTxProductResult, error) {
// 签名
c.config.signStr = fmt.Sprintf("userid%vpwd%v", c.GetUserId(), c.GetPwd())
// 请求
request, err := c.request(ctx, apiUrl+"/queryTXproduct.do", map[string]interface{}{}, http.MethodGet)
if err != nil {
return newQueryTxProductResult(QueryTxProductResponse{}, request.ResponseBody, request), err
}
// 定义
var response QueryTxProductResponse
err = xml.Unmarshal(request.ResponseBody, &response)
return newQueryTxProductResult(response, request.ResponseBody, request, err)
return newQueryTxProductResult(response, request.ResponseBody, request), err
}

@ -3,7 +3,6 @@ package ejiaofei
import (
"context"
"fmt"
"github.com/dtapps/go-library"
"github.com/dtapps/go-library/utils/gomd5"
"github.com/dtapps/go-library/utils/gorequest"
)
@ -39,8 +38,8 @@ func (c *Client) request(ctx context.Context, url string, params map[string]inte
}
// 记录日志
if c.log.status {
go c.log.client.MiddlewareXml(ctx, request, go_library.Version())
if c.slog.status {
go c.slog.client.MiddlewareXml(ctx, request)
}
return request, err

@ -11,8 +11,8 @@ import (
type TxChOngZhiParams struct {
OrderID string `json:"orderid"` // 用户提交的订单号 用户提交的订单号最长32位用户保证其唯一性
Account string `json:"account"` // QQ号 需要充值的QQ号
ProductID int `json:"productid"` // 产品id
Amount int `json:"amount"` // 购买数量
ProductID int64 `json:"productid"` // 产品id
Amount int64 `json:"amount"` // 购买数量
Ip string `json:"ip"` // 充值QQ号ip
Times string `json:"times"` // 时间戳 格式yyyyMMddhhmmss
}
@ -23,9 +23,9 @@ type TxChOngZhiResponse struct {
PorderID string `xml:"Porderid"` // 鼎信平台订单号
OrderID string `xml:"orderid"` // 用户订单号
Account string `xml:"account"` // 需要充值的QQ号
ProductID int `xml:"productid"` // 充值产品id
Amount int `xml:"amount"` // 购买数量
State int `xml:"state"` // 订单状态
ProductID int64 `xml:"productid"` // 充值产品id
Amount int64 `xml:"amount"` // 购买数量
State int64 `xml:"state"` // 订单状态
StartTime string `xml:"starttime"` // 开始时间
EndTime string `xml:"endtime"` // 结束时间
Error string `xml:"error"` // 错误提示
@ -35,23 +35,25 @@ type TxChOngZhiResult struct {
Result TxChOngZhiResponse // 结果
Body []byte // 内容
Http gorequest.Response // 请求
Err error // 错误
}
func newTxChOngZhiResult(result TxChOngZhiResponse, body []byte, http gorequest.Response, err error) *TxChOngZhiResult {
return &TxChOngZhiResult{Result: result, Body: body, Http: http, Err: err}
func newTxChOngZhiResult(result TxChOngZhiResponse, body []byte, http gorequest.Response) *TxChOngZhiResult {
return &TxChOngZhiResult{Result: result, Body: body, Http: http}
}
// TxChOngZhi 流量充值接口
func (c *Client) TxChOngZhi(ctx context.Context, notMustParams ...gorequest.Params) *TxChOngZhiResult {
func (c *Client) TxChOngZhi(ctx context.Context, notMustParams ...gorequest.Params) (*TxChOngZhiResult, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
// 签名
c.config.signStr = fmt.Sprintf("userid%vpwd%vorderid%vaccount%vproductid%vamount%vip%vtimes%v", c.GetUserId(), c.GetPwd(), params["orderid"], params["account"], params["productid"], params["amount"], params["ip"], params["times"])
// 请求
request, err := c.request(ctx, apiUrl+"/txchongzhi.do", params, http.MethodGet)
if err != nil {
return newTxChOngZhiResult(TxChOngZhiResponse{}, request.ResponseBody, request), err
}
// 定义
var response TxChOngZhiResponse
err = xml.Unmarshal(request.ResponseBody, &response)
return newTxChOngZhiResult(response, request.ResponseBody, request, err)
return newTxChOngZhiResult(response, request.ResponseBody, request), err
}

@ -0,0 +1,15 @@
package feishu
import (
"context"
"github.com/dtapps/go-library/utils/gorequest"
)
func (c *Client) Post(ctx context.Context, _method string, notMustParams ...gorequest.Params) ([]byte, error) {
// 参数
params := gorequest.NewParamsWith(notMustParams...)
// 请求
request, err := c.request(ctx, apiUrl+_method, params)
// 定义
return request.ResponseBody, err
}

@ -16,9 +16,9 @@ type Client struct {
config struct {
key string
}
log struct {
status bool // 状态
client *golog.ApiClient // 日志服务
slog struct {
status bool // 状态
client *golog.ApiSLog // 日志服务
}
}

@ -7,11 +7,11 @@ func (c *Client) Config(key string) *Client {
return c
}
// ConfigApiClientFun 日志配置
func (c *Client) ConfigApiClientFun(apiClientFun golog.ApiClientFun) {
apiClient := apiClientFun()
if apiClient != nil {
c.log.client = apiClient
c.log.status = true
// ConfigSLogClientFun 日志配置
func (c *Client) ConfigSLogClientFun(apiSLogFun golog.ApiSLogFun) {
apiSLog := apiSLogFun()
if apiSLog != nil {
c.slog.client = apiSLog
c.slog.status = true
}
}

@ -1,11 +1,5 @@
package feishu
import "github.com/dtapps/go-library/utils/golog"
func (c *Client) GetKey() string {
return c.config.key
}
func (c *Client) GetLog() *golog.ApiClient {
return c.log.client
}

@ -2,7 +2,6 @@ package feishu
import (
"context"
"github.com/dtapps/go-library"
"github.com/dtapps/go-library/utils/gorequest"
)
@ -20,9 +19,6 @@ func (c *Client) request(ctx context.Context, url string, params map[string]inte
// 设置参数
client.SetParams(params)
// 传入SDk版本
client.AfferentSdkUserVersion(go_library.Version())
// 发起请求
request, err := client.Post(ctx)
if err != nil {
@ -30,8 +26,8 @@ func (c *Client) request(ctx context.Context, url string, params map[string]inte
}
// 记录日志
if c.log.status {
go c.log.client.Middleware(ctx, request, go_library.Version())
if c.slog.status {
go c.slog.client.Middleware(ctx, request)
}
return request, err

@ -1,7 +1,6 @@
package gddata
import (
"github.com/dtapps/go-library/utils/golog"
"github.com/dtapps/go-library/utils/gorequest"
)
@ -16,10 +15,6 @@ type Client struct {
config struct {
token string
}
log struct {
status bool // 状态
client *golog.ApiClient // 日志服务
}
}
// NewClient 创建实例化

@ -1,17 +1,6 @@
package gddata
import "github.com/dtapps/go-library/utils/golog"
func (c *Client) Config(token string) *Client {
c.config.token = token
return c
}
// ConfigApiClientFun 日志配置
func (c *Client) ConfigApiClientFun(apiClientFun golog.ApiClientFun) {
apiClient := apiClientFun()
if apiClient != nil {
c.log.client = apiClient
c.log.status = true
}
}

@ -2,7 +2,6 @@ package gddata
import (
"context"
"github.com/dtapps/go-library"
"github.com/dtapps/go-library/utils/gorequest"
"log"
)
@ -28,9 +27,6 @@ func (c *Client) request(ctx context.Context, url string, params map[string]inte
// 设置参数
client.SetParams(params)
// 传入SDk版本
client.AfferentSdkUserVersion(go_library.Version())
// 发起请求
request, err := client.Request(ctx)
if err != nil {
@ -38,9 +34,6 @@ func (c *Client) request(ctx context.Context, url string, params map[string]inte
}
// 记录日志
if c.log.status {
go c.log.client.Middleware(ctx, request, go_library.Version())
}
return request, err
}

@ -1,7 +1,6 @@
package gitee
import (
"github.com/dtapps/go-library/utils/golog"
"github.com/dtapps/go-library/utils/gorequest"
"gorm.io/gorm"
)
@ -14,9 +13,8 @@ type ConfigClient struct {
}
type Client struct {
client *gorequest.App // 请求客户端
log *golog.ApiClient // 日志服务
config *ConfigClient // 配置
client *gorequest.App // 请求客户端
config *ConfigClient // 配置
}
func NewClient(config *ConfigClient) (*Client, error) {
@ -26,15 +24,5 @@ func NewClient(config *ConfigClient) (*Client, error) {
c.client = gorequest.NewHttp()
if c.config.PgsqlDb != nil {
c.log, err = golog.NewApiClient(
golog.WithGormClient(c.config.PgsqlDb),
golog.WithTableName(logTable),
)
if err != nil {
return nil, err
}
}
return c, nil
}

@ -26,9 +26,6 @@ func (c *Client) request(url string, params map[string]interface{}, method strin
}
// 日志
if c.config.PgsqlDb != nil {
go c.log.GormMiddleware(request)
}
return request, err
}

@ -0,0 +1,14 @@
package jd
import (
"context"
)
func (c *Client) Post(ctx context.Context, _method string, notMustParams ...Params) ([]byte, error) {
// 参数
params := NewParamsWithType(_method, notMustParams...)
// 请求
request, err := c.request(ctx, params)
// 定义
return request.ResponseBody, err
}

@ -22,9 +22,9 @@ type Client struct {
siteId string // 网站ID/APP ID
positionId string // 推广位id
}
log struct {
status bool // 状态
client *golog.ApiClient // 日志服务
slog struct {
status bool // 状态
client *golog.ApiSLog // 日志服务
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save