You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
1.3 KiB
Go

package spider
import (
"github.com/metacubex/mihomo/common/convert"
"github.com/metacubex/mihomo/log"
"regexp"
"strings"
"sync"
)
func init() {
Register(CollectSharelink, NewShareLinkCollect)
}
type ShareLink struct {
Url string
}
func (c *ShareLink) Get() []map[string]any {
proxies := make([]map[string]any, 0)
all := GetBytes(c.Url)
if all != nil {
builder := strings.Builder{}
for _, link := range grepShareLink(all) {
builder.WriteString(link + "\n")
}
if builder.Len() > 0 {
v2ray, err := convert.ConvertsV2Ray([]byte(builder.String()))
if err == nil && v2ray != nil {
proxies = v2ray
}
}
}
return proxies
}
func (c *ShareLink) Get2ChanWG(pc chan []map[string]any, wg *sync.WaitGroup) {
defer wg.Done()
nodes := c.Get()
log.Infoln("STATISTIC: ShareLink count=%d url=%s", len(nodes), c.Url)
if len(nodes) > 0 {
pc <- nodes
}
}
func NewShareLinkCollect(getter Getter) Collect {
return &ShareLink{Url: getter.Url}
}
var shareLinkReg = regexp.MustCompile("(vless|vmess|trojan|ss|ssr|tuic|hysteria|hysteria2|hy2|juicity)://([A-Za-z0-9+/_&?=@:%.-])+")
// grepShareLink
//
// @Description: 抓取分享链接
// @param all
// @return []string
func grepShareLink(all []byte) []string {
return shareLinkReg.FindAllString(string(all), -1)
}