twin-api/base/utils/base.go

74 lines
1.5 KiB
Go

package utils
import (
"crypto/md5"
"encoding/base64"
"encoding/hex"
"errors"
"net/url"
"strings"
"github.com/enplee/extraURLs"
"github.com/skip2/go-qrcode"
)
func Md5(str string) string {
h := md5.New()
h.Write([]byte(str))
return hex.EncodeToString(h.Sum(nil))
}
func ObjectKey(s string) (string, error) {
s = strings.TrimSpace(s)
u, err := url.Parse(s)
if err != nil {
return "", err
}
s = u.Path
if strings.Contains(s, "?") {
s = s[:strings.Index(s, "?")]
}
return s, nil
}
// TextExtraURLs 文本中提取url
func TextExtraURLs(t string) ([]string, error) {
t = strings.ReplaceAll(t, " xhslink.com", "https://xhslink.com")
rxStrict := extraURLs.Strict()
urls := rxStrict.FindAllString(t, -1) // []string{"http://foo.com/"}
if len(urls) > 0 {
return urls, nil
}
return nil, errors.New("not found url")
}
func UrlFormat(urlStr string) string {
// 针对小红书
if strings.Contains(urlStr, "xhslink.com") {
urlStr = strings.Split(urlStr, ",复制本条信息")[0]
}
return urlStr
}
func KeyContainMapString(m []string, s string) bool {
for _, v := range m {
if strings.Contains(s, v) {
return true
}
}
return false
}
func CreateQrcodeBase64(content string, level qrcode.RecoveryLevel, size int) (string, error) {
var png []byte
//固定方法
png, err := qrcode.Encode(content, level, size)
if err != nil {
return "", err
}
//文件流需要使用base64编码后才可使用
res := "data:image/png;base64," + base64.StdEncoding.EncodeToString(png)
return res, nil
}