浏览代码

更新 'resourceChannel/resourceChannel.go'

解析新的category
go_dev 9 月之前
父节点
当前提交
de6440313a
共有 1 个文件被更改,包括 130 次插入54 次删除
  1. 130 54
      resourceChannel/resourceChannel.go

+ 130 - 54
resourceChannel/resourceChannel.go

@@ -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
+}