|
@@ -0,0 +1,143 @@
|
|
|
+package resource_channel
|
|
|
+
|
|
|
+import (
|
|
|
+ "bytes"
|
|
|
+ "encoding/json"
|
|
|
+ "io/ioutil"
|
|
|
+ "net/http"
|
|
|
+ "net/url"
|
|
|
+ "strconv"
|
|
|
+ "strings"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+type ResourceAssessment struct {
|
|
|
+ ID uint `gorm:"primaryKey" json:"id"`
|
|
|
+ DataType uint8 `json:"data_type"`
|
|
|
+ ChatID string `json:"chat_id"`
|
|
|
+ Channel int `json:"channel"`
|
|
|
+ Category int `json:"category"`
|
|
|
+ CreatedAt time.Time `json:"created_at"`
|
|
|
+ ReferPageURL string `json:"refer_page_url"`
|
|
|
+ URL string `json:"url"`
|
|
|
+ ChatURL string `json:"chat_url"`
|
|
|
+ GrUserId string `json:"gr_user_id"`
|
|
|
+}
|
|
|
+
|
|
|
+type ChannelCategory struct {
|
|
|
+ Channel int
|
|
|
+ Category int
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func GetChannel(assessment ResourceAssessment) ChannelCategory {
|
|
|
+ var channel int
|
|
|
+ var category int
|
|
|
+
|
|
|
+ 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")) {
|
|
|
+ channel = 38
|
|
|
+ category = 201
|
|
|
+ } else if assessment.DataType == 1 {
|
|
|
+ channel = 26
|
|
|
+ category = 121
|
|
|
+ } else if assessment.DataType == 5 || assessment.DataType == 7 {
|
|
|
+ channel = assessment.Channel
|
|
|
+ category = assessment.Category
|
|
|
+ } else if assessment.DataType == 2 {
|
|
|
+ if strings.Contains(assessment.URL, "link") {
|
|
|
+ channel, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.URL, "link")[1], "form")[0], "_")[1])
|
|
|
+ category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.URL, "link")[1], "form")[0], "_")[2])
|
|
|
+ } else if strings.Contains(assessment.ReferPageURL, "link") {
|
|
|
+ channel, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.ReferPageURL, "link")[1], "form")[0], "_")[1])
|
|
|
+ category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.ReferPageURL, "link")[1], "form")[0], "_")[2])
|
|
|
+ } else {
|
|
|
+ channel = assessment.Channel
|
|
|
+ category = assessment.Category
|
|
|
+ }
|
|
|
+ } else if assessment.DataType == 3 || ((assessment.Channel == 5 || assessment.Channel == 7) && assessment.ChatID != "") {
|
|
|
+ if !strings.Contains(assessment.URL, "utm") && !strings.Contains(assessment.ChatURL, "utm") && !strings.Contains(assessment.ReferPageURL, "utm") {
|
|
|
+ layout := "2006-01-02 15:04:05"
|
|
|
+ startTime := assessment.CreatedAt.Add(-1 * time.Hour)
|
|
|
+ start := startTime.Format(layout)
|
|
|
+ end := assessment.CreatedAt.Format(layout)
|
|
|
+ sql := "select $url from events where distinct_id = '" + assessment.GrUserId + "'and event = '$pageview' and time between '" + start + "' and '" + end + "' order by time limit 1"
|
|
|
+ url := getSensorsData(sql)
|
|
|
+ if url == "https://www.jjl.cn/" || url == "https://m.jjl.cn/" {
|
|
|
+ channel = 7
|
|
|
+ category = 126
|
|
|
+ } else {
|
|
|
+ channel = 5
|
|
|
+ category = 11
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ var PrefixUrl string
|
|
|
+ var PrefixReferPageUrl string
|
|
|
+ if !strings.Contains(assessment.URL, "https") {
|
|
|
+ PrefixUrl = "https://wx.com" + assessment.URL
|
|
|
+ }
|
|
|
+ if !strings.Contains(assessment.ReferPageURL, "https") {
|
|
|
+ PrefixReferPageUrl = "https://wx.com" + assessment.ReferPageURL
|
|
|
+ }
|
|
|
+ if strings.Contains(PrefixUrl, "link") {
|
|
|
+ channel, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(PrefixUrl, "link")[1], "form")[0], "_")[1])
|
|
|
+ category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(PrefixUrl, "link")[1], "form")[0], "_")[2])
|
|
|
+ } else if strings.Contains(PrefixReferPageUrl, "link") {
|
|
|
+ channel, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(PrefixReferPageUrl, "link")[1], "form")[0], "_")[1])
|
|
|
+ category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(PrefixReferPageUrl, "link")[1], "form")[0], "_")[2])
|
|
|
+ } else {
|
|
|
+ channel = 7
|
|
|
+ category = 126
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if assessment.DataType == 4 {
|
|
|
+ if strings.Contains(assessment.ChatURL, "link") {
|
|
|
+ channel, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.ChatURL, "link")[1], "form")[0], "_")[1])
|
|
|
+ category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.ChatURL, "link")[1], "form")[0], "_")[2])
|
|
|
+ } else if strings.Contains(assessment.ReferPageURL, "link") {
|
|
|
+ channel, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.ReferPageURL, "link")[1], "form")[0], "_")[1])
|
|
|
+ category, _ = strconv.Atoi(strings.Split(strings.Split(strings.Split(assessment.ReferPageURL, "link")[1], "form")[0], "_")[2])
|
|
|
+ } else {
|
|
|
+ channel = 7
|
|
|
+ category = 126
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if channel == 0 {
|
|
|
+ channel = 5
|
|
|
+ }
|
|
|
+ if category == 0 {
|
|
|
+ channel = 11
|
|
|
+ }
|
|
|
+ var channelCategory ChannelCategory
|
|
|
+ channelCategory.Channel = channel
|
|
|
+ channelCategory.Category = category
|
|
|
+ return channelCategory
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+type Sensors struct {
|
|
|
+ Url string `json:"$url"`
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+func getSensorsData(sql string) string {
|
|
|
+ sensorsUrl := "https://sensorsview.jjl.cn/api/sql/query?token=128d837f466684101710cfb308e7556de975b717c6c2465ba5fc2836d57a64c8&project=production&type=impala&q=" + url.QueryEscape(sql) + "&format=json"
|
|
|
+ data := []byte("")
|
|
|
+ req, err := http.NewRequest("POST", sensorsUrl, bytes.NewBuffer(data))
|
|
|
+ if err != nil {
|
|
|
+ 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.Url
|
|
|
+}
|