ads_handler.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616
  1. package main
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/gin-gonic/gin"
  6. "hash"
  7. "math/rand"
  8. "miads/adslib"
  9. "miads/adslib/addata"
  10. "miads/adslib/ads_checker"
  11. "miads/adslib/city"
  12. "miads/adslib/device"
  13. "miads/adslib/encrypt"
  14. "miads/adslib/graylog"
  15. "miads/adslib/ip2region"
  16. "miads/adslib/redis_data"
  17. "miads/adslib/utils"
  18. "net/url"
  19. "strconv"
  20. "strings"
  21. "time"
  22. )
  23. var SECERET_KEY = "%videoopen%!@#$%"
  24. type Response struct {
  25. Result int `json:"result"`
  26. Msg string `json:"msg"`
  27. AdsResult string `json:"ads_result"`
  28. addata.AdData
  29. }
  30. func adsHandler(c *gin.Context) {
  31. c.Header("Content-Type", "application/json")
  32. request := Request{}
  33. request.Parse(c)
  34. //uaClientOrigin := utils.GetArgument(c, "ua","")
  35. //originMac := utils.GetArgument(c, "mac","")
  36. //clientImei := request.Imei
  37. fmt.Printf("%+v", request)
  38. advertiser := "xiaomi"
  39. uaClient := request.UaClient
  40. // 获取ua
  41. if uaClient == "" {
  42. uaClient = c.GetHeader("User-Agent")
  43. if uaClient == "" {
  44. uaClient = "Dalvik/2.1.0 (Linux; U; Android 6.0.1; MI 4LTE MIUI/6.9.1)"
  45. }
  46. }
  47. // 获取ip
  48. checkReqSourceFlag, err := ads_checker.CheckReqSource(request.ReqSource)
  49. if err != nil {
  50. c.String(404, "check req source failed")
  51. return
  52. }
  53. ip := ""
  54. if checkReqSourceFlag {
  55. ip = request.ReqSourceIp
  56. }
  57. if ip == "" {
  58. ip = c.GetHeader("X-Forwarded-For")
  59. }
  60. if ip == "" {
  61. ip = c.GetHeader("X-Real-IP")
  62. }
  63. if ip == "" {
  64. ip = c.Request.RemoteAddr
  65. }
  66. if strings.Index(ip, ",") != -1 {
  67. ip = strings.Split(ip, ",")[0]
  68. }
  69. ipInfo, err := ip2region.Ip2Region(ip)
  70. if err != nil {
  71. c.String(404, "ip 2 region failed")
  72. return
  73. }
  74. // 上報
  75. if request.NewAdsFlag == 1 {
  76. grayLogData := struct {
  77. Ip string
  78. Imei string
  79. Model string
  80. NetworkType int `json:"network_type"`
  81. Province string
  82. City string
  83. ScreeSize string `json:"screen_size"`
  84. Ua string
  85. Brand string
  86. Androidid string `json:"android_id"`
  87. ShortMessage string `json:"short_message"`
  88. ReqSource string `json:"req_source"`
  89. }{
  90. Ip: ip,
  91. Imei: request.Imei,
  92. Model: request.Model,
  93. NetworkType: request.NetworkType,
  94. Province: ipInfo.Province,
  95. City: ipInfo.City,
  96. ScreeSize: request.ScreenSize,
  97. Ua: request.UaClient,
  98. Brand: request.Brand,
  99. Androidid: request.Androidid,
  100. ShortMessage: "ads_api_log",
  101. ReqSource: "zhiku",
  102. }
  103. graylog.Log(grayLogData)
  104. }
  105. cityCode, err := city.GetCityCode(ipInfo.City)
  106. if err != nil {
  107. c.String(404, "get city code failed")
  108. return
  109. }
  110. // 是否是安卓
  111. if request.Imei == "" {
  112. device.SetAdsTagLog(advertiser, request.ReqSource, "DS_IOS", cityCode)
  113. graylog.LogApi("ios_device", request.Idfa, "", request.ReqSource)
  114. } else {
  115. device.SetAdsTagLog(advertiser, request.ReqSource, "DS_ANDRIOID", cityCode)
  116. }
  117. freqControlInterval := 600
  118. // 深圳,东莞强行用600秒控制, 其他地区从配置读取
  119. if strings.Index(ipInfo.City, "深圳") == -1 && strings.Index(ipInfo.City, "东莞") == -1 {
  120. // 频率控制
  121. freqControlConf, err := redis_data.GetFreqCrontolConf(request.ReqSource)
  122. if err != nil {
  123. c.String(404, "get freq control conf failed")
  124. return
  125. }
  126. hour, _ := strconv.Atoi(time.Now().Format("01"))
  127. tmpCrontrolInterval, ok := freqControlConf.GetControlTime(hour)
  128. if ok {
  129. freqControlInterval = tmpCrontrolInterval
  130. }
  131. }
  132. lastReqTime, err := device.GetIpReqTime(ip)
  133. if err != nil {
  134. c.String(404, "get last req time failed")
  135. return
  136. }
  137. needControl := false
  138. if request.ReqSource != "wzb_h5" && lastReqTime != 0 && time.Now().Unix()-lastReqTime < int64(freqControlInterval) {
  139. // 需要凭空
  140. needControl = true
  141. device.SetAdsTagLog(advertiser, request.ReqSource, "DS_FREQ_0", cityCode)
  142. } else {
  143. device.SetIpReqTime(ip, time.Now().Unix())
  144. device.SetAdsTagLog(advertiser, request.ReqSource, "DS_FREQ_1", cityCode)
  145. }
  146. //### 检查是否是ip黑名单
  147. isIpBlack, err := ads_checker.CheckBlackIp(ip)
  148. if err != nil {
  149. c.String(404, "get city code failed")
  150. return
  151. }
  152. if isIpBlack {
  153. graylog.LogApi("black_ip_list", ip, "", request.ReqSource)
  154. device.SetAdsTagLog(advertiser, request.ReqSource, "DS_BLACK_IP", cityCode)
  155. }
  156. // 获取渠道的黑白性
  157. reqChannelFlag, err := redis_data.GetChannelFlag(request.ReqSource, "ads_req")
  158. if err != nil {
  159. c.String(404, "get req channel flag failed")
  160. return
  161. }
  162. flowWeight := reqChannelFlag.Weigth
  163. flowRandomNum := rand.Intn(100)
  164. flowFlag := 0 // 有效的百分比
  165. if flowRandomNum <= flowWeight {
  166. flowFlag = 1
  167. }
  168. if reqChannelFlag.ChannelFlag == 1 {
  169. device.SetAdsTagLog(advertiser, request.ReqSource, fmt.Sprintf("DS_REQ_SOURCE_{%d}", reqChannelFlag.ChannelFlag), cityCode)
  170. }
  171. // 替换成小米的设备
  172. replaceFlag := 0
  173. imei := request.Imei
  174. sendPhoneType := 0
  175. userFlag := 0
  176. originImei := ""
  177. // 检查是否是小米的设备
  178. specialDeviceNum := 0
  179. if request.ReqSource == "wzb_h5" {
  180. specialDeviceNum = 6 // wzb_h5渠道只綁定一个imei, 具体愿意不知道
  181. }
  182. if request.ReqSource == "moyuntv" || (!request.IsMiDevice() &&
  183. (!isIpBlack && !needControl && reqChannelFlag.ChannelFlag == 1) && flowFlag == 1) {
  184. randomNum := 3
  185. deviceConf, realRedisKey, err := device.GetMiDeviceConf(ip, randomNum, specialDeviceNum)
  186. if err != nil {
  187. c.String(404, "get req channel flag failed")
  188. return
  189. }
  190. if deviceConf != nil {
  191. device.SetAdsTagLog(advertiser, request.ReqSource, "DS_CACHE", cityCode) // 通过缓存请求
  192. imei = deviceConf.Imei
  193. uaClient = deviceConf.Ua
  194. originImei = deviceConf.OriginImei
  195. if imei != "" {
  196. replaceFlag = 1
  197. userFlag = 1
  198. }
  199. } else {
  200. // 先从对应的城市找,找不到在走原来的逻辑
  201. // 上报事件
  202. graylog.LogApi("city_search_city_code", strconv.Itoa(cityCode), ipInfo.City, request.ReqSource)
  203. device.SetAdsTagLog(advertiser, request.ReqSource, "DS_CODE_REQ", cityCode) // 可做城市替换
  204. if cityCode != 0 {
  205. device.SetAdsTagLog(advertiser, request.ReqSource, "DS_CODE", cityCode) // 替换成功
  206. fakeImei := ""
  207. fakeDeviceConf, leftCnt, err := device.GetDailyFakeDeviceConfByCityCode(cityCode)
  208. if err != nil {
  209. c.String(404, "get device conf failed")
  210. return
  211. }
  212. // 0 没有获取到, 1 获取到了
  213. gotCityFakeDeviceConfFlag := 0
  214. replaceUa := ""
  215. if fakeDeviceConf != nil {
  216. device.SetAdsTagLog(advertiser, request.ReqSource, "DS_REPL", cityCode)
  217. device.SetMiDeviceConf(realRedisKey, *fakeDeviceConf)
  218. imei = fakeDeviceConf.Imei
  219. uaClient = fakeDeviceConf.Ua
  220. originImei = fakeDeviceConf.OriginImei
  221. fakeImei = fakeDeviceConf.Imei
  222. if fakeDeviceConf.Imei != "" {
  223. gotCityFakeDeviceConfFlag = 1
  224. userFlag = 2
  225. replaceFlag = 1
  226. }
  227. }
  228. grayLogData := struct {
  229. ReqSource string `json:"req_source"`
  230. OldImei string `json:"old_imei"`
  231. NewImei string `json:"new_imei"`
  232. IP string `json:"ip"`
  233. City string `json:"city"`
  234. CityCode int `json:"city_code"`
  235. Province string
  236. HitFlag int `json:"hit_flag"`
  237. LeftCnt int `json:"left_cnt"`
  238. ReplaceUa string `json:"replace_ua"`
  239. ShortMessage string `json:"short_message"`
  240. }{
  241. ReqSource: request.ReqSource,
  242. OldImei: request.Imei,
  243. NewImei: fakeImei,
  244. IP: ip,
  245. City: ipInfo.City,
  246. CityCode: cityCode,
  247. Province: ipInfo.Province,
  248. HitFlag: gotCityFakeDeviceConfFlag,
  249. LeftCnt: leftCnt,
  250. ReplaceUa: replaceUa,
  251. ShortMessage: "",
  252. }
  253. // 进行日志的上报
  254. graylog.Log(grayLogData)
  255. }
  256. }
  257. // 解码ua_client
  258. uaClient, _ = url.QueryUnescape(uaClient)
  259. } else if request.IsMiDevice() {
  260. device.SetAdsTagLog(advertiser, request.ReqSource, "DS_MI_REAL", cityCode) // 是小米设备
  261. userFlag = 3
  262. sendPhoneType = 1
  263. }
  264. // 检查下,替换后的设备是否是黑名单, 再次检查, 防止放入cache后, 新增了黑名单
  265. isBlackImei, err := device.CheckIsBlackImei(imei, false)
  266. if err != nil {
  267. c.String(404, "get device conf failed")
  268. return
  269. }
  270. if isBlackImei {
  271. if replaceFlag == 1 {
  272. device.SetAdsTagLog(advertiser, request.ReqSource, "DS_BLACK_IMEI_REPLACE", cityCode)
  273. } else {
  274. device.SetAdsTagLog(advertiser, request.ReqSource, "DS_BLACK_IMEI", cityCode)
  275. }
  276. }
  277. // 组装公共的dsp_info
  278. dspInfo := utils.DspParam{}
  279. dspInfo.Init()
  280. dspInfo.DspCityCode = cityCode
  281. dspInfo.Imei = imei
  282. dspInfo.OriginImei = request.Imei
  283. dspInfo.OsVersion = request.OsVersion
  284. dspInfo.Mac = strings.ToUpper(request.Mac)
  285. dspInfo.OriginMac = request.Mac
  286. dspInfo.Idfa = request.Idfa
  287. dspInfo.Model = request.Model
  288. dspInfo.Brand = request.Brand
  289. dspInfo.ScreenSize = request.ScreenSize
  290. dspInfo.NetworkType = request.NetworkType
  291. dspInfo.Androidid = request.Androidid
  292. dspInfo.Platform = request.Platform
  293. dspInfo.Ip = ip
  294. dspInfo.Ua = uaClient
  295. dspInfo.City = ipInfo.City
  296. dspInfo.Province = ipInfo.Province
  297. dspInfo.UaOrigin = request.UaClient
  298. dspInfo.ReqSource = request.ReqSource
  299. if request.IsMiDevice() {
  300. dspInfo.RealMiFlag = 1
  301. }
  302. dspInfo.ReplaceFlag = replaceFlag
  303. dspInfo.RealReqSource = request.ReqSource
  304. dspInfo.SendPhoneType = sendPhoneType
  305. md5Imei := imei
  306. if dspInfo.ReplaceFlag == 0 {
  307. md5Imei = utils.Md5(imei)
  308. }
  309. dspInfo.RealMd5Imei = md5Imei
  310. //ads_item = None
  311. //xiaomi_response = []
  312. hour, _ := strconv.Atoi(time.Now().Format("01"))
  313. canRequest := true
  314. if 0 <= hour && hour <= 1 {
  315. randNum := rand.Intn(100)
  316. if randNum > 5 {
  317. canRequest = false
  318. }
  319. }
  320. var adData *addata.AdData
  321. var xiaomiResponse []addata.XiaomiAdData
  322. xiaomiRspAction := make(map[string]int, 100)
  323. var adDataNum int
  324. // 非频率控制,设备黑名单,ip黑名单,白名单渠道,并且替换了小米设备的
  325. if canRequest && !isBlackImei && reqChannelFlag.ChannelFlag == 1 && flowFlag == 1 && !isIpBlack && advertiser == "xiaomi" && request.ReqSource != "" && !isBlackImei && !needControl && (replaceFlag == 1 || request.IsMiDevice()) {
  326. adData, xiaomiResponse, xiaomiRspAction, adDataNum, err = addata.GetAdsInfos(&dspInfo, advertiser)
  327. }
  328. canMixFlag := 0
  329. xiaomiResponseFlag := 0
  330. response := Response{}
  331. if adData != nil && len(adData.TargetAddition) > 1 {
  332. realTarget := ""
  333. if adData.Target != "" {
  334. md5Skip := utils.Md5(addata.Target)
  335. conf := adslib.GetConf()
  336. realTarget = conf.Host + fmt.Sprintf("?action=LOADING&req_source=%s&advertiser=video&skip=%s&brand=%s&request_id=%s&skip_other=%s",
  337. dspInfo.ReqSource, "", dspInfo.Brand, dspInfo.RequestId, md5Skip)
  338. // 塞入Redis中
  339. redis_data.SetSkipInfo(md5Skip, adData.Target)
  340. }
  341. adData.Target = realTarget
  342. adData.JsOrderId, _ = redis_data.GetMinScriptOrderByAdv(advertiser)
  343. adData.UserAgent = uaClient
  344. if dspInfo.ReqSource == "kuxin" && adData.Target != "" {
  345. adData.DpReport = fmt.Sprintf("%s?action=DP_CLICK&advertiser=video&req_source=%s", common.get_request_host(None), dspInfo.ReqSource)
  346. adData.Dp = adslib.GetConf().DpTest
  347. }
  348. if dspInfo.SendPhoneType == 0 {
  349. device.SetAdsTagLog(advertiser, dspInfo.ReqSource, "ADS_GET", cityCode) // 广告获取成功
  350. } else if dspInfo.SendPhoneType == 1 {
  351. device.SetAdsTagLog(advertiser, dspInfo.ReqSource, "ADS_GET_1", cityCode) // 广告获取成功
  352. }
  353. device.SetAdsTagLog(advertiser, dspInfo.ReqSource, fmt.Sprintf("ADS_USER_%d", userFlag), cityCode) // 广告类型,缓存,新用户,小米手机
  354. // 判断这个渠道是否要去融合和融合的流量占比
  355. mixChannelFlag, err := redis_data.GetChannelFlag(dspInfo.ReqSource, "ads_mix")
  356. if err != nil {
  357. c.String(404, "get device conf failed")
  358. return
  359. }
  360. flowRandomNum = rand.Intn(100)
  361. isOverFlow := false
  362. //flow_flag = 0
  363. if flowRandomNum > mixChannelFlag.Weigth {
  364. isOverFlow = true
  365. }
  366. if mixChannelFlag.ChannelFlag != 1 || isOverFlow {
  367. //extra_infos = []
  368. }
  369. // 组装返回去的action
  370. serverActionResponse := map[string]int{"server_view": 0, "server_click": 0, "server_close": 0, "server_video_finish": 0, "server_video_timer": 0}
  371. for _, targetInfo := range adData.TargetAddition {
  372. if targetInfo.Type == "VIEW" {
  373. serverActionResponse["server_view"] = 1
  374. redis_data.SetReqSourceView(advertiser, dspInfo.ReqSource, "xiafa")
  375. } else if targetInfo.Type == "CLICK" {
  376. serverActionResponse["server_click"] = 1
  377. } else if targetInfo.Type == "CLOSE" {
  378. serverActionResponse["server_close"] = 1
  379. } else if targetInfo.Type == "VIDEO_FINISH" {
  380. serverActionResponse["server_video_finish"] = 1
  381. } else if targetInfo.Type == "VIDEO_TIMER" {
  382. serverActionResponse["server_video_timer"] = 1
  383. }
  384. }
  385. // 增加跟随订单
  386. if len(adData.TargetAddition) == 2 && serverActionResponse["server_video_finish"] == 1 && (dspInfo.ReqSource == "kuxin" || dspInfo.ReqSource == "zhiku") {
  387. adData, err = addata.CombineOrderBy(adData, advertiser, &dspInfo)
  388. if err != nil {
  389. return err
  390. }
  391. }
  392. //# 检查最后是否有click
  393. //last_target_addition_infos = ads_item_new.get('target_addition',[])
  394. for _, targetAddition := range adData.TargetAddition {
  395. if targetAddition.Type == "CLICK" || targetAddition.Type == "VIDEO_TIMER" {
  396. canMixFlag = 0
  397. break
  398. }
  399. }
  400. if request.NewAdsFlag == 0 {
  401. //response.update(ads_item_new)
  402. } else {
  403. jsonBytes, err := json.Marshal(*adData)
  404. if err != nil {
  405. return err
  406. }
  407. encryptData, _ := encrypt.Encrypt(jsonBytes, []byte(SECERET_KEY))
  408. response.AdsResult = encryptData
  409. }
  410. hour, _ := strconv.Atoi(time.Now().Format("01"))
  411. if 0 <= hour && hour <= 23 && replaceFlag == 1 {
  412. randomNum := utils.Hash(imei) % 10000
  413. if randomNum < 3000 {
  414. //add_beanstalk_response.BeanstalkHandle().add_ads_response_info(md5_imei,ads_ip,web.utf8(province),web.utf8(city),ads_item_new,dsp_city_code,req_source,real_imei,xiaomi_response,xiaomi_action,server_action_response,dsp_info.request_id,xiaomi_ads_data_num)
  415. }
  416. }
  417. }
  418. if canMixFlag == 1 {
  419. response.Result = 2
  420. response.Msg = "no ads"
  421. if xiaomiResponseFlag == 1 {
  422. response.Result = 0
  423. response.Msg = "ok"
  424. }
  425. // 增加打底广告
  426. if (dspInfo.ReqSource == "kuxin" || dspInfo.ReqSource == "zhiku") && !needCotrol == 1 && !isBlackImei {
  427. shortMessage := "kong"
  428. // 先跑定投
  429. customAdData, err := addata.GetCustomAdsInfos(&dspInfo, advertiser, 0, 0, xiaomiResponseFlag)
  430. if err != nil {
  431. return err
  432. }
  433. // 定投没有就跑其他的
  434. if customAdData == nil {
  435. customAdData, err = addata.GetCustomAdsInfos(&dspInfo, advertiser, 0, 1, xiaomiResponseFlag)
  436. if err != nil {
  437. return err
  438. }
  439. }
  440. device.SetAdsTagLog(advertiser, dspInfo.ReqSource, "ADS_ZIYOU_GET", cityCode) // 广告获取成功
  441. if customAdData != nil {
  442. shortMessage = "ads_tt_thirds"
  443. }
  444. if customAdData != nil && (shortMessage == "ads_vast_response" || shortMessage == "ads_tt_thirds") {
  445. //response_data_report = {}
  446. //response_data_report['ip'] = ads_ip
  447. //response_data_report['short_message'] = short_message
  448. //response_data_report['req_source'] = req_source
  449. //response_data_report['response_vast'] = json.dumps(extra_item)
  450. //response_data_report['order_name']=order_name
  451. //response_data_report['advertiser']=advertiser
  452. //log.send_to_graylog_tornado(gelf_data=response_data_report)
  453. adDataBytes, err := json.Marshal(*adData)
  454. if err != nil {
  455. fmt.Sprintf("marshal addata failed: %s\n", err)
  456. }
  457. grayLogData := struct {
  458. Ip string
  459. ShortMessage string `json:"short_message"`
  460. ReqSource string `json:"req_source"`
  461. ResponseVast string `json:"response_vast"`
  462. OrderName string `json:"order_name"`
  463. Advertiser string `json:"advertiser"`
  464. }{
  465. Ip: ip,
  466. ShortMessage: "ads_api_log",
  467. ReqSource: "zhiku",
  468. ResponseVast: string(adDataBytes),
  469. OrderName: customAdData.OrderName,
  470. Advertiser: advertiser,
  471. }
  472. graylog.Log(grayLogData)
  473. }
  474. if shortMessage == "ads_tt_thirds" {
  475. // 组装最后的信息
  476. lastAdData := addata.AdData{}
  477. rspTargetAddition := make([]addata.AdAction, 0, 50)
  478. // 当小米有填充的时候
  479. if len(response.TargetAddition) != 0 && len(customAdData.TargetAddition) != 0 {
  480. rspTargetAddition = response.TargetAddition
  481. lastAdData.UserAgent = response.UserAgent
  482. }
  483. // 当只有view的时候
  484. if len(customAdData.TargetAddition) == 1 {
  485. for _, url := range customAdData.TargetAddition[0].Urls {
  486. rspTargetAddition[0].Urls = append(rspTargetAddition[0].Urls, url)
  487. }
  488. } else {
  489. // 当自由订单有view和click的时候
  490. for _, url := range customAdData.TargetAddition[0].Urls {
  491. rspTargetAddition[0].Urls = append(rspTargetAddition[0].Urls, url)
  492. }
  493. for _, url := range customAdData.TargetAddition[1].Urls {
  494. rspTargetAddition[1].Urls = append(rspTargetAddition[1].Urls, url)
  495. }
  496. rspTargetAddition[1].Type = "CLICK"
  497. }
  498. lastAdData.Target = customAdData.Target
  499. lastAdData.JsOrderId = customAdData.JsOrderId
  500. lastAdData.TargetAddition = rspTargetAddition
  501. lastAdData.DpReport = response.DpReport
  502. lastAdData.Dp = response.Dp
  503. adDataBytes, err := json.Marshal(lastAdData)
  504. if err != nil {
  505. fmt.Sprintf("marshal addata failed: %s\n", err)
  506. }
  507. grayLogData := struct {
  508. ShortMessage string `json:"short_message"`
  509. ResponseVast string `json:"response_vast"`
  510. }{
  511. ShortMessage: "third_mix_xiaomi",
  512. ResponseVast: string(adDataBytes),
  513. }
  514. graylog.Log(grayLogData)
  515. customAdData = &lastAdData
  516. }
  517. if customAdData != nil {
  518. device.SetAdsTagLog(advertiser, dspInfo.ReqSource, "ADS_ZIYOU_HAVE", cityCode) // 广告获取成功
  519. if dspInfo.ReqSource == "zhiku" {
  520. response.Result = 0
  521. response.Msg = "ok"
  522. jsonBytes, err := json.Marshal(customAdData)
  523. if err != nil {
  524. c.String(404, err.Error())
  525. return
  526. }
  527. encryptData, _ := encrypt.Encrypt(jsonBytes, []byte(SECERET_KEY))
  528. response.AdsResult = encryptData
  529. //self.report_graylog(json.dumps(extra_item))
  530. rspBytes, err := json.Marshal(response)
  531. if err != nil {
  532. c.String(404, err.Error())
  533. return
  534. }
  535. c.String(200, string(rspBytes))
  536. return
  537. } else {
  538. customAdData.Result = 0
  539. customAdData.Msg = "ok"
  540. //self.report_graylog(json_response)
  541. rspBytes, err := json.Marshal(customAdData)
  542. if err != nil {
  543. c.String(404, err.Error())
  544. return
  545. }
  546. c.String(200, string(rspBytes))
  547. return
  548. }
  549. }
  550. }
  551. }
  552. redis_data.SetAdsRealRequestNum(advertiser)
  553. rspBytes, err := json.Marshal(response)
  554. if err != nil {
  555. c.String(404, err.Error())
  556. return
  557. }
  558. if request.NewAdsFlag == 0 {
  559. //self.report_graylog(json_response)
  560. }
  561. device.SetAdsTagLog(advertiser, dspInfo.ReqSource, "DS_REQ", cityCode) // 所有请求
  562. c.String(200, string(rspBytes))
  563. }