|
@@ -2,10 +2,13 @@ package resourceChannel
|
|
|
|
|
|
import (
|
|
|
"encoding/json"
|
|
|
+ "fmt"
|
|
|
"github.com/aliyun/aliyun-oss-go-sdk/oss"
|
|
|
"github.com/go-redis/redis"
|
|
|
"golang.org/x/net/context"
|
|
|
+ "io/ioutil"
|
|
|
"log"
|
|
|
+ "os"
|
|
|
"strconv"
|
|
|
"strings"
|
|
|
"time"
|
|
@@ -34,6 +37,7 @@ type ResourceAssessment struct {
|
|
|
URL string `json:"url"` // 落地页地址
|
|
|
ChatURL string `json:"chat_url"` // 对话发起页
|
|
|
GrUserId string `json:"gr_user_id"` // 神策distinct_id
|
|
|
+ JsonPath string `json:"json_path"`
|
|
|
}
|
|
|
|
|
|
type SemJsChatRecord struct {
|
|
@@ -45,6 +49,7 @@ type SemJsChatRecord struct {
|
|
|
CategoryID int `gorm:"column:CATEGORY_ID"`
|
|
|
GrUserID string `gorm:"column:gr_user_id"`
|
|
|
SourceUrl string `gorm:"column:source_url"`
|
|
|
+ JsonPath string `json:"json_path"`
|
|
|
}
|
|
|
|
|
|
type ChannelCategory struct {
|
|
@@ -64,14 +69,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 = getCategory(201)
|
|
|
+ assessment.Category = getCategory(201, assessment.JsonPath)
|
|
|
return ChannelCategory{assessment.Channel, assessment.Category}
|
|
|
}
|
|
|
// 网课解析
|
|
|
if assessment.DataType == 1 {
|
|
|
log.Printf("解析网课")
|
|
|
assessment.Channel = 26
|
|
|
- assessment.Category = getCategory(121)
|
|
|
+ assessment.Category = getCategory(121, assessment.JsonPath)
|
|
|
return ChannelCategory{assessment.Channel, assessment.Category}
|
|
|
}
|
|
|
// 小程序解析
|
|
@@ -80,10 +85,10 @@ 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 = getCategory(30)
|
|
|
+ assessment.Category = getCategory(30, assessment.JsonPath)
|
|
|
} else if appType == "wechat" {
|
|
|
assessment.Channel = 8
|
|
|
- assessment.Category = getCategory(32)
|
|
|
+ assessment.Category = getCategory(32, assessment.JsonPath)
|
|
|
}
|
|
|
return ChannelCategory{assessment.Channel, assessment.Category}
|
|
|
}
|
|
@@ -114,36 +119,36 @@ func GetChannel(assessment ResourceAssessment) ChannelCategory {
|
|
|
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])
|
|
|
var category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.URL, "link")[1], "form")[0], "_")[2])
|
|
|
- assessment.Category = getCategory(category)
|
|
|
+ assessment.Category = getCategory(category, assessment.JsonPath)
|
|
|
} else {
|
|
|
assessment.Channel = 5
|
|
|
- assessment.Category = getCategory(11)
|
|
|
+ assessment.Category = getCategory(11, assessment.JsonPath)
|
|
|
}
|
|
|
} 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])
|
|
|
var category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.ReferPageURL, "link")[1], "form")[0], "_")[2])
|
|
|
- assessment.Category = getCategory(category)
|
|
|
+ assessment.Category = getCategory(category, assessment.JsonPath)
|
|
|
} else {
|
|
|
assessment.Channel = 5
|
|
|
- assessment.Category = getCategory(11)
|
|
|
+ assessment.Category = getCategory(11, assessment.JsonPath)
|
|
|
}
|
|
|
} 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])
|
|
|
var category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.ChatURL, "link")[1], "form")[0], "_")[2])
|
|
|
- assessment.Category = getCategory(category)
|
|
|
+ assessment.Category = getCategory(category, assessment.JsonPath)
|
|
|
} else {
|
|
|
assessment.Channel = 5
|
|
|
- assessment.Category = getCategory(11)
|
|
|
+ assessment.Category = getCategory(11, assessment.JsonPath)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
// 百度惠生活渠道合并
|
|
|
if assessment.Category == 239 {
|
|
|
- assessment.Category = getCategory(292)
|
|
|
+ assessment.Category = getCategory(292, assessment.JsonPath)
|
|
|
}
|
|
|
return ChannelCategory{assessment.Channel, assessment.Category}
|
|
|
}
|
|
@@ -158,7 +163,7 @@ func GetChannel(assessment ResourceAssessment) ChannelCategory {
|
|
|
assessment.Category = utmUrl.Category
|
|
|
// 百度惠生活渠道合并
|
|
|
if assessment.Category == 239 {
|
|
|
- assessment.Category = getCategory(292)
|
|
|
+ assessment.Category = getCategory(292, assessment.JsonPath)
|
|
|
}
|
|
|
return ChannelCategory{assessment.Channel, assessment.Category}
|
|
|
}
|
|
@@ -166,7 +171,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 = getCategory(11)
|
|
|
+ assessment.Category = getCategory(11, assessment.JsonPath)
|
|
|
return ChannelCategory{assessment.Channel, assessment.Category}
|
|
|
}
|
|
|
// 官网自然访问解析
|
|
@@ -176,12 +181,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 = getCategory(126)
|
|
|
+ assessment.Category = getCategory(126, assessment.JsonPath)
|
|
|
return ChannelCategory{assessment.Channel, assessment.Category}
|
|
|
}
|
|
|
log.Printf("默认解析为SEO")
|
|
|
assessment.Channel = 5
|
|
|
- assessment.Category = getCategory(11)
|
|
|
+ assessment.Category = getCategory(11, assessment.JsonPath)
|
|
|
return ChannelCategory{assessment.Channel, assessment.Category}
|
|
|
}
|
|
|
|
|
@@ -199,10 +204,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 = getCategory(30)
|
|
|
+ chat.CategoryID = getCategory(30, chat.JsonPath)
|
|
|
} else if appType == "wechat" {
|
|
|
chat.ChannleID = 8
|
|
|
- chat.CategoryID = getCategory(32)
|
|
|
+ chat.CategoryID = getCategory(32, chat.JsonPath)
|
|
|
}
|
|
|
return ChannelCategory{chat.ChannleID, chat.CategoryID}
|
|
|
}
|
|
@@ -210,7 +215,7 @@ 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 = getCategory(201)
|
|
|
+ chat.CategoryID = getCategory(201, chat.JsonPath)
|
|
|
return ChannelCategory{chat.ChannleID, chat.CategoryID}
|
|
|
}
|
|
|
// URL解析
|
|
@@ -234,26 +239,26 @@ func GetChatChannel(chat SemJsChatRecord) ChannelCategory {
|
|
|
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])
|
|
|
var category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(chat.ChatURL, "link")[1], "form")[0], "_")[2])
|
|
|
- chat.CategoryID = getCategory(category)
|
|
|
+ chat.CategoryID = getCategory(category, chat.JsonPath)
|
|
|
} else {
|
|
|
chat.ChannleID = 5
|
|
|
- chat.CategoryID = getCategory(11)
|
|
|
+ chat.CategoryID = getCategory(11, chat.JsonPath)
|
|
|
}
|
|
|
} else {
|
|
|
split := strings.Split(chat.ReferPage, "link=")
|
|
|
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])
|
|
|
var category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(chat.ReferPage, "link")[1], "form")[0], "_")[2])
|
|
|
- chat.CategoryID = getCategory(category)
|
|
|
+ chat.CategoryID = getCategory(category, chat.JsonPath)
|
|
|
} else {
|
|
|
chat.ChannleID = 5
|
|
|
- chat.CategoryID = getCategory(11)
|
|
|
+ chat.CategoryID = getCategory(11, chat.JsonPath)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
// 百度惠生活渠道合并
|
|
|
if chat.CategoryID == 239 {
|
|
|
- chat.CategoryID = getCategory(292)
|
|
|
+ chat.CategoryID = getCategory(292, chat.JsonPath)
|
|
|
}
|
|
|
return ChannelCategory{chat.ChannleID, chat.CategoryID}
|
|
|
}
|
|
@@ -268,7 +273,7 @@ func GetChatChannel(chat SemJsChatRecord) ChannelCategory {
|
|
|
chat.CategoryID = utmUrl.Category
|
|
|
// 百度惠生活渠道合并
|
|
|
if chat.CategoryID == 239 {
|
|
|
- chat.CategoryID = getCategory(292)
|
|
|
+ chat.CategoryID = getCategory(292, chat.JsonPath)
|
|
|
}
|
|
|
return ChannelCategory{chat.ChannleID, chat.CategoryID}
|
|
|
}
|
|
@@ -276,7 +281,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 = getCategory(11)
|
|
|
+ chat.CategoryID = getCategory(11, chat.JsonPath)
|
|
|
return ChannelCategory{chat.ChannleID, chat.CategoryID}
|
|
|
}
|
|
|
// 官网自然访问解析
|
|
@@ -285,12 +290,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 = getCategory(126)
|
|
|
+ chat.CategoryID = getCategory(126, chat.JsonPath)
|
|
|
return ChannelCategory{chat.ChannleID, chat.CategoryID}
|
|
|
}
|
|
|
log.Printf("默认解析为SEO")
|
|
|
chat.ChannleID = 5
|
|
|
- chat.CategoryID = getCategory(11)
|
|
|
+ chat.CategoryID = getCategory(11, chat.JsonPath)
|
|
|
return ChannelCategory{chat.ChannleID, chat.CategoryID}
|
|
|
}
|
|
|
|
|
@@ -306,7 +311,7 @@ type SysChannel struct {
|
|
|
CategoryId string `json:"category_id"` // 备注
|
|
|
}
|
|
|
|
|
|
-func getCategory(OriginalCategory int) int {
|
|
|
+func getOssCategory(OriginalCategory int) int {
|
|
|
endpoint := "oss-cn-beijing.aliyuncs.com" // 例如 "oss-cn-hangzhou.aliyuncs.com"
|
|
|
accessKeyID := "LTAI5t7iAtrYaUgGgK8ws54e"
|
|
|
accessKeySecret := "j4A6llCRqZBMzXLQ7ms84LdKl9l0IS"
|
|
@@ -338,6 +343,43 @@ func getCategory(OriginalCategory int) int {
|
|
|
log.Fatalf("解析JSON失败: %v", err)
|
|
|
}
|
|
|
|
|
|
+ for i := range channel {
|
|
|
+ ori, _ := strconv.Atoi(channel[i].OriginalCategory)
|
|
|
+ if ori == OriginalCategory {
|
|
|
+ category, _ := strconv.Atoi(channel[i].CategoryId)
|
|
|
+ return category
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return -1
|
|
|
+}
|
|
|
+
|
|
|
+//func getCurrentPath() string {
|
|
|
+// _, filename, _, _ := runtime.Caller(1)
|
|
|
+// return path.Dir(filename)
|
|
|
+//}
|
|
|
+
|
|
|
+func getCategory(OriginalCategory int, jsonPath string) int {
|
|
|
+ // 打开JSON文件
|
|
|
+ jsonFile, err := os.Open(jsonPath)
|
|
|
+ //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
|
|
|
+ }
|
|
|
+ println(channel)
|
|
|
for i := range channel {
|
|
|
ori, _ := strconv.Atoi(channel[i].OriginalCategory)
|
|
|
if ori == OriginalCategory {
|