|
@@ -1,10 +1,18 @@
|
|
|
package resourceChannel
|
|
|
|
|
|
import (
|
|
|
+ "bytes"
|
|
|
"encoding/json"
|
|
|
+ "fmt"
|
|
|
"github.com/go-redis/redis"
|
|
|
"golang.org/x/net/context"
|
|
|
+ "io/ioutil"
|
|
|
"log"
|
|
|
+ "net/http"
|
|
|
+ "net/url"
|
|
|
+ "os"
|
|
|
+ "path"
|
|
|
+ "runtime"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
"time"
|
|
@@ -12,9 +20,10 @@ import (
|
|
|
|
|
|
func redisCli() *redis.Client {
|
|
|
client := redis.NewClient(&redis.Options{
|
|
|
- Addr: coo.RedisHost, // Redis地址
|
|
|
- Password: "", // Redis密码,默认为空
|
|
|
- DB: 1, // 使用哪个数据库,默认为0
|
|
|
+ //Addr: coo.RedisHost, // Redis地址
|
|
|
+ Addr: "192.168.204.193:6379", // Redis地址
|
|
|
+ Password: "", // Redis密码,默认为空
|
|
|
+ DB: 1, // 使用哪个数据库,默认为0
|
|
|
})
|
|
|
_, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)
|
|
|
defer cancel()
|
|
@@ -42,6 +51,7 @@ type SemJsChatRecord struct {
|
|
|
ChannleID int `gorm:"column:CHANNLE_ID"`
|
|
|
CategoryID int `gorm:"column:CATEGORY_ID"`
|
|
|
GrUserID string `gorm:"column:gr_user_id"`
|
|
|
+ SourceUrl string `gorm:"column:source_url"`
|
|
|
}
|
|
|
|
|
|
type ChannelCategory struct {
|
|
@@ -61,14 +71,14 @@ func GetChannel(assessment ResourceAssessment) ChannelCategory {
|
|
|
if !strings.Contains(assessment.URL, "utm") && !strings.Contains(assessment.ChatURL, "utm") && !strings.Contains(assessment.ReferPageURL, "utm") && (strings.Contains(assessment.ReferPageURL, "daomeng") || strings.Contains(assessment.ChatURL, "daomeng")) {
|
|
|
log.Printf("解析到梦")
|
|
|
assessment.Channel = 38
|
|
|
- assessment.Category = 201
|
|
|
+ assessment.Category = getCategory(201)
|
|
|
return ChannelCategory{assessment.Channel, assessment.Category}
|
|
|
}
|
|
|
// 网课解析
|
|
|
if assessment.DataType == 1 {
|
|
|
log.Printf("解析网课")
|
|
|
assessment.Channel = 26
|
|
|
- assessment.Category = 121
|
|
|
+ assessment.Category = getCategory(121)
|
|
|
return ChannelCategory{assessment.Channel, assessment.Category}
|
|
|
}
|
|
|
// 小程序解析
|
|
@@ -77,47 +87,57 @@ func GetChannel(assessment ResourceAssessment) ChannelCategory {
|
|
|
appType := strings.Split(strings.Split(strings.Split(assessment.ChatURL, "?")[1], "=")[1], "_")[1]
|
|
|
if appType == "baidu" {
|
|
|
assessment.Channel = 1
|
|
|
- assessment.Category = 30
|
|
|
+ assessment.Category = getCategory(30)
|
|
|
} else if appType == "wechat" {
|
|
|
assessment.Channel = 8
|
|
|
- assessment.Category = 32
|
|
|
+ assessment.Category = getCategory(32)
|
|
|
}
|
|
|
return ChannelCategory{assessment.Channel, assessment.Category}
|
|
|
}
|
|
|
// URL解析
|
|
|
if strings.Contains(assessment.URL, "link=") || strings.Contains(assessment.ReferPageURL, "link=") || strings.Contains(assessment.ChatURL, "link=") {
|
|
|
log.Printf("解析URL")
|
|
|
+ if len(strings.Split(assessment.URL, "_")) == 3 {
|
|
|
+ var category, _ = strconv.Atoi(strings.Split(assessment.URL, "_")[1])
|
|
|
+ if category > 10000 {
|
|
|
+ assessment.Channel = category
|
|
|
+ assessment.Category = category
|
|
|
+ }
|
|
|
+ }
|
|
|
if strings.Contains(assessment.URL, "link=") {
|
|
|
split := strings.Split(assessment.URL, "link")
|
|
|
if strings.Contains(split[1], "form") || strings.Contains(split[1], "from") {
|
|
|
assessment.Channel, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.URL, "link")[1], "form")[0], "_")[1])
|
|
|
- assessment.Category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.URL, "link")[1], "form")[0], "_")[2])
|
|
|
+ var category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.URL, "link")[1], "form")[0], "_")[2])
|
|
|
+ assessment.Category = getCategory(category)
|
|
|
} else {
|
|
|
assessment.Channel = 5
|
|
|
- assessment.Category = 11
|
|
|
+ assessment.Category = getCategory(11)
|
|
|
}
|
|
|
} else if strings.Contains(assessment.ReferPageURL, "link=") {
|
|
|
split := strings.Split(assessment.ReferPageURL, "link")
|
|
|
if strings.Contains(split[1], "form") || strings.Contains(split[1], "from") {
|
|
|
assessment.Channel, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.ReferPageURL, "link")[1], "form")[0], "_")[1])
|
|
|
- assessment.Category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.ReferPageURL, "link")[1], "form")[0], "_")[2])
|
|
|
+ var category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.ReferPageURL, "link")[1], "form")[0], "_")[2])
|
|
|
+ assessment.Category = getCategory(category)
|
|
|
} else {
|
|
|
assessment.Channel = 5
|
|
|
- assessment.Category = 11
|
|
|
+ assessment.Category = getCategory(11)
|
|
|
}
|
|
|
} else {
|
|
|
split := strings.Split(assessment.ChatURL, "link")
|
|
|
if strings.Contains(split[1], "form") || strings.Contains(split[1], "from") {
|
|
|
assessment.Channel, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.ChatURL, "link")[1], "form")[0], "_")[1])
|
|
|
- assessment.Category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.ChatURL, "link")[1], "form")[0], "_")[2])
|
|
|
+ var category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.ChatURL, "link")[1], "form")[0], "_")[2])
|
|
|
+ assessment.Category = getCategory(category)
|
|
|
} else {
|
|
|
assessment.Channel = 5
|
|
|
- assessment.Category = 11
|
|
|
+ assessment.Category = getCategory(11)
|
|
|
}
|
|
|
}
|
|
|
- // 百度惠生活渠道合并
|
|
|
+ // 百度惠生活渠道合并
|
|
|
if assessment.Category == 239 {
|
|
|
- assessment.Category = 292
|
|
|
+ assessment.Category = getCategory(292)
|
|
|
}
|
|
|
return ChannelCategory{assessment.Channel, assessment.Category}
|
|
|
}
|
|
@@ -130,9 +150,9 @@ func GetChannel(assessment ResourceAssessment) ChannelCategory {
|
|
|
log.Printf("解析神策")
|
|
|
assessment.Channel = utmUrl.Channel
|
|
|
assessment.Category = utmUrl.Category
|
|
|
- // 百度惠生活渠道合并
|
|
|
+ // 百度惠生活渠道合并
|
|
|
if assessment.Category == 239 {
|
|
|
- assessment.Category = 292
|
|
|
+ assessment.Category = getCategory(292)
|
|
|
}
|
|
|
return ChannelCategory{assessment.Channel, assessment.Category}
|
|
|
}
|
|
@@ -140,7 +160,7 @@ func GetChannel(assessment ResourceAssessment) ChannelCategory {
|
|
|
if assessment.ReferPageURL != "" && !strings.Contains(assessment.ReferPageURL, "https://www.jjl.cn/") && !strings.Contains(assessment.ReferPageURL, "https://m.jjl.cn/") {
|
|
|
log.Printf("解析SEO")
|
|
|
assessment.Channel = 5
|
|
|
- assessment.Category = 11
|
|
|
+ assessment.Category = getCategory(11)
|
|
|
return ChannelCategory{assessment.Channel, assessment.Category}
|
|
|
}
|
|
|
// 官网自然访问解析
|
|
@@ -150,12 +170,12 @@ func GetChannel(assessment ResourceAssessment) ChannelCategory {
|
|
|
strings.Contains(utmUrl.Url, "https://www.jjl.cn/") || strings.Contains(utmUrl.Url, "https://m.jjl.cn/") {
|
|
|
log.Printf("解析官网")
|
|
|
assessment.Channel = 7
|
|
|
- assessment.Category = 126
|
|
|
+ assessment.Category = getCategory(126)
|
|
|
return ChannelCategory{assessment.Channel, assessment.Category}
|
|
|
}
|
|
|
log.Printf("默认解析为SEO")
|
|
|
assessment.Channel = 5
|
|
|
- assessment.Category = 11
|
|
|
+ assessment.Category = getCategory(11)
|
|
|
return ChannelCategory{assessment.Channel, assessment.Category}
|
|
|
}
|
|
|
|
|
@@ -173,10 +193,10 @@ func GetChatChannel(chat SemJsChatRecord) ChannelCategory {
|
|
|
appType := strings.Split(strings.Split(strings.Split(chat.ChatURL, "?")[1], "=")[1], "_")[1]
|
|
|
if appType == "baidu" {
|
|
|
chat.ChannleID = 1
|
|
|
- chat.CategoryID = 30
|
|
|
+ chat.CategoryID = getCategory(30)
|
|
|
} else if appType == "wechat" {
|
|
|
chat.ChannleID = 8
|
|
|
- chat.CategoryID = 32
|
|
|
+ chat.CategoryID = getCategory(32)
|
|
|
}
|
|
|
return ChannelCategory{chat.ChannleID, chat.CategoryID}
|
|
|
}
|
|
@@ -184,34 +204,36 @@ func GetChatChannel(chat SemJsChatRecord) ChannelCategory {
|
|
|
if !strings.Contains(chat.ReferPage, "utm") && !strings.Contains(chat.ChatURL, "utm") && (strings.Contains(chat.ReferPage, "daomeng") || strings.Contains(chat.ChatURL, "daomeng")) {
|
|
|
log.Printf("到梦解析")
|
|
|
chat.ChannleID = 38
|
|
|
- chat.CategoryID = 201
|
|
|
+ chat.CategoryID = getCategory(201)
|
|
|
return ChannelCategory{chat.ChannleID, chat.CategoryID}
|
|
|
}
|
|
|
// URL解析
|
|
|
if strings.Contains(chat.ChatURL, "link=") || strings.Contains(chat.ReferPage, "link=") {
|
|
|
- log.Printf("解析URL")
|
|
|
+ log.Printf("解析CHATURL")
|
|
|
if strings.Contains(chat.ChatURL, "link=") {
|
|
|
split := strings.Split(chat.ChatURL, "link=")
|
|
|
if strings.Contains(split[1], "form") || strings.Contains(split[1], "from") {
|
|
|
chat.ChannleID, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(chat.ChatURL, "link")[1], "form")[0], "_")[1])
|
|
|
- chat.CategoryID, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(chat.ChatURL, "link")[1], "form")[0], "_")[2])
|
|
|
+ var category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(chat.ChatURL, "link")[1], "form")[0], "_")[2])
|
|
|
+ chat.CategoryID = getCategory(category)
|
|
|
} else {
|
|
|
chat.ChannleID = 5
|
|
|
- chat.CategoryID = 11
|
|
|
+ chat.CategoryID = getCategory(11)
|
|
|
}
|
|
|
} else {
|
|
|
split := strings.Split(chat.ReferPage, "link=")
|
|
|
- if strings.Contains(split[1], "form") || strings.Contains(split[1], "from") {
|
|
|
+ if strings.Contains(split[01], "form") || strings.Contains(split[1], "from") {
|
|
|
chat.ChannleID, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(chat.ReferPage, "link")[1], "form")[0], "_")[1])
|
|
|
- chat.CategoryID, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(chat.ReferPage, "link")[1], "form")[0], "_")[2])
|
|
|
+ var category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(chat.ReferPage, "link")[1], "form")[0], "_")[2])
|
|
|
+ chat.CategoryID = getCategory(category)
|
|
|
} else {
|
|
|
chat.ChannleID = 5
|
|
|
- chat.CategoryID = 11
|
|
|
+ chat.CategoryID = getCategory(11)
|
|
|
}
|
|
|
}
|
|
|
- // 百度惠生活渠道合并
|
|
|
+ // 百度惠生活渠道合并
|
|
|
if chat.CategoryID == 239 {
|
|
|
- chat.CategoryID = 292
|
|
|
+ chat.CategoryID = getCategory(292)
|
|
|
}
|
|
|
return ChannelCategory{chat.ChannleID, chat.CategoryID}
|
|
|
}
|
|
@@ -224,9 +246,9 @@ func GetChatChannel(chat SemJsChatRecord) ChannelCategory {
|
|
|
log.Printf("解析神策")
|
|
|
chat.ChannleID = utmUrl.Channel
|
|
|
chat.CategoryID = utmUrl.Category
|
|
|
- // 百度惠生活渠道合并
|
|
|
+ // 百度惠生活渠道合并
|
|
|
if chat.CategoryID == 239 {
|
|
|
- chat.CategoryID = 292
|
|
|
+ chat.CategoryID = getCategory(292)
|
|
|
}
|
|
|
return ChannelCategory{chat.ChannleID, chat.CategoryID}
|
|
|
}
|
|
@@ -234,7 +256,7 @@ func GetChatChannel(chat SemJsChatRecord) ChannelCategory {
|
|
|
if chat.ReferPage != "" && !strings.Contains(chat.ReferPage, "https://www.jjl.cn/") && !strings.Contains(chat.ReferPage, "https://m.jjl.cn/") {
|
|
|
log.Printf("解析SEO")
|
|
|
chat.ChannleID = 5
|
|
|
- chat.CategoryID = 11
|
|
|
+ chat.CategoryID = getCategory(11)
|
|
|
return ChannelCategory{chat.ChannleID, chat.CategoryID}
|
|
|
}
|
|
|
// 官网自然访问解析
|
|
@@ -243,12 +265,12 @@ func GetChatChannel(chat SemJsChatRecord) ChannelCategory {
|
|
|
strings.Contains(utmUrl.Url, "https://www.jjl.cn/") || strings.Contains(utmUrl.Url, "https://m.jjl.cn/") {
|
|
|
log.Printf("解析官网")
|
|
|
chat.ChannleID = 7
|
|
|
- chat.CategoryID = 126
|
|
|
+ chat.CategoryID = getCategory(126)
|
|
|
return ChannelCategory{chat.ChannleID, chat.CategoryID}
|
|
|
}
|
|
|
log.Printf("默认解析为SEO")
|
|
|
chat.ChannleID = 5
|
|
|
- chat.CategoryID = 11
|
|
|
+ chat.CategoryID = getCategory(11)
|
|
|
return ChannelCategory{chat.ChannleID, chat.CategoryID}
|
|
|
}
|
|
|
|
|
@@ -259,21 +281,75 @@ type SensorsData struct {
|
|
|
Url string `json:"url"`
|
|
|
}
|
|
|
|
|
|
-//func main() {
|
|
|
-// var assessment []ResourceAssessment
|
|
|
-// lib.GetDbInstance().Where("DATE(created_at) >= '2023-01-01'").Find(&assessment)
|
|
|
-// for _, value := range assessment {
|
|
|
-// cc := GetChannel(value)
|
|
|
-// println(cc.Channel)
|
|
|
-// println(cc.Category)
|
|
|
-// println("END")
|
|
|
-// }
|
|
|
-//
|
|
|
-// var chat []SemJsChatRecord
|
|
|
-// lib.GetDbInstance().Where("DATE(CREATE_TIME) >= '2023-01-01'").Find(&chat)
|
|
|
-// for _, value := range chat {
|
|
|
-// println(value.ChatID)
|
|
|
-// cc := GetChatChannel(value)
|
|
|
-// println(cc.Channel, cc.Category)
|
|
|
-// }
|
|
|
-//}
|
|
|
+// 访问神策API
|
|
|
+func getSensorsData(sql string) string {
|
|
|
+ sensorsUrl := "http://10.0.6.35:8107/api/sql/query?token=128d837f466684101710cfb308e7556de975b717c6c2465ba5fc2836d57a64c8&project=production&type=impala&q=" + url.QueryEscape(sql) + "&format=json"
|
|
|
+ data := []byte("")
|
|
|
+ log.Printf("REQ_URL:%s", sensorsUrl)
|
|
|
+ req, err := http.NewRequest("POST", sensorsUrl, bytes.NewBuffer(data))
|
|
|
+ if err != nil {
|
|
|
+ log.Printf("ERROR:%s", err.Error())
|
|
|
+ return err.Error()
|
|
|
+ }
|
|
|
+ req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
|
|
|
+ client := &http.Client{}
|
|
|
+ resp, err := client.Do(req)
|
|
|
+ if err != nil {
|
|
|
+ return err.Error()
|
|
|
+ }
|
|
|
+ defer resp.Body.Close()
|
|
|
+ respBody, err := ioutil.ReadAll(resp.Body)
|
|
|
+ if err != nil {
|
|
|
+ return err.Error()
|
|
|
+ }
|
|
|
+ var sensors Sensors
|
|
|
+ json.Unmarshal([]byte(string(respBody)), &sensors)
|
|
|
+ return sensors.LatestReferrer
|
|
|
+}
|
|
|
+
|
|
|
+// Sensors 神策数据结构体
|
|
|
+type Sensors struct {
|
|
|
+ Url string `json:"$url"`
|
|
|
+ LatestReferrer string `json:"$latest_referrer"`
|
|
|
+}
|
|
|
+
|
|
|
+type SysChannel struct {
|
|
|
+ OriginalCategory string `json:"original_category"` // 主键ID
|
|
|
+ CategoryId string `json:"category_id"` // 备注
|
|
|
+}
|
|
|
+
|
|
|
+func getCurrentPath() string {
|
|
|
+ _, filename, _, _ := runtime.Caller(1)
|
|
|
+ return path.Dir(filename)
|
|
|
+}
|
|
|
+
|
|
|
+func getCategory(OriginalCategory int) int {
|
|
|
+ // 打开JSON文件
|
|
|
+ //jsonFile, err := os.Open(getCurrentPath() + "/category_mapper.json")
|
|
|
+ jsonFile, err := os.Open("category_mapper.json")
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
+ return -1
|
|
|
+ }
|
|
|
+ defer jsonFile.Close()
|
|
|
+ // 读取文件内容
|
|
|
+ byteValue, err := ioutil.ReadAll(jsonFile)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
+ return -1
|
|
|
+ }
|
|
|
+ // 解析JSON数据
|
|
|
+ var channel []SysChannel
|
|
|
+ if err := json.Unmarshal(byteValue, &channel); err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
+ return -1
|
|
|
+ }
|
|
|
+ for i := range channel {
|
|
|
+ ori, _ := strconv.Atoi(channel[i].OriginalCategory)
|
|
|
+ if ori == OriginalCategory {
|
|
|
+ category, _ := strconv.Atoi(channel[i].CategoryId)
|
|
|
+ return category
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return -1
|
|
|
+}
|