func PremiummadRequest(results chan models.JsonEntity, adspace models.Adspace, params map[string]string) { weight := adspace.Weight beginTime := time.Now().UnixNano() var buffer bytes.Buffer buffer.WriteString("http://ae.madserving.com/adcall/bidrequest?") buffer.WriteString("adspaceid=" + params["adspaceid"]) buffer.WriteString("&adtype=" + params["adtype"]) buffer.WriteString("&width=" + params["width"]) buffer.WriteString("&height=" + params["height"]) buffer.WriteString("&pkgname=" + params["pkgname"]) buffer.WriteString("&conn=" + params["conn"]) buffer.WriteString("&carrier=" + params["carrier"]) buffer.WriteString("&os=" + params["os"]) buffer.WriteString("&device=" + params["device"]) buffer.WriteString("&bid=" + params["bid"]) buffer.WriteString("&appname=" + params["appname"]) buffer.WriteString("&apitype=4") //始终是4 buffer.WriteString("&pcat=" + params["pcat"]) buffer.WriteString("&osv=" + params["osv"]) buffer.WriteString("&imei=" + params["imei"]) buffer.WriteString("&wma=" + params["wma"]) buffer.WriteString("&aid=" + params["aid"]) buffer.WriteString("&aaid=" + params["aaid"]) buffer.WriteString("&idfa=" + params["idfa"]) buffer.WriteString("&oid=" + params["oid"]) buffer.WriteString("&uid=" + params["uid"]) buffer.WriteString("&ua=" + params["ua"]) buffer.WriteString("&ip=" + params["ip"]) buffer.WriteString("&pid=" + params["pid"]) buffer.WriteString("&density=" + params["density"]) buffer.WriteString("&media=" + params["media"]) buffer.WriteString("&lon=" + params["lon"]) buffer.WriteString("&lat=" + params["lat"]) u := buffer.String() u = strings.Replace(u, " ", "", -1) //替换空格,goreq无法解析空格 log.Debug(u) resp, err := goreq.Request{Timeout: time.Duration(adspace.Timeout) * time.Millisecond, Method: "GET", Uri: u}.Do() if err != nil { log.Error(err) results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_502, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } body := resp.Body defer body.Close() if resp.StatusCode != 200 { log.Warn("response status code : ", resp.StatusCode) results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_201, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } b, err := ioutil.ReadAll(body) if err != nil { log.Error(err) results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_502, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } var data map[string]interface{} if err := json.Unmarshal(b, &data); err == nil { log.Debug(string(b)) //无广告 if data[adspace.DemandAdspaceKey] == nil { results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_201, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } if ad, ok := data[adspace.DemandAdspaceKey].(map[string]interface{}); ok { //无广告,这个类型是float64 if float64(ad["returncode"].(float64)) != 200 { results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_201, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } jsonEntity := models.JsonEntity{} jsonEntity.Returncode = system.CODE_200 jsonEntity.Adspaceid = adspace.DemandAdspaceKey width, _ := strconv.Atoi(params["width"]) jsonEntity.Width = width height, _ := strconv.Atoi(params["height"]) jsonEntity.Height = height adtype, _ := strconv.Atoi(params["adtype"]) jsonEntity.Adtype = adtype jsonEntity.Imgurl = string(ad["imgurl"].(string)) jsonEntity.Clkkurl = string(ad["clickurl"].(string)) jsonEntity.Title = string(ad["displaytitle"].(string)) jsonEntity.Descrtiption = string(ad["displaytext"].(string)) if trackings, ok := ad["thclkurl"].([]interface{}); ok { var clktrackings []string for _, track := range trackings { if t, ok := track.(string); ok { clktrackings = append(clktrackings, t) } } jsonEntity.Clktracking = clktrackings } if trackings, ok := ad["imgtracking"].([]interface{}); ok { var imptrackings []string for _, track := range trackings { if t, ok := track.(string); ok { imptrackings = append(imptrackings, t) } } jsonEntity.Imptracking = imptrackings } jsonEntity.Weight = weight jsonEntity.TimeSpending = (time.Now().UnixNano() - beginTime) / 1000000 results <- jsonEntity return } else { results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_201, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } } else { log.Error(err, string(b)) results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_502, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } }
func BaiduRequest(results chan models.JsonEntity, adspace models.Adspace, params map[string]string) { weight := adspace.Weight beginTime := time.Now().UnixNano() mobadsRequest := &api.MobadsRequest{} mobadsRequest.RequestId = proto.String(params["reqid"]) mobadsRequest.ApiVersion = &api.Version{Major: proto.Uint32(5), Minor: proto.Uint32(0), Micro: proto.Uint32(0)} mobadsRequest.App = &api.App{AppId: proto.String(adspace.DemandSecretKey), AppVersion: &api.Version{Major: proto.Uint32(5), Minor: proto.Uint32(0), Micro: proto.Uint32(0)}} //adslot width, _ := strconv.Atoi(params["width"]) height, _ := strconv.Atoi(params["height"]) mobadsRequest.Adslot = &api.AdSlot{AdslotId: proto.String(adspace.DemandAdspaceKey), AdslotSize: &api.Size{Width: proto.Uint32(uint32(width)), Height: proto.Uint32(uint32(height))}} //Network ip := params["ip"] //ip必填 if ip == "" { log.Warn("baidu:ip is null") results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_502, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } var connectionType api.Network_ConnectionType conn := params["conn"] switch conn { case "1": connectionType = api.Network_WIFI case "2": connectionType = api.Network_CELL_2G case "3": connectionType = api.Network_CELL_3G case "4": connectionType = api.Network_CELL_4G default: connectionType = api.Network_CELL_UNKNOWN } var operatorType api.Network_OperatorType carrier := params["carrier"] switch carrier { case "1": operatorType = api.Network_CHINA_MOBILE case "2": operatorType = api.Network_CHINA_UNICOM case "3": operatorType = api.Network_CHINA_TELECOM default: operatorType = api.Network_UNKNOWN_OPERATOR } mobadsRequest.Network = &api.Network{Ipv4: &ip, ConnectionType: &connectionType, OperatorType: &operatorType} var osType api.Device_OsType var udid api.UdId os := params["os"] switch os { case system.OS_ANDROID: osType = api.Device_ANDROID aid := params["aid"] if matched, _ := regexp.MatchString("[0-9A-Za-z]{16}", aid); !matched { log.Warn("baidu:aid is not correct,", aid) results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_302, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } udid.AndroidId = proto.String(aid) imei := params["imei"] wma := params["wma"] if matched, _ := regexp.MatchString("[0-9a-fA-F]{14,15}", imei); matched { udid.Imei = proto.String(imei) } else if matched, _ := regexp.MatchString("[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}", wma); matched { udid.Mac = proto.String(wma) } else { log.Warn("baidu:imei or wma is null, ", imei, wma) results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_302, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } case system.OS_IOS: osType = api.Device_IOS idfa := params["idfa"] wma := params["wma"] if matched, _ := regexp.MatchString("[0-9a-fA-F]{14,15}", idfa); matched { udid.Idfa = proto.String(idfa) } else if matched, _ := regexp.MatchString("[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}:[0-9a-fA-F]{2}", wma); matched { udid.Mac = proto.String(wma) } else { log.Warn("baidu:idfa or wma is null, ", idfa, wma) results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_302, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } default: log.Warn("baidu:os is not correct, ", os) results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_302, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } //osv var osVersion api.Version osv := strings.Split(params["osv"], ".") if len(osv) < 1 { log.Warn("baidu:osv is not correct, ", osv) results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_302, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } if len(osv) == 1 { major, _ := strconv.Atoi(osv[0]) osVersion = api.Version{Major: proto.Uint32(uint32(major))} } else if len(osv) == 2 { major, _ := strconv.Atoi(osv[0]) minor, _ := strconv.Atoi(osv[1]) osVersion = api.Version{Major: proto.Uint32(uint32(major)), Minor: proto.Uint32(uint32(minor))} } else if len(osv) == 3 { major, _ := strconv.Atoi(osv[0]) minor, _ := strconv.Atoi(osv[1]) micro, _ := strconv.Atoi(osv[2]) osVersion = api.Version{Major: proto.Uint32(uint32(major)), Minor: proto.Uint32(uint32(minor)), Micro: proto.Uint32(uint32(micro))} } //Vendor Model var vendor []byte var model []byte device := strings.Split(params["device"], " ") if len(device) < 1 { log.Warn("baidu:device is not correct, ", device) results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_302, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } if len(device) == 1 { vendor = []byte(device[0]) model = []byte("others") } else if len(device) == 2 { vendor = []byte(device[0]) model = []byte(device[1]) } deviceType := api.Device_PHONE mobadsRequest.Device = &api.Device{DeviceType: &deviceType, OsType: &osType, Udid: &udid, OsVersion: &osVersion, Vendor: vendor, Model: model, ScreenSize: &api.Size{Width: proto.Uint32(uint32(width)), Height: proto.Uint32(uint32(height))}} var err error content, err := proto.Marshal(mobadsRequest) if err != nil { log.Warn("baidu:", err) results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_501, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } log.Debug(mobadsRequest.String()) //---------------request----------------// resp, err := goreq.Request{Timeout: time.Duration(adspace.Timeout) * time.Millisecond, Method: "POST", Uri: "http://mobads.baidu.com/api_5", Body: content}.Do() if err != nil { log.Error("baidu:", err) results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_501, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } body, err := ioutil.ReadAll(resp.Body) defer resp.Body.Close() if err != nil { results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_502, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } if resp.StatusCode != 200 { log.Warn("baidu:StatusCode ", resp.StatusCode) results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_201, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } mobadsResponse := &api.MobadsResponse{} err = proto.Unmarshal(body, mobadsResponse) if err != nil { log.Error(err) results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_502, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } log.Debug(mobadsResponse.String()) //无广告 errorCode := mobadsResponse.ErrorCode if errorCode != nil && *errorCode != 0 { results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_201, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } if len(mobadsResponse.Ads) < 1 || mobadsResponse.Ads[0].MaterialMeta == nil { results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_201, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } //有广告 materialMeta := mobadsResponse.Ads[0].MaterialMeta jsonEntity := models.JsonEntity{} jsonEntity.Returncode = system.CODE_200 jsonEntity.Adspaceid = adspace.DemandAdspaceKey w, _ := strconv.Atoi(params["width"]) jsonEntity.Width = w h, _ := strconv.Atoi(params["height"]) jsonEntity.Height = h adtype, _ := strconv.Atoi(params["adtype"]) jsonEntity.Adtype = adtype jsonEntity.Clkkurl = *materialMeta.ClickUrl if len(materialMeta.ImageSrc) >= 1 { jsonEntity.Imgurl = materialMeta.ImageSrc[0] } if materialMeta.Title != nil { jsonEntity.Title = string(materialMeta.Title) } if len(materialMeta.Description) >= 1 { jsonEntity.Descrtiption = string(materialMeta.Description[0]) } jsonEntity.Imptracking = materialMeta.WinNoticeUrl jsonEntity.Weight = weight jsonEntity.TimeSpending = (time.Now().UnixNano() - beginTime) / 1000000 results <- jsonEntity return }
func TencentRequest(results chan models.JsonEntity, adspace models.Adspace, params map[string]string) { weight := adspace.Weight beginTime := time.Now().UnixNano() url := "http://mi.gdt.qq.com/gdt_mview.fcg?adposcount=1&count=1&charset=utf8&datafmt=json" url += "&posid=" + adspace.DemandAdspaceKey url += "&posw=" + params["width"] url += "&posh=" + params["height"] ext := make(map[string]interface{}) ext_req := make(map[string]interface{}) ext_req["apiver"] = "1.6" ext_req["appid"] = adspace.DemandSecretKey switch params["os"] { case system.OS_ANDROID: ext_req["c_os"] = "android" ext_req["muidtype"] = 1 if params["imei"] == "" { results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_302, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } ext_req["muid"] = utils.Md5(params["imei"]) case system.OS_IOS: ext_req["c_os"] = "ios" ext_req["muidtype"] = 2 if params["idfa"] == "" { results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_302, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } ext_req["muid"] = utils.Md5(params["idfa"]) default: results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_302, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } switch params["conn"] { case "1": ext_req["conn"] = 1 case "2": ext_req["conn"] = 2 case "3": ext_req["conn"] = 3 case "4": ext_req["conn"] = 4 default: ext_req["conn"] = 0 } switch params["carrier"] { case "1": ext_req["carrier"] = 1 case "2": ext_req["carrier"] = 2 case "3": ext_req["carrier"] = 3 default: ext_req["carrier"] = 0 } ext_req["c_w"] = params["width"] ext_req["c_h"] = params["height"] if params["device"] == "" { results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_302, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } ext_req["c_device"] = params["device"] if params["pkgname"] == "" { results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_302, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } ext_req["c_pkgname"] = params["pkgname"] switch params["adtype"] { case "2": ext_req["postype"] = 1 case "5": ext_req["postype"] = 2 case "6": ext_req["postype"] = 4 default: results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_302, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } ext["req"] = ext_req b, err := json.Marshal(ext) if err != nil { results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_502, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } url += string(b) //---------------request----------------// resp, err := goreq.Request{Timeout: time.Duration(adspace.Timeout) * time.Millisecond, Method: "GET", Uri: url}.Do() if err != nil { log.Error(err) results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_501, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } body, err := ioutil.ReadAll(resp.Body) defer resp.Body.Close() if err != nil { log.Error(err) results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_502, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } if resp.StatusCode != 200 { results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_201, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } var data map[string]interface{} err = json.Unmarshal(body, &data) if err != nil { results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_502, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } ret := data["ret"] if ret == nil || ret != 0 { results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_201, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } if lists, ok := data[adspace.DemandAdspaceKey].(map[string][]interface{}); ok { //有广告 list := lists["list"] if len(list) < 1 { results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_201, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } if ad, ok := list[0].(map[string]interface{}); ok { jsonEntity := models.JsonEntity{} jsonEntity.Returncode = system.CODE_200 jsonEntity.Adspaceid = adspace.DemandAdspaceKey width, _ := strconv.Atoi(params["width"]) jsonEntity.Width = width height, _ := strconv.Atoi(params["height"]) jsonEntity.Height = height adtype, _ := strconv.Atoi(params["adtype"]) jsonEntity.Adtype = adtype jsonEntity.Imgurl = string(ad["imgurl"].(string)) jsonEntity.Clkkurl = string(ad["clickurl"].(string)) jsonEntity.Title = string(ad["displaytitle"].(string)) jsonEntity.Descrtiption = string(ad["displaytext"].(string)) if trackings, ok := ad["thclkurl"].([]interface{}); ok { var clktrackings []string for _, track := range trackings { if t, ok := track.(string); ok { clktrackings = append(clktrackings, t) } } jsonEntity.Clktracking = clktrackings } if trackings, ok := ad["imgtracking"].([]interface{}); ok { var imptrackings []string for _, track := range trackings { if t, ok := track.(string); ok { imptrackings = append(imptrackings, t) } } jsonEntity.Imptracking = imptrackings } jsonEntity.Weight = weight jsonEntity.TimeSpending = (time.Now().UnixNano() - beginTime) / 1000000 results <- jsonEntity return } } else { results <- models.JsonEntity{Weight: weight, Returncode: system.CODE_201, TimeSpending: (time.Now().UnixNano() - beginTime) / 1000000} return } }