adjust.go 57 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609
  1. package statistics
  2. import (
  3. "blog/core/function"
  4. "blog/models/dblogic"
  5. "blog/models/tables"
  6. "blog/models/tool"
  7. "encoding/json"
  8. "fmt"
  9. "strings"
  10. "time"
  11. )
  12. // const user_token = "nDPDkox9PxGoisxoMm9Q"
  13. const user_token = "Tha-k75HDFTdG9WE_s58"
  14. const apiUrlNew = "https://dash.adjust.com/control-center/reports-service/report?"
  15. func TrackerGroup() map[string][]string {
  16. //token所属渠道
  17. var trackerGroup map[string][]string /*创建集合 */
  18. trackerGroup = make(map[string][]string)
  19. trackerGroup["Organic"] = []string{"g1b8nag"}
  20. trackerGroup["游戏内部跟踪链接"] = []string{"yhm47x1", "sij469x", "ynlt7ad", "l67x2mt", "6jq5m5g", "a7krf04", "v4x1byi", "327ogs3", "vt67uin", "cl7yqth", "fqupiw4", "b8q4iua", "x2ao8dk", "tri542t", "c9h1f36", "nua60j4", "o5rfavc"}
  21. trackerGroup["社媒KOL"] = []string{"ys85rvc", "n3l2809", "d2p6i5s", "oscpr9r"}
  22. trackerGroup["各平台主页渠道"] = []string{"a9nv7dj", "53ece3e", "1z942q1", "d7wopl7", "j7u6h9x", "to6eamo"}
  23. trackerGroup["邮件营销"] = []string{"cj6x62s", "pgdmu1z", "4x6dr4w"}
  24. trackerGroup["游戏外邀请"] = []string{"1jn49bp", "y8phovy"}
  25. trackerGroup["Facebook"] = []string{"2xgabxp", "k1qjyjr", "cwvjh9o", "oss8d1v"}
  26. trackerGroup["Google_ads"] = []string{"ussdj6t", "n6mofty"}
  27. trackerGroup["苹果商店页搜索广告"] = []string{"rs64xuy"}
  28. trackerGroup["Unity"] = []string{"u69nimr"}
  29. trackerGroup["Applovin"] = []string{"kkph0xk"}
  30. trackerGroup["IronSource"] = []string{"vjjyyf2"}
  31. trackerGroup["Chartboost"] = []string{"14dbbj0"}
  32. trackerGroup["Mintegral"] = []string{"r2phf78"}
  33. trackerGroup["Vungle"] = []string{"6j6t1sg"}
  34. trackerGroup["Inplayable"] = []string{"n4tb7gp"}
  35. trackerGroup["Linkme"] = []string{"yw8hp34"}
  36. trackerGroup["Tecdo"] = []string{"vbc3665"}
  37. trackerGroup["Virgrilmedia"] = []string{"6366s1a"}
  38. trackerGroup["TikTok"] = []string{"6xxj7ry"}
  39. trackerGroup["Prodege"] = []string{"ji2y5ap"}
  40. return trackerGroup
  41. }
  42. // 可交付数据 细分到广告
  43. func View(date string, grouping string, kpis string) string {
  44. if date == "" {
  45. date = "2021-04-01"
  46. }
  47. if grouping == "" {
  48. grouping = "networks,campaigns,adgroups,creatives,countries,os_names"
  49. }
  50. if kpis == "" {
  51. kpis = "daus,installs,revenue" //daus每日活跃用户数 installs安装 revenue收入
  52. }
  53. url := "https://api.adjust.com/kpis/v1/rv3fkx1a8em8?start_date=" + date + "&end_date=" + date + "&grouping=" + grouping + "&kpis=" + kpis + "&user_token=" + user_token + "&attribution_type=click"
  54. fmt.Println(url)
  55. body := tool.Get(url)
  56. var dat map[string]interface{}
  57. if err := json.Unmarshal([]byte(body), &dat); err != nil {
  58. for err != nil {
  59. time.Sleep(3 * time.Second)
  60. body := tool.Get(url)
  61. err = json.Unmarshal([]byte(body), &dat)
  62. }
  63. }
  64. list := dat["result_set"].(map[string]interface{})["networks"]
  65. if list == nil {
  66. return url
  67. }
  68. tableName := "t_adjust_period_view"
  69. //获取日期为 date的全部数据
  70. adjustPeriodView := []*tables.TAdjustPeriodView{}
  71. dblogic.M("GAMES1").Table(tableName).Where("date = ?", date).Find(&adjustPeriodView)
  72. //遍历数据库中数据,组装成 key =》 id ( key 为 Date,Trackers_channel_token,Campaigns_token,Adgroups_token,Creatives_token,Countries,OsNames 组成)
  73. adjustPeriodViewMap := map[string]int{}
  74. for _, row := range adjustPeriodView {
  75. keyTemp := ""
  76. keyTemp += row.Date
  77. keyTemp += row.Trackers_channel_token
  78. keyTemp += row.Campaigns_token
  79. keyTemp += row.Adgroups_token
  80. keyTemp += row.Creatives_token
  81. keyTemp += row.Countries
  82. keyTemp += row.OsNames
  83. adjustPeriodViewMap[keyTemp] = row.Id
  84. }
  85. updateCnt := 0
  86. updateSql := ""
  87. periodViewTokens := PeriodViewTokens()
  88. for _, v := range list.([]interface{}) {
  89. trackers_channel_token := function.Strval(v.(map[string]interface{})["token"])
  90. trackers_channel_name := function.Strval(v.(map[string]interface{})["name"])
  91. if trackers_channel_token != "r2phf78" &&
  92. trackers_channel_token != "ussdj6t" &&
  93. trackers_channel_token != "6xxj7ry" &&
  94. trackers_channel_token != "rs64xuy" &&
  95. !function.IsContain(periodViewTokens, trackers_channel_token) {
  96. //fmt.Println(trackers_channel_token + " null 不是 FB & Google_ads & Mintegral")
  97. fmt.Println(trackers_channel_name + " 不是 FB & Google_ads & Mintegral & TikTok & asa")
  98. continue
  99. }
  100. campaigns := v.(map[string]interface{})["campaigns"]
  101. if campaigns == nil {
  102. //fmt.Println("campaigns null")
  103. continue
  104. }
  105. for _, campaignsRow := range campaigns.([]interface{}) {
  106. campaigns_token := function.Strval(campaignsRow.(map[string]interface{})["token"])
  107. //campaigns_name := function.Strval(campaignsRow.(map[string]interface{})["name"])
  108. //campaigns_id := function.RegularGetBrackets(campaigns_name) //正则匹配出扩展里面的数值
  109. //fmt.Println(campaigns_id)
  110. adgroups := campaignsRow.(map[string]interface{})["adgroups"]
  111. if adgroups == nil {
  112. //fmt.Println("adgroups null")
  113. continue
  114. }
  115. for _, adgroupsRow := range adgroups.([]interface{}) {
  116. adgroups_token := function.Strval(adgroupsRow.(map[string]interface{})["token"])
  117. //adgroups_name := function.Strval(adgroupsRow.(map[string]interface{})["name"])
  118. //adgroups_id := function.RegularGetBrackets(adgroups_name) //正则匹配出扩展里面的数值
  119. //fmt.Println(adgroups_id)
  120. creatives := adgroupsRow.(map[string]interface{})["creatives"]
  121. if creatives == nil {
  122. //fmt.Println("creatives null")
  123. continue
  124. }
  125. for _, creativesRow := range creatives.([]interface{}) {
  126. creatives_token := function.Strval(creativesRow.(map[string]interface{})["token"])
  127. countries := creativesRow.(map[string]interface{})["countries"]
  128. if countries == nil {
  129. //fmt.Println("countries null")
  130. continue
  131. }
  132. for _, countryRow := range countries.([]interface{}) {
  133. //第一层国家
  134. country := function.Strval(countryRow.(map[string]interface{})["country"])
  135. //fmt.Println("国家:" + country)
  136. os_names := countryRow.(map[string]interface{})["os_names"]
  137. if os_names == nil {
  138. //fmt.Println("os_names null")
  139. continue
  140. }
  141. for _, os_nameRow := range os_names.([]interface{}) {
  142. //第二层设备
  143. os_name := function.Strval(os_nameRow.(map[string]interface{})["os_name"])
  144. //fmt.Println("设备:" + os_name)
  145. kpi_values := function.Strval(os_nameRow.(map[string]interface{})["kpi_values"])
  146. keyTemp := date + trackers_channel_token + campaigns_token + adgroups_token + creatives_token + country + os_name
  147. updateCnt++
  148. updateSql = "update " + tableName + " set "
  149. updateSql += "`kpi_values` = '" + kpi_values + "'"
  150. updateSql += " where id=" + function.Strval(adjustPeriodViewMap[keyTemp])
  151. db := dblogic.M("GAMES1").Exec(updateSql)
  152. if db.Error != nil {
  153. fmt.Print(updateSql)
  154. fmt.Println(db.Error)
  155. continue
  156. }
  157. if updateCnt%300 == 0 {
  158. fmt.Print("update cnt:300 time:")
  159. fmt.Println(time.Now().Unix())
  160. }
  161. }
  162. }
  163. }
  164. }
  165. }
  166. }
  167. fmt.Print("updateCnt:")
  168. fmt.Println(updateCnt)
  169. return url
  170. }
  171. // 同期群 细分到广告
  172. func PeriodView(date string, grouping string, kpis string) string {
  173. if date == "" {
  174. date = "date-04-01"
  175. }
  176. if grouping == "" {
  177. grouping = "networks,campaigns,adgroups,creatives,countries,os_names"
  178. }
  179. if kpis == "" {
  180. kpis = "retained_users,paying_users,revenue_total" //retained_users规模 paying_users支付人数 revenue_total累计总收入
  181. }
  182. cohort_period_filter := "0,1,2,6,14,29,59,89,119"
  183. url := "https://api.adjust.com/kpis/v1/rv3fkx1a8em8/cohorts?start_date=" + date + "&end_date=" + date + "&grouping=" + grouping + "&kpis=" + kpis + "&user_token=" + user_token + "&attribution_type=click" + "&cohort_period_filter=" + cohort_period_filter + "&reattributed=all"
  184. body := tool.Get(url)
  185. var dat map[string]interface{}
  186. if err := json.Unmarshal([]byte(body), &dat); err != nil {
  187. for err != nil {
  188. time.Sleep(3 * time.Second)
  189. body := tool.Get(url)
  190. err = json.Unmarshal([]byte(body), &dat)
  191. }
  192. }
  193. trackerGroup := TrackerGroup()
  194. list := dat["result_set"].(map[string]interface{})["networks"]
  195. if list == nil {
  196. return url
  197. }
  198. tableName := "t_adjust_period_view"
  199. //获取日期为 date的全部数据
  200. adjustPeriodView := []*tables.TAdjustPeriodView{}
  201. dblogic.M("GAMES1").Table(tableName).Where("date = ?", date).Find(&adjustPeriodView)
  202. //遍历数据库中数据,组装成 key =》 id ( key 为 Date,Trackers_channel_token,Campaigns_token,Adgroups_token,Creatives_token,Countries,OsNames 组成)
  203. adjustPeriodViewMap := map[string]int{}
  204. for _, row := range adjustPeriodView {
  205. keyTemp := ""
  206. keyTemp += row.Date
  207. keyTemp += row.Trackers_channel_token
  208. keyTemp += row.Campaigns_token
  209. keyTemp += row.Adgroups_token
  210. keyTemp += row.Creatives_token
  211. keyTemp += row.Countries
  212. keyTemp += row.OsNames
  213. adjustPeriodViewMap[keyTemp] = row.Id
  214. }
  215. insertCnt, insertTempCnt := 0, 0
  216. insertSql := "insert into " + tableName + " (" +
  217. "`date`," +
  218. "`trackers_channel_token`," +
  219. "`trackers_channel_name`," +
  220. "`trackers_group_type`," +
  221. "`campaigns_token`," +
  222. "`campaigns_name`," +
  223. "`campaigns_id`," +
  224. "`adgroups_token`," +
  225. "`adgroups_name`," +
  226. "`adgroups_id`," +
  227. "`creatives_token`," +
  228. "`creatives_name`," +
  229. "`creatives_id`," +
  230. "`countries`," +
  231. "`os_names`," +
  232. "`period_0_kpis`," +
  233. "`period_1_kpis`," +
  234. "`period_2_kpis`," +
  235. "`period_6_kpis`," +
  236. "`period_14_kpis`," +
  237. "`period_29_kpis`," +
  238. "`period_59_kpis`," +
  239. "`period_89_kpis`," +
  240. "`period_119_kpis`) values "
  241. insertOrigin := insertSql
  242. updateCnt := 0
  243. updateSql := ""
  244. periodViewTokens := PeriodViewTokens()
  245. for _, v := range list.([]interface{}) {
  246. trackers_channel_token := function.Strval(v.(map[string]interface{})["token"])
  247. trackers_channel_name := function.Strval(v.(map[string]interface{})["name"])
  248. if trackers_channel_token != "r2phf78" &&
  249. trackers_channel_token != "ussdj6t" &&
  250. trackers_channel_token != "6xxj7ry" &&
  251. trackers_channel_token != "rs64xuy" &&
  252. !function.IsContain(periodViewTokens, trackers_channel_token) {
  253. fmt.Println(trackers_channel_token + " null 不是 FB & Google_ads & Mintegral & TikTok & asa")
  254. continue
  255. }
  256. campaigns := v.(map[string]interface{})["campaigns"]
  257. if campaigns == nil {
  258. continue
  259. }
  260. for _, campaignsRow := range campaigns.([]interface{}) {
  261. campaigns_token := function.Strval(campaignsRow.(map[string]interface{})["token"])
  262. campaigns_name := function.Strval(campaignsRow.(map[string]interface{})["name"])
  263. campaigns_id := function.RegularGetBrackets(campaigns_name) //正则匹配出扩展里面的数值
  264. adgroups := campaignsRow.(map[string]interface{})["adgroups"]
  265. if adgroups == nil {
  266. continue
  267. }
  268. for _, adgroupsRow := range adgroups.([]interface{}) {
  269. adgroups_token := function.Strval(adgroupsRow.(map[string]interface{})["token"])
  270. adgroups_name := function.Strval(adgroupsRow.(map[string]interface{})["name"])
  271. adgroups_id := function.RegularGetBrackets(adgroups_name) //正则匹配出扩展里面的数值
  272. creatives := adgroupsRow.(map[string]interface{})["creatives"]
  273. if creatives == nil {
  274. continue
  275. }
  276. for _, creativesRow := range creatives.([]interface{}) {
  277. creatives_token := function.Strval(creativesRow.(map[string]interface{})["token"])
  278. creatives_name := function.Strval(creativesRow.(map[string]interface{})["name"])
  279. creatives_id := function.RegularGetBrackets(creatives_name) //正则匹配出扩展里面的数值
  280. if creatives_id == "" {
  281. //fmt.Println("creatives_id null")
  282. //continue
  283. }
  284. countries := creativesRow.(map[string]interface{})["countries"]
  285. if countries == nil {
  286. continue
  287. }
  288. for _, countryRow := range countries.([]interface{}) {
  289. //第一层国家
  290. country := function.Strval(countryRow.(map[string]interface{})["country"])
  291. os_names := countryRow.(map[string]interface{})["os_names"]
  292. if os_names == nil {
  293. continue
  294. }
  295. for _, os_nameRow := range os_names.([]interface{}) {
  296. //第二层设备
  297. os_name := function.Strval(os_nameRow.(map[string]interface{})["os_name"])
  298. var kpisList map[string]string /*创建集合 */
  299. kpisList = make(map[string]string)
  300. periods := os_nameRow.(map[string]interface{})["periods"]
  301. for _, pv := range periods.([]interface{}) {
  302. period := function.Strval(pv.(map[string]interface{})["period"])
  303. kpi_values := function.Strval(pv.(map[string]interface{})["kpi_values"])
  304. kpisList[period] = kpi_values
  305. }
  306. trackers_group_type := ""
  307. for key, _ := range trackerGroup {
  308. if function.IsContain(trackerGroup[key], trackers_channel_token) {
  309. trackers_group_type = key
  310. break
  311. }
  312. }
  313. //判断数据库是否存在,不存在则保存
  314. keyTemp := ""
  315. keyTemp += date
  316. keyTemp += trackers_channel_token
  317. keyTemp += campaigns_token
  318. keyTemp += adgroups_token
  319. keyTemp += creatives_token
  320. keyTemp += country
  321. keyTemp += os_name
  322. if adjustPeriodViewMap[keyTemp] == 0 {
  323. insertCnt++
  324. insertTempCnt++
  325. insertSql += "('"
  326. insertSql += date + "','"
  327. insertSql += trackers_channel_token + "','"
  328. insertSql += trackers_channel_name + "','"
  329. insertSql += trackers_group_type + "','"
  330. insertSql += campaigns_token + "','"
  331. insertSql += strings.Replace(campaigns_name, "'", "\\'", -1) + "','"
  332. insertSql += campaigns_id + "','"
  333. insertSql += adgroups_token + "','"
  334. insertSql += strings.Replace(adgroups_name, "'", "\\'", -1) + "','"
  335. insertSql += adgroups_id + "','"
  336. insertSql += creatives_token + "','"
  337. insertSql += strings.Replace(creatives_name, "'", "\\'", -1) + "','"
  338. insertSql += creatives_id + "','"
  339. insertSql += country + "','"
  340. insertSql += os_name + "','"
  341. insertSql += kpisList["0"] + "','"
  342. insertSql += kpisList["1"] + "','"
  343. insertSql += kpisList["2"] + "','"
  344. insertSql += kpisList["6"] + "','"
  345. insertSql += kpisList["14"] + "','"
  346. insertSql += kpisList["29"] + "','"
  347. insertSql += kpisList["59"] + "','"
  348. insertSql += kpisList["89"] + "','"
  349. insertSql += kpisList["119"] + "'),"
  350. if insertTempCnt == 300 { //每300条 批量执行
  351. insertTempCnt = 0
  352. insertSql = strings.TrimSuffix(insertSql, ",")
  353. fmt.Print("insert begin:")
  354. fmt.Println(time.Now())
  355. dblogic.M("GAMES1").Exec(insertSql)
  356. fmt.Print("insert end:")
  357. fmt.Println(time.Now())
  358. insertSql = insertOrigin
  359. }
  360. } else {
  361. updateCnt++
  362. updateSql = "update " + tableName + " set "
  363. updateSql += "`trackers_channel_name` = '" + trackers_channel_name + "',"
  364. updateSql += "`trackers_group_type` = '" + trackers_group_type + "',"
  365. updateSql += "`campaigns_name` = '" + strings.Replace(campaigns_name, "'", "\\'", -1) + "',"
  366. updateSql += "`campaigns_id` = '" + campaigns_id + "',"
  367. updateSql += "`adgroups_name` = '" + strings.Replace(adgroups_name, "'", "\\'", -1) + "',"
  368. updateSql += "`adgroups_id` = '" + adgroups_id + "',"
  369. updateSql += "`creatives_name` = '" + strings.Replace(creatives_name, "'", "\\'", -1) + "',"
  370. updateSql += "`creatives_id` = '" + creatives_id + "',"
  371. updateSql += "`period_0_kpis` = '" + kpisList["0"] + "',"
  372. updateSql += "`period_1_kpis` = '" + kpisList["1"] + "',"
  373. updateSql += "`period_2_kpis` = '" + kpisList["2"] + "',"
  374. updateSql += "`period_6_kpis` = '" + kpisList["6"] + "',"
  375. updateSql += "`period_14_kpis` = '" + kpisList["14"] + "',"
  376. updateSql += "`period_29_kpis` = '" + kpisList["29"] + "',"
  377. updateSql += "`period_59_kpis` = '" + kpisList["59"] + "',"
  378. updateSql += "`period_89_kpis` = '" + kpisList["89"] + "',"
  379. updateSql += "`period_119_kpis` = '" + kpisList["119"] + "'"
  380. updateSql += " where id=" + function.Strval(adjustPeriodViewMap[keyTemp])
  381. db := dblogic.M("GAMES1").Exec(updateSql)
  382. if db.Error != nil {
  383. fmt.Print(updateSql)
  384. fmt.Println(db.Error)
  385. continue
  386. }
  387. if updateCnt%300 == 0 {
  388. fmt.Print("update cnt:300 time:")
  389. fmt.Println(time.Now().Unix())
  390. }
  391. }
  392. }
  393. }
  394. }
  395. }
  396. }
  397. }
  398. if insertTempCnt > 0 { //每300条 批量执行
  399. insertTempCnt = 0
  400. insertSql = strings.TrimSuffix(insertSql, ",")
  401. fmt.Print("insert begin:")
  402. fmt.Println(time.Now())
  403. dblogic.M("GAMES1").Exec(insertSql)
  404. fmt.Print("insert end:")
  405. fmt.Println(time.Now())
  406. insertSql = insertOrigin
  407. }
  408. fmt.Print("insertCnt:")
  409. fmt.Println(insertCnt)
  410. fmt.Print("updateCnt:")
  411. fmt.Println(updateCnt)
  412. return url
  413. }
  414. func PeriodViewCampaigns(date string, grouping string, kpis string) string {
  415. if date == "" {
  416. date = "2021-04-01"
  417. }
  418. if grouping == "" {
  419. grouping = "networks,campaigns,countries,os_names"
  420. }
  421. if kpis == "" {
  422. kpis = "retained_users,paying_users,revenue_total" //retained_users规模 paying_users支付人数 revenue_total累计总收入
  423. }
  424. cohort_period_filter := "0,1,2,6,14,29,59,89,119"
  425. url := "https://api.adjust.com/kpis/v1/rv3fkx1a8em8/cohorts?start_date=" + date + "&end_date=" + date + "&grouping=" + grouping + "&kpis=" + kpis + "&user_token=" + user_token + "&attribution_type=click" + "&cohort_period_filter=" + cohort_period_filter + "&reattributed=all"
  426. fmt.Println(url)
  427. body := tool.Get(url)
  428. var dat map[string]interface{}
  429. if err := json.Unmarshal([]byte(body), &dat); err != nil {
  430. for err != nil {
  431. time.Sleep(3 * time.Second)
  432. body := tool.Get(url)
  433. err = json.Unmarshal([]byte(body), &dat)
  434. }
  435. }
  436. tableName := "t_adjust_period_campaigns"
  437. //获取日期为 date的全部数据
  438. adjustPeriodViewCampaign := []*tables.TAdjustPeriodViewCampaigns{}
  439. dblogic.M("GAMES1").Table(tableName).Where("date = ?", date).Find(&adjustPeriodViewCampaign)
  440. //遍历数据库中数据,组装成 key =》 id ( key 为 Date,Trackers_channel_token,Campaigns_token,Countries,OsNames 组成)
  441. adjustPeriodViewCampaignMap := map[string]int{}
  442. for _, row := range adjustPeriodViewCampaign {
  443. keyTemp := ""
  444. keyTemp += row.Date
  445. keyTemp += row.Trackers_channel_token
  446. keyTemp += row.Campaigns_token
  447. keyTemp += row.Countries
  448. keyTemp += row.OsNames
  449. adjustPeriodViewCampaignMap[keyTemp] = row.Id
  450. }
  451. insertCnt := 0
  452. insertTempCnt := 0
  453. insertSql := "insert into " + tableName + " (" +
  454. "`date`," +
  455. "`countries`," +
  456. "`os_names`," +
  457. "`trackers_channel_token`," +
  458. "`trackers_channel_name`," +
  459. "`trackers_group_type`," +
  460. "`campaigns_token`," +
  461. "`campaigns_name`," +
  462. "`campaigns_id`," +
  463. "`period_0_kpis`," +
  464. "`period_1_kpis`," +
  465. "`period_2_kpis`," +
  466. "`period_6_kpis`," +
  467. "`period_14_kpis`," +
  468. "`period_29_kpis`," +
  469. "`period_59_kpis`," +
  470. "`period_89_kpis`," +
  471. "`period_119_kpis`) values "
  472. insertOrigin := insertSql
  473. updateCnt := 0
  474. updateSql := ""
  475. trackerGroup := TrackerGroup()
  476. list := dat["result_set"].(map[string]interface{})["networks"]
  477. if list == nil {
  478. return url
  479. }
  480. for _, v := range list.([]interface{}) {
  481. trackers_channel_token := function.Strval(v.(map[string]interface{})["token"])
  482. trackers_channel_name := function.Strval(v.(map[string]interface{})["name"])
  483. campaigns := v.(map[string]interface{})["campaigns"]
  484. if campaigns == nil {
  485. //fmt.Println("campaigns null")
  486. continue
  487. }
  488. for _, campaignsRow := range campaigns.([]interface{}) {
  489. campaigns_token := function.Strval(campaignsRow.(map[string]interface{})["token"])
  490. campaigns_name := function.Strval(campaignsRow.(map[string]interface{})["name"])
  491. campaigns_id := function.RegularGetBrackets(campaigns_name) //正则匹配出扩展里面的数值
  492. countries := campaignsRow.(map[string]interface{})["countries"]
  493. if countries == nil {
  494. //fmt.Println("countries null")
  495. continue
  496. }
  497. for _, countryRow := range countries.([]interface{}) {
  498. //第一层国家
  499. country := function.Strval(countryRow.(map[string]interface{})["country"])
  500. //fmt.Println("国家:" + country)
  501. os_names := countryRow.(map[string]interface{})["os_names"]
  502. if os_names == nil {
  503. //fmt.Println("os_names null")
  504. continue
  505. }
  506. for _, os_nameRow := range os_names.([]interface{}) {
  507. //第二层设备
  508. os_name := function.Strval(os_nameRow.(map[string]interface{})["os_name"])
  509. //fmt.Println("设备:" + os_name)
  510. var kpisList map[string]string /*创建集合 */
  511. kpisList = make(map[string]string)
  512. periods := os_nameRow.(map[string]interface{})["periods"]
  513. for _, pv := range periods.([]interface{}) {
  514. period := function.Strval(pv.(map[string]interface{})["period"])
  515. kpi_values := function.Strval(pv.(map[string]interface{})["kpi_values"])
  516. kpisList[period] = kpi_values
  517. }
  518. trackers_group_type := ""
  519. for key, _ := range trackerGroup {
  520. if function.IsContain(trackerGroup[key], trackers_channel_token) {
  521. trackers_group_type = key
  522. break
  523. }
  524. }
  525. if trackers_group_type == "Facebook" {
  526. //fmt.Println("Facebook continue")
  527. continue
  528. }
  529. keyTemp := date + trackers_channel_token + campaigns_token + country + os_name
  530. if adjustPeriodViewCampaignMap[keyTemp] == 0 {
  531. insertCnt++
  532. insertTempCnt++
  533. insertSql += "('"
  534. insertSql += date + "','"
  535. insertSql += country + "','"
  536. insertSql += os_name + "','"
  537. insertSql += trackers_channel_token + "','"
  538. insertSql += trackers_channel_name + "','"
  539. insertSql += trackers_group_type + "','"
  540. insertSql += campaigns_token + "','"
  541. insertSql += campaigns_name + "','"
  542. insertSql += campaigns_id + "','"
  543. insertSql += kpisList["0"] + "','"
  544. insertSql += kpisList["1"] + "','"
  545. insertSql += kpisList["2"] + "','"
  546. insertSql += kpisList["6"] + "','"
  547. insertSql += kpisList["14"] + "','"
  548. insertSql += kpisList["29"] + "','"
  549. insertSql += kpisList["59"] + "','"
  550. insertSql += kpisList["89"] + "','"
  551. insertSql += kpisList["119"] + "'),"
  552. if insertTempCnt == 300 { //每300条 批量执行
  553. insertTempCnt = 0
  554. insertSql = strings.TrimSuffix(insertSql, ",")
  555. fmt.Print("insert begin:")
  556. fmt.Println(time.Now())
  557. dblogic.M("GAMES1").Exec(insertSql)
  558. fmt.Print("insert end:")
  559. fmt.Println(time.Now())
  560. insertSql = insertOrigin
  561. }
  562. } else {
  563. updateCnt++
  564. updateSql = "update " + tableName + " set "
  565. updateSql += "`trackers_channel_name`='" + trackers_channel_name + "',"
  566. updateSql += "`trackers_group_type`='" + trackers_group_type + "',"
  567. updateSql += "`campaigns_name`='" + campaigns_name + "',"
  568. updateSql += "`campaigns_id`='" + campaigns_id + "',"
  569. updateSql += "`period_0_kpis`='" + kpisList["0"] + "',"
  570. updateSql += "`period_1_kpis`='" + kpisList["1"] + "',"
  571. updateSql += "`period_2_kpis`='" + kpisList["2"] + "',"
  572. updateSql += "`period_6_kpis`='" + kpisList["6"] + "',"
  573. updateSql += "`period_14_kpis`='" + kpisList["14"] + "',"
  574. updateSql += "`period_29_kpis`='" + kpisList["29"] + "',"
  575. updateSql += "`period_59_kpis`='" + kpisList["59"] + "',"
  576. updateSql += "`period_89_kpis`='" + kpisList["89"] + "',"
  577. updateSql += "`period_119_kpis`='" + kpisList["119"] + "' where id=" + function.Strval(adjustPeriodViewCampaignMap[keyTemp])
  578. db := dblogic.M("GAMES1").Exec(updateSql)
  579. if db.Error != nil {
  580. fmt.Print(updateSql)
  581. fmt.Println(db.Error)
  582. continue
  583. }
  584. if updateCnt%300 == 0 {
  585. fmt.Print("update cnt:300 time:\t")
  586. fmt.Println(time.Now().Unix())
  587. }
  588. }
  589. }
  590. }
  591. }
  592. }
  593. if insertTempCnt > 0 { //每300条 批量执行
  594. insertTempCnt = 0
  595. insertSql = strings.TrimSuffix(insertSql, ",")
  596. fmt.Print("insert begin:")
  597. fmt.Println(time.Now())
  598. dblogic.M("GAMES1").Exec(insertSql)
  599. fmt.Print("insert end:")
  600. fmt.Println(time.Now())
  601. insertSql = insertOrigin
  602. }
  603. fmt.Print("insertCnt:")
  604. fmt.Println(insertCnt)
  605. fmt.Print("updateCnt:")
  606. fmt.Println(updateCnt)
  607. return url
  608. }
  609. // 可交付数据 优化一次性请求多个设备 国家
  610. func Tracker2(stime string, etime string, user_token string, trackerGroup map[string][]string, dateType string) map[string]interface{} {
  611. kpis := "daus,installs,revenue" //daus、设备安装数、收入
  612. grouping := "trackers,countries,os_names"
  613. url := "https://api.adjust.com/kpis/v1/rv3fkx1a8em8?start_date=" + stime + "&end_date=" + etime + "&grouping=" + grouping + "&kpis=" + kpis + "&user_token=" + user_token + "&attribution_type=click"
  614. var saveDate string = ""
  615. if dateType == "day" {
  616. saveDate = stime
  617. } else if dateType == "week" {
  618. //周
  619. sdate, _ := function.Strtotime("2006-01-02", stime)
  620. edate, _ := function.Strtotime("2006-01-02", etime)
  621. saveDate = function.Date("20060102", sdate) + "~" + function.Date("20060102", edate)
  622. } else if dateType == "month" {
  623. //月
  624. sdate, _ := function.Strtotime("2006-01-02", stime)
  625. edate, _ := function.Strtotime("2006-01-02", etime)
  626. saveDate = function.Date("20060102", sdate) + "~" + function.Date("20060102", edate)
  627. }
  628. fmt.Print("request begin:")
  629. fmt.Println(time.Now())
  630. body := tool.Get(url)
  631. fmt.Print("request end:")
  632. fmt.Println(time.Now())
  633. //fmt.Println("body----------------------------------")
  634. //fmt.Println(body)
  635. var dat map[string]interface{}
  636. if err := json.Unmarshal([]byte(body), &dat); err != nil {
  637. for err != nil {
  638. time.Sleep(3 * time.Second)
  639. body := tool.Get(url)
  640. err = json.Unmarshal([]byte(body), &dat)
  641. }
  642. }
  643. var listMap map[string]string /*创建集合 */
  644. listMap = make(map[string]string)
  645. parameters, _ := dat["result_parameters"].(map[string]interface{})["trackers"]
  646. if parameters == nil {
  647. return make(map[string]interface{})
  648. }
  649. for _, v := range parameters.([]interface{}) {
  650. name := function.Strval(v.(map[string]interface{})["name"])
  651. token := function.Strval(v.(map[string]interface{})["token"])
  652. listMap[token] = name
  653. }
  654. //fmt.Println(listMap)
  655. //遍历方法二
  656. list := dat["result_set"].(map[string]interface{})["trackers"]
  657. if list == nil {
  658. return make(map[string]interface{})
  659. }
  660. //fmt.Println(list)
  661. //判断数据库是否存在,不存在则保存
  662. var tableName string = ""
  663. if dateType == "day" {
  664. tableName = "t_adjust"
  665. } else if dateType == "week" {
  666. //周
  667. tableName = "t_adjust_week"
  668. } else if dateType == "month" {
  669. //月
  670. tableName = "t_adjust_month"
  671. }
  672. insertCnt := 0
  673. insertTempCnt := 0
  674. insertSql := "insert into " + tableName + " (`date`,`countries`,`os_names`,`trackers_channel_token`,`trackers_channel_name`,`trackers_group_type`,`kpi_values`) values "
  675. updateCnt := 0
  676. updateSql := ""
  677. adjusts := []*tables.TAdjust{}
  678. dblogic.M("GAMES1").Table(tableName).Where("date = ?", saveDate).Find(&adjusts)
  679. adjustsMap := map[string]int{}
  680. for _, row := range adjusts {
  681. adjustsMap[row.Date+row.Countries+row.OsNames+row.TrackersChannelToken] = row.Id
  682. }
  683. for _, v := range list.([]interface{}) {
  684. token := function.Strval(v.(map[string]interface{})["token"])
  685. //fmt.Println(token)
  686. countries := v.(map[string]interface{})["countries"]
  687. if countries == nil {
  688. continue
  689. }
  690. for _, countryRow := range countries.([]interface{}) {
  691. //第一层国家
  692. country := function.Strval(countryRow.(map[string]interface{})["country"])
  693. //fmt.Println("国家:"+country)
  694. os_names := countryRow.(map[string]interface{})["os_names"]
  695. if os_names == nil {
  696. continue
  697. }
  698. for _, os_nameRow := range os_names.([]interface{}) {
  699. //第二层设备
  700. os_name := function.Strval(os_nameRow.(map[string]interface{})["os_name"])
  701. kpi_values := function.Strval(os_nameRow.(map[string]interface{})["kpi_values"])
  702. //if kpi_values == nil{
  703. // continue
  704. //}
  705. trackers_channel_name := listMap[token]
  706. trackers_group_type := "Organic_all"
  707. for key, _ := range trackerGroup { //通过 token 获取对应的 渠道 trackers_group_type
  708. //fmt.Println(value)
  709. if function.IsContain(trackerGroup[key], token) {
  710. trackers_group_type = key
  711. break
  712. }
  713. }
  714. //var count int
  715. var keyTemp string
  716. //通过 日期,国家,设备,token 拼接唯一 key
  717. keyTemp = saveDate + country + os_name + token
  718. if adjustsMap[keyTemp] == 0 { //key不存在,则添加
  719. //插入
  720. insertSql += "( '" + saveDate +
  721. "','" + country +
  722. "','" + os_name +
  723. "','" + token +
  724. "','" + trackers_channel_name +
  725. "','" + trackers_group_type +
  726. "','" + kpi_values +
  727. "'),"
  728. insertCnt++
  729. insertTempCnt++
  730. if insertTempCnt == 300 {
  731. insertTempCnt = 0
  732. insertSql = strings.TrimSuffix(insertSql, ",")
  733. fmt.Print("insert begin:")
  734. fmt.Println(time.Now())
  735. dblogic.M("GAMES1").Exec(insertSql)
  736. fmt.Print("insert end:")
  737. fmt.Println(time.Now())
  738. insertSql = "insert into " + tableName + " (`date`,`countries`,`os_names`,`trackers_channel_token`,`trackers_channel_name`,`trackers_group_type`,`kpi_values`) values "
  739. }
  740. } else { //存在,则更新
  741. updateSql = ""
  742. updateSql += "update " + tableName + " set "
  743. updateSql += "trackers_channel_name='" + trackers_channel_name + "',"
  744. updateSql += "trackers_group_type='" + trackers_group_type + "',"
  745. updateSql += "kpi_values='" + kpi_values + "',"
  746. updateSql = strings.TrimSuffix(updateSql, ",")
  747. //updateSql += " where `date`='"+saveDate+"'" + " and `countries`='"+country+"'" + " and `os_names`='"+os_name+"'" + " and `trackers_channel_token`='"+token+"';\n"
  748. updateSql += " where `id`='" + function.Strval(adjustsMap[keyTemp]) + "';"
  749. updateCnt++
  750. db := dblogic.M("GAMES1").Exec(updateSql)
  751. if db.Error != nil {
  752. fmt.Print(updateSql)
  753. fmt.Println(db.Error)
  754. continue
  755. }
  756. if updateCnt%300 == 0 {
  757. fmt.Print("update cnt:300 time:")
  758. fmt.Println(time.Now().Unix())
  759. }
  760. }
  761. }
  762. }
  763. }
  764. if insertTempCnt > 0 {
  765. insertSql = strings.TrimSuffix(insertSql, ",")
  766. fmt.Print("insert begin:")
  767. fmt.Println(time.Now())
  768. dblogic.M("GAMES1").Exec(insertSql)
  769. fmt.Print("insert end:")
  770. fmt.Println(time.Now())
  771. insertSql = ""
  772. }
  773. retMap := make(map[string]interface{})
  774. fmt.Print("insertCnt:")
  775. fmt.Println(insertCnt)
  776. fmt.Print("updateCnt:")
  777. fmt.Println(updateCnt)
  778. return retMap
  779. }
  780. // 可交付数据 只取到系列
  781. func TrackerCampaigns(date string) string {
  782. grouping := "networks,campaigns,countries,os_names"
  783. kpis := "daus,installs,revenue" //daus每日活跃用户数 installs安装 revenue收入
  784. url := "https://api.adjust.com/kpis/v1/rv3fkx1a8em8?start_date=" + date + "&end_date=" + date + "&grouping=" + grouping + "&kpis=" + kpis + "&user_token=" + user_token + "&attribution_type=click"
  785. fmt.Println(url)
  786. body := tool.Get(url)
  787. var dat map[string]interface{}
  788. if err := json.Unmarshal([]byte(body), &dat); err != nil {
  789. for err != nil {
  790. time.Sleep(3 * time.Second)
  791. body := tool.Get(url)
  792. err = json.Unmarshal([]byte(body), &dat)
  793. }
  794. }
  795. trackerGroup := TrackerGroup()
  796. list := dat["result_set"].(map[string]interface{})["networks"]
  797. if list == nil {
  798. return url
  799. }
  800. tableName := "t_adjust_period_campaigns"
  801. //获取日期为 date的全部数据
  802. adjustPeriodViewCampaign := []*tables.TAdjustPeriodViewCampaigns{}
  803. dblogic.M("GAMES1").Table(tableName).Where("date = ?", date).Find(&adjustPeriodViewCampaign)
  804. //遍历数据库中数据,组装成 key =》 id ( key 为 Date,Trackers_channel_token,Campaigns_token,Countries,OsNames 组成)
  805. adjustPeriodViewCampaignMap := map[string]int{}
  806. for _, row := range adjustPeriodViewCampaign {
  807. keyTemp := ""
  808. keyTemp += row.Date
  809. keyTemp += row.Trackers_channel_token
  810. keyTemp += row.Campaigns_token
  811. keyTemp += row.Countries
  812. keyTemp += row.OsNames
  813. adjustPeriodViewCampaignMap[keyTemp] = row.Id
  814. }
  815. updateCnt := 0
  816. updateSql := ""
  817. for _, v := range list.([]interface{}) {
  818. trackers_channel_token := function.Strval(v.(map[string]interface{})["token"])
  819. campaigns := v.(map[string]interface{})["campaigns"]
  820. if campaigns == nil {
  821. //fmt.Println("campaigns null")
  822. continue
  823. }
  824. for _, campaignsRow := range campaigns.([]interface{}) {
  825. campaigns_token := function.Strval(campaignsRow.(map[string]interface{})["token"])
  826. countries := campaignsRow.(map[string]interface{})["countries"]
  827. if countries == nil {
  828. //fmt.Println("countries null")
  829. continue
  830. }
  831. for _, countryRow := range countries.([]interface{}) {
  832. //第一层国家
  833. country := function.Strval(countryRow.(map[string]interface{})["country"])
  834. os_names := countryRow.(map[string]interface{})["os_names"]
  835. if os_names == nil {
  836. //fmt.Println("os_names null")
  837. continue
  838. }
  839. for _, os_nameRow := range os_names.([]interface{}) {
  840. //第二层设备
  841. os_name := function.Strval(os_nameRow.(map[string]interface{})["os_name"])
  842. //fmt.Println("设备:" + os_name)
  843. kpi_values := function.Strval(os_nameRow.(map[string]interface{})["kpi_values"])
  844. trackers_group_type := ""
  845. for key, _ := range trackerGroup {
  846. if function.IsContain(trackerGroup[key], trackers_channel_token) {
  847. trackers_group_type = key
  848. break
  849. }
  850. }
  851. if trackers_group_type == "Facebook" {
  852. //fmt.Println("Facebook continue")
  853. continue
  854. }
  855. updateCnt++
  856. keyTemp := date + trackers_channel_token + campaigns_token + country + os_name
  857. updateSql = "update " + tableName + " set `kpi_values`='" + kpi_values + "' where id=" + function.Strval(adjustPeriodViewCampaignMap[keyTemp])
  858. db := dblogic.M("GAMES1").Exec(updateSql)
  859. if db.Error != nil {
  860. fmt.Print(updateSql)
  861. fmt.Println(db.Error)
  862. continue
  863. }
  864. if updateCnt%300 == 0 {
  865. fmt.Print("update cnt:300 time:")
  866. fmt.Println(time.Now().Unix())
  867. }
  868. }
  869. }
  870. }
  871. }
  872. fmt.Print("updateCnt:")
  873. fmt.Println(updateCnt)
  874. return url
  875. }
  876. func PeriodViewTokens() []string {
  877. periodViewTokens := []string{}
  878. periodViewChannels := []string{"Facebook", "Google_ads", "Mintegral", "苹果商店页搜索广告", "TikTok"}
  879. trackerGroup := TrackerGroup()
  880. for _, channel := range periodViewChannels {
  881. for _, token := range trackerGroup[channel] {
  882. periodViewTokens = append(periodViewTokens, token)
  883. }
  884. }
  885. return periodViewTokens
  886. }
  887. // 同期群数据2 一次性请求多个设备 国家
  888. func Dates2(stime string, etime string, user_token string, trackerGroup map[string][]string, dateType string) {
  889. kpis := "retained_users,paying_users,revenue_total,paying_user_size"
  890. grouping := "trackers,countries,os_names"
  891. cohort_period_filter := "0,1,2,6,14,29,59,89,119"
  892. //https://api.adjust.com/kpis/v1/rv3fkx1a8em8/cohorts?start_date=2021-01-01&end_date=2021-01-31&grouping=trackers,countries,os_names&kpis=retained_users,paying_users,revenue_total&user_token=nDPDkox9PxGoisxoMm9Q&attribution_type=click&cohort_period_filter=0,1,2,6,14,29,59,89,119&reattributed=all
  893. url := "https://api.adjust.com/kpis/v1/rv3fkx1a8em8/cohorts?start_date=" + stime + "&end_date=" + etime + "&grouping=" + grouping + "&kpis=" + kpis + "&user_token=" + user_token + "&attribution_type=click" + "&cohort_period_filter=" + cohort_period_filter + "&reattributed=all"
  894. fmt.Print("request begin:")
  895. fmt.Println(time.Now())
  896. body := tool.Get(url)
  897. fmt.Print("request end:")
  898. fmt.Println(time.Now())
  899. var saveDate string = ""
  900. if dateType == "day" {
  901. saveDate = stime
  902. } else if dateType == "week" {
  903. //周
  904. sdate, _ := function.Strtotime("2006-01-02", stime)
  905. edate, _ := function.Strtotime("2006-01-02", etime)
  906. saveDate = function.Date("20060102", sdate) + "~" + function.Date("20060102", edate)
  907. } else if dateType == "month" {
  908. //月
  909. sdate, _ := function.Strtotime("2006-01-02", stime)
  910. edate, _ := function.Strtotime("2006-01-02", etime)
  911. saveDate = function.Date("20060102", sdate) + "~" + function.Date("20060102", edate)
  912. }
  913. var dat map[string]interface{}
  914. if err := json.Unmarshal([]byte(body), &dat); err != nil {
  915. for err != nil {
  916. time.Sleep(3 * time.Second)
  917. body := tool.Get(url)
  918. err = json.Unmarshal([]byte(body), &dat)
  919. }
  920. }
  921. var listMap map[string]string /*创建集合 */
  922. listMap = make(map[string]string)
  923. parameters, _ := dat["result_parameters"].(map[string]interface{})["trackers"]
  924. if parameters == nil {
  925. return
  926. }
  927. for _, v := range parameters.([]interface{}) {
  928. name := function.Strval(v.(map[string]interface{})["name"])
  929. token := function.Strval(v.(map[string]interface{})["token"])
  930. //fmt.Println("name:"+name)
  931. //fmt.Println("token:"+token)
  932. listMap[token] = name
  933. }
  934. list := dat["result_set"].(map[string]interface{})["trackers"]
  935. if list == nil {
  936. return
  937. }
  938. //判断数据库是否存在,不存在则保存
  939. var tableName string = ""
  940. if dateType == "day" {
  941. tableName = "t_adjust_period"
  942. } else if dateType == "week" {
  943. //周
  944. tableName = "t_adjust_period_week"
  945. } else if dateType == "month" {
  946. //月
  947. tableName = "t_adjust_period_month"
  948. }
  949. insertTemp, insertCnt := 0, 0
  950. insertSql := "insert into " + tableName + " (`date`,`countries`,`os_names`,`trackers_channel_token`,`trackers_channel_name`,`trackers_group_type`,`period_0_kpis`,`period_1_kpis`,`period_2_kpis`,`period_6_kpis`,`period_14_kpis`,`period_29_kpis`,`period_59_kpis`,`period_89_kpis`,`period_119_kpis`) values "
  951. updateCnt := 0
  952. updateSql := ""
  953. adjustsPeriod := []*tables.TAdjustPeriod{}
  954. dblogic.M("GAMES1").Table(tableName).Where("date = ?", saveDate).Find(&adjustsPeriod)
  955. adjustsPeriodMap := map[string]int{}
  956. for _, row := range adjustsPeriod {
  957. adjustsPeriodMap[row.Date+row.Countries+row.OsNames+row.TrackersChannelToken] = row.Id
  958. }
  959. for _, v := range list.([]interface{}) {
  960. token := function.Strval(v.(map[string]interface{})["token"])
  961. //fmt.Println(token)
  962. countries := v.(map[string]interface{})["countries"]
  963. if countries == nil {
  964. continue
  965. }
  966. for _, countryRow := range countries.([]interface{}) {
  967. //第一层国家
  968. country := function.Strval(countryRow.(map[string]interface{})["country"])
  969. //fmt.Println("国家:" + country)
  970. os_names := countryRow.(map[string]interface{})["os_names"]
  971. if os_names == nil {
  972. continue
  973. }
  974. for _, os_nameRow := range os_names.([]interface{}) {
  975. //第二层设备
  976. os_name := function.Strval(os_nameRow.(map[string]interface{})["os_name"])
  977. //fmt.Println("设备:" + os_name)
  978. var kpisList map[string]string /*创建集合 */
  979. kpisList = make(map[string]string)
  980. periods := os_nameRow.(map[string]interface{})["periods"]
  981. for _, pv := range periods.([]interface{}) {
  982. period := function.Strval(pv.(map[string]interface{})["period"])
  983. kpi_values := function.Strval(pv.(map[string]interface{})["kpi_values"])
  984. kpisList[period] = kpi_values
  985. }
  986. trackers_channel_name := listMap[token]
  987. trackers_group_type := "Organic_all"
  988. for key, _ := range trackerGroup {
  989. if function.IsContain(trackerGroup[key], token) {
  990. trackers_group_type = key
  991. break
  992. }
  993. }
  994. keyTemp := saveDate + country + os_name + token
  995. if adjustsPeriodMap[keyTemp] == 0 {
  996. insertCnt++
  997. insertTemp++
  998. insertSql += "('"
  999. insertSql += saveDate + "','"
  1000. insertSql += country + "','"
  1001. insertSql += os_name + "','"
  1002. insertSql += token + "','"
  1003. insertSql += trackers_channel_name + "','"
  1004. insertSql += trackers_group_type + "','"
  1005. insertSql += kpisList["0"] + "','"
  1006. insertSql += kpisList["1"] + "','"
  1007. insertSql += kpisList["2"] + "','"
  1008. insertSql += kpisList["6"] + "','"
  1009. insertSql += kpisList["14"] + "','"
  1010. insertSql += kpisList["29"] + "','"
  1011. insertSql += kpisList["59"] + "','"
  1012. insertSql += kpisList["89"] + "','"
  1013. insertSql += kpisList["119"] + "'),"
  1014. if insertTemp == 300 { //每300条 批量执行
  1015. insertTemp = 0
  1016. insertSql = strings.TrimSuffix(insertSql, ",")
  1017. fmt.Print("insert begin:")
  1018. fmt.Println(time.Now())
  1019. dblogic.M("GAMES1").Exec(insertSql)
  1020. fmt.Print("insert end:")
  1021. fmt.Println(time.Now())
  1022. insertSql = "insert into " + tableName + " (`date`,`countries`,`os_names`,`trackers_channel_token`,`trackers_channel_name`,`trackers_group_type`,`period_0_kpis`,`period_1_kpis`,`period_2_kpis`,`period_6_kpis`,`period_14_kpis`,`period_29_kpis`,`period_59_kpis`,`period_89_kpis`,`period_119_kpis`) values "
  1023. }
  1024. } else {
  1025. updateCnt++
  1026. updateSql = "update " + tableName + " set "
  1027. updateSql += "`trackers_channel_name` = '" + trackers_channel_name + "',"
  1028. updateSql += "`trackers_group_type` = '" + trackers_group_type + "',"
  1029. updateSql += "`period_0_kpis` = '" + kpisList["0"] + "',"
  1030. updateSql += "`period_1_kpis` = '" + kpisList["1"] + "',"
  1031. updateSql += "`period_2_kpis` = '" + kpisList["2"] + "',"
  1032. updateSql += "`period_6_kpis` = '" + kpisList["6"] + "',"
  1033. updateSql += "`period_14_kpis` = '" + kpisList["14"] + "',"
  1034. updateSql += "`period_29_kpis` = '" + kpisList["29"] + "',"
  1035. updateSql += "`period_59_kpis` = '" + kpisList["59"] + "',"
  1036. updateSql += "`period_89_kpis` = '" + kpisList["89"] + "',"
  1037. updateSql += "`period_119_kpis` = '" + kpisList["119"] + "'"
  1038. updateSql += " where id=" + function.Strval(adjustsPeriodMap[keyTemp])
  1039. db := dblogic.M("GAMES1").Exec(updateSql)
  1040. if db.Error != nil {
  1041. fmt.Print(updateSql)
  1042. fmt.Println(db.Error)
  1043. continue
  1044. }
  1045. if updateCnt%300 == 0 {
  1046. fmt.Print("update cnt:300 time:")
  1047. fmt.Println(time.Now().Unix())
  1048. }
  1049. }
  1050. }
  1051. }
  1052. }
  1053. if insertTemp > 0 { //每300条 批量执行
  1054. insertTemp = 0
  1055. insertSql = strings.TrimSuffix(insertSql, ",")
  1056. fmt.Print("insert begin:")
  1057. fmt.Println(time.Now())
  1058. dblogic.M("GAMES1").Exec(insertSql)
  1059. fmt.Print("insert end:")
  1060. fmt.Println(time.Now())
  1061. }
  1062. fmt.Print("insertCnt:")
  1063. fmt.Println(insertCnt)
  1064. fmt.Print("updateCnt:")
  1065. fmt.Println(updateCnt)
  1066. }
  1067. func getCountry() {
  1068. list := []tables.TCountryCode{}
  1069. dblogic.M("GAMES").Table("t_country_code").Find(&list)
  1070. }
  1071. type Periods struct {
  1072. Kpi_values []int64
  1073. Period int64
  1074. }
  1075. type OsNames struct {
  1076. Os_name string
  1077. Periods []Periods
  1078. }
  1079. type Countries struct {
  1080. Country string
  1081. Os_names []OsNames
  1082. }
  1083. type Creatives struct {
  1084. Name string
  1085. Token string
  1086. Countries []Countries
  1087. }
  1088. type Adgroups struct {
  1089. Name string
  1090. Token string
  1091. Creatives []Creatives
  1092. }
  1093. type Campaigns struct {
  1094. Name string
  1095. Token string
  1096. Adgroups []Adgroups
  1097. }
  1098. func PeriodViewNew(date string, grouping string, kpis string) map[string]interface{} {
  1099. // 根据 渠道, token
  1100. var params = make(map[string]string)
  1101. params["dimensions"] = "network,tracker_token,adgroup_id_network,creative_id_network,channel,os_name,country_code,campaign_id_network,campaign_network,adgroup_network"
  1102. params["metrics"] = "daus,installs,revenue,retained_users_d0,retained_users_d1,retained_users_d2,retained_users_d6,retained_users_d14,retained_users_d29,retained_users_d59,retained_users_d89,retained_users_d119,paying_users_d0,paying_users_d1,paying_users_d2,paying_users_d6,paying_users_d14,paying_users_d29,paying_users_d59,paying_users_d89,paying_users_d119,revenue_total_d0,revenue_total_d1,revenue_total_d2,revenue_total_d6,revenue_total_d14,revenue_total_d29,revenue_total_d59,revenue_total_d89,revenue_total_d119,paying_user_size_d0,paying_user_size_d1,paying_user_size_d2,paying_user_size_d6,paying_user_size_d14,paying_user_size_d29,paying_user_size_d59,paying_user_size_d89,paying_user_size_d119"
  1103. params["attribution_type"] = "click"
  1104. params["reattributed"] = "false"
  1105. params["app_token__in"] = "rv3fkx1a8em8"
  1106. params["country_code__in"] = "de"
  1107. params["date_period"] = fmt.Sprintf("%v:%v", date, date)
  1108. url := apiUrlNew
  1109. for pk, pv := range params {
  1110. url += fmt.Sprintf("%v=%v&", pk, pv)
  1111. }
  1112. headers := map[string]string{
  1113. "Authorization": "Bearer Tha-k75HDFTdG9WE_s58",
  1114. }
  1115. fmt.Println(url)
  1116. body := tool.GetWithHeaders(url, headers)
  1117. var dat map[string]interface{}
  1118. if err := json.Unmarshal([]byte(body), &dat); err != nil {
  1119. for err != nil {
  1120. time.Sleep(3 * time.Second)
  1121. body := tool.Get(url)
  1122. err = json.Unmarshal([]byte(body), &dat)
  1123. }
  1124. }
  1125. trackerGroup := TrackerGroup()
  1126. list := dat["result_set"].(map[string]interface{})["networks"]
  1127. if list == nil {
  1128. return map[string]interface{}{}
  1129. }
  1130. tableName := "t_adjust_period_view"
  1131. //获取日期为 date的全部数据
  1132. adjustPeriodView := []*tables.TAdjustPeriodView{}
  1133. dblogic.M("GAMES1").Table(tableName).Where("date = ?", date).Find(&adjustPeriodView)
  1134. //遍历数据库中数据,组装成 key =》 id ( key 为 Date,Trackers_channel_token,Campaigns_token,Adgroups_token,Creatives_token,Countries,OsNames 组成)
  1135. adjustPeriodViewMap := map[string]int{}
  1136. for _, row := range adjustPeriodView {
  1137. keyTemp := ""
  1138. keyTemp += row.Date
  1139. keyTemp += row.Trackers_channel_token
  1140. keyTemp += row.Campaigns_token
  1141. keyTemp += row.Adgroups_token
  1142. keyTemp += row.Creatives_token
  1143. keyTemp += row.Countries
  1144. keyTemp += row.OsNames
  1145. adjustPeriodViewMap[keyTemp] = row.Id
  1146. }
  1147. insertCnt, insertTempCnt := 0, 0
  1148. insertSql := "insert into " + tableName + " (" +
  1149. "`date`," +
  1150. "`trackers_channel_token`," +
  1151. "`trackers_channel_name`," +
  1152. "`trackers_group_type`," +
  1153. "`campaigns_token`," +
  1154. "`campaigns_name`," +
  1155. "`campaigns_id`," +
  1156. "`adgroups_token`," +
  1157. "`adgroups_name`," +
  1158. "`adgroups_id`," +
  1159. "`creatives_token`," +
  1160. "`creatives_name`," +
  1161. "`creatives_id`," +
  1162. "`countries`," +
  1163. "`os_names`," +
  1164. "`period_0_kpis`," +
  1165. "`period_1_kpis`," +
  1166. "`period_2_kpis`," +
  1167. "`period_6_kpis`," +
  1168. "`period_14_kpis`," +
  1169. "`period_29_kpis`," +
  1170. "`period_59_kpis`," +
  1171. "`period_89_kpis`," +
  1172. "`period_119_kpis`) values "
  1173. insertOrigin := insertSql
  1174. updateCnt := 0
  1175. updateSql := ""
  1176. periodViewTokens := PeriodViewTokens()
  1177. for _, v := range list.([]interface{}) {
  1178. trackers_channel_token := function.Strval(v.(map[string]interface{})["token"])
  1179. trackers_channel_name := function.Strval(v.(map[string]interface{})["name"])
  1180. if trackers_channel_token != "r2phf78" &&
  1181. trackers_channel_token != "ussdj6t" &&
  1182. trackers_channel_token != "6xxj7ry" &&
  1183. trackers_channel_token != "rs64xuy" &&
  1184. !function.IsContain(periodViewTokens, trackers_channel_token) {
  1185. fmt.Println(trackers_channel_token + " null 不是 FB & Google_ads & Mintegral & TikTok & asa")
  1186. continue
  1187. }
  1188. campaigns := v.(map[string]interface{})["campaigns"]
  1189. if campaigns == nil {
  1190. continue
  1191. }
  1192. for _, campaignsRow := range campaigns.([]interface{}) {
  1193. campaigns_token := function.Strval(campaignsRow.(map[string]interface{})["token"])
  1194. campaigns_name := function.Strval(campaignsRow.(map[string]interface{})["name"])
  1195. campaigns_id := function.RegularGetBrackets(campaigns_name) //正则匹配出扩展里面的数值
  1196. adgroups := campaignsRow.(map[string]interface{})["adgroups"]
  1197. if adgroups == nil {
  1198. continue
  1199. }
  1200. for _, adgroupsRow := range adgroups.([]interface{}) {
  1201. adgroups_token := function.Strval(adgroupsRow.(map[string]interface{})["token"])
  1202. adgroups_name := function.Strval(adgroupsRow.(map[string]interface{})["name"])
  1203. adgroups_id := function.RegularGetBrackets(adgroups_name) //正则匹配出扩展里面的数值
  1204. creatives := adgroupsRow.(map[string]interface{})["creatives"]
  1205. if creatives == nil {
  1206. continue
  1207. }
  1208. for _, creativesRow := range creatives.([]interface{}) {
  1209. creatives_token := function.Strval(creativesRow.(map[string]interface{})["token"])
  1210. creatives_name := function.Strval(creativesRow.(map[string]interface{})["name"])
  1211. creatives_id := function.RegularGetBrackets(creatives_name) //正则匹配出扩展里面的数值
  1212. if creatives_id == "" {
  1213. //fmt.Println("creatives_id null")
  1214. //continue
  1215. }
  1216. countries := creativesRow.(map[string]interface{})["countries"]
  1217. if countries == nil {
  1218. continue
  1219. }
  1220. for _, countryRow := range countries.([]interface{}) {
  1221. //第一层国家
  1222. country := function.Strval(countryRow.(map[string]interface{})["country"])
  1223. os_names := countryRow.(map[string]interface{})["os_names"]
  1224. if os_names == nil {
  1225. continue
  1226. }
  1227. for _, os_nameRow := range os_names.([]interface{}) {
  1228. //第二层设备
  1229. os_name := function.Strval(os_nameRow.(map[string]interface{})["os_name"])
  1230. var kpisList map[string]string /*创建集合 */
  1231. kpisList = make(map[string]string)
  1232. periods := os_nameRow.(map[string]interface{})["periods"]
  1233. for _, pv := range periods.([]interface{}) {
  1234. period := function.Strval(pv.(map[string]interface{})["period"])
  1235. kpi_values := function.Strval(pv.(map[string]interface{})["kpi_values"])
  1236. kpisList[period] = kpi_values
  1237. }
  1238. trackers_group_type := ""
  1239. for key, _ := range trackerGroup {
  1240. if function.IsContain(trackerGroup[key], trackers_channel_token) {
  1241. trackers_group_type = key
  1242. break
  1243. }
  1244. }
  1245. //判断数据库是否存在,不存在则保存
  1246. keyTemp := ""
  1247. keyTemp += date
  1248. keyTemp += trackers_channel_token
  1249. keyTemp += campaigns_token
  1250. keyTemp += adgroups_token
  1251. keyTemp += creatives_token
  1252. keyTemp += country
  1253. keyTemp += os_name
  1254. if adjustPeriodViewMap[keyTemp] == 0 {
  1255. insertCnt++
  1256. insertTempCnt++
  1257. insertSql += "('"
  1258. insertSql += date + "','"
  1259. insertSql += trackers_channel_token + "','"
  1260. insertSql += trackers_channel_name + "','"
  1261. insertSql += trackers_group_type + "','"
  1262. insertSql += campaigns_token + "','"
  1263. insertSql += strings.Replace(campaigns_name, "'", "\\'", -1) + "','"
  1264. insertSql += campaigns_id + "','"
  1265. insertSql += adgroups_token + "','"
  1266. insertSql += strings.Replace(adgroups_name, "'", "\\'", -1) + "','"
  1267. insertSql += adgroups_id + "','"
  1268. insertSql += creatives_token + "','"
  1269. insertSql += strings.Replace(creatives_name, "'", "\\'", -1) + "','"
  1270. insertSql += creatives_id + "','"
  1271. insertSql += country + "','"
  1272. insertSql += os_name + "','"
  1273. insertSql += kpisList["0"] + "','"
  1274. insertSql += kpisList["1"] + "','"
  1275. insertSql += kpisList["2"] + "','"
  1276. insertSql += kpisList["6"] + "','"
  1277. insertSql += kpisList["14"] + "','"
  1278. insertSql += kpisList["29"] + "','"
  1279. insertSql += kpisList["59"] + "','"
  1280. insertSql += kpisList["89"] + "','"
  1281. insertSql += kpisList["119"] + "'),"
  1282. if insertTempCnt == 300 { //每300条 批量执行
  1283. insertTempCnt = 0
  1284. insertSql = strings.TrimSuffix(insertSql, ",")
  1285. fmt.Print("insert begin:")
  1286. fmt.Println(time.Now())
  1287. dblogic.M("GAMES1").Exec(insertSql)
  1288. fmt.Print("insert end:")
  1289. fmt.Println(time.Now())
  1290. insertSql = insertOrigin
  1291. }
  1292. } else {
  1293. updateCnt++
  1294. updateSql = "update " + tableName + " set "
  1295. updateSql += "`trackers_channel_name` = '" + trackers_channel_name + "',"
  1296. updateSql += "`trackers_group_type` = '" + trackers_group_type + "',"
  1297. updateSql += "`campaigns_name` = '" + strings.Replace(campaigns_name, "'", "\\'", -1) + "',"
  1298. updateSql += "`campaigns_id` = '" + campaigns_id + "',"
  1299. updateSql += "`adgroups_name` = '" + strings.Replace(adgroups_name, "'", "\\'", -1) + "',"
  1300. updateSql += "`adgroups_id` = '" + adgroups_id + "',"
  1301. updateSql += "`creatives_name` = '" + strings.Replace(creatives_name, "'", "\\'", -1) + "',"
  1302. updateSql += "`creatives_id` = '" + creatives_id + "',"
  1303. updateSql += "`period_0_kpis` = '" + kpisList["0"] + "',"
  1304. updateSql += "`period_1_kpis` = '" + kpisList["1"] + "',"
  1305. updateSql += "`period_2_kpis` = '" + kpisList["2"] + "',"
  1306. updateSql += "`period_6_kpis` = '" + kpisList["6"] + "',"
  1307. updateSql += "`period_14_kpis` = '" + kpisList["14"] + "',"
  1308. updateSql += "`period_29_kpis` = '" + kpisList["29"] + "',"
  1309. updateSql += "`period_59_kpis` = '" + kpisList["59"] + "',"
  1310. updateSql += "`period_89_kpis` = '" + kpisList["89"] + "',"
  1311. updateSql += "`period_119_kpis` = '" + kpisList["119"] + "'"
  1312. updateSql += " where id=" + function.Strval(adjustPeriodViewMap[keyTemp])
  1313. db := dblogic.M("GAMES1").Exec(updateSql)
  1314. if db.Error != nil {
  1315. fmt.Print(updateSql)
  1316. fmt.Println(db.Error)
  1317. continue
  1318. }
  1319. if updateCnt%300 == 0 {
  1320. fmt.Print("update cnt:300 time:")
  1321. fmt.Println(time.Now().Unix())
  1322. }
  1323. }
  1324. }
  1325. }
  1326. }
  1327. }
  1328. }
  1329. }
  1330. if insertTempCnt > 0 { //每300条 批量执行
  1331. insertTempCnt = 0
  1332. insertSql = strings.TrimSuffix(insertSql, ",")
  1333. fmt.Print("insert begin:")
  1334. fmt.Println(time.Now())
  1335. dblogic.M("GAMES1").Exec(insertSql)
  1336. fmt.Print("insert end:")
  1337. fmt.Println(time.Now())
  1338. insertSql = insertOrigin
  1339. }
  1340. fmt.Print("insertCnt:")
  1341. fmt.Println(insertCnt)
  1342. fmt.Print("updateCnt:")
  1343. fmt.Println(updateCnt)
  1344. return map[string]interface{}{}
  1345. }
  1346. func ViewNew(date string, grouping string, kpis string) interface{} {
  1347. if date == "" {
  1348. date = "2021-04-01"
  1349. }
  1350. if grouping == "" {
  1351. grouping = "networks,campaigns,adgroups,creatives,countries,os_names"
  1352. }
  1353. if kpis == "" {
  1354. kpis = "daus,installs,revenue" //daus每日活跃用户数 installs安装 revenue收入
  1355. }
  1356. url := "https://api.adjust.com/kpis/v1/rv3fkx1a8em8?countries=de&start_date=" + date + "&end_date=" + date + "&grouping=" + grouping + "&kpis=" + kpis + "&user_token=" + user_token + "&attribution_type=click"
  1357. fmt.Println(url)
  1358. body := tool.Get(url)
  1359. var dat map[string]interface{}
  1360. if err := json.Unmarshal([]byte(body), &dat); err != nil {
  1361. for err != nil {
  1362. time.Sleep(3 * time.Second)
  1363. body := tool.Get(url)
  1364. err = json.Unmarshal([]byte(body), &dat)
  1365. }
  1366. }
  1367. return dat
  1368. list := dat["result_set"].(map[string]interface{})["networks"]
  1369. if list == nil {
  1370. return url
  1371. }
  1372. tableName := "t_adjust_period_view"
  1373. //获取日期为 date的全部数据
  1374. adjustPeriodView := []*tables.TAdjustPeriodView{}
  1375. dblogic.M("GAMES1").Table(tableName).Where("date = ?", date).Find(&adjustPeriodView)
  1376. //遍历数据库中数据,组装成 key =》 id ( key 为 Date,Trackers_channel_token,Campaigns_token,Adgroups_token,Creatives_token,Countries,OsNames 组成)
  1377. adjustPeriodViewMap := map[string]int{}
  1378. for _, row := range adjustPeriodView {
  1379. keyTemp := ""
  1380. keyTemp += row.Date
  1381. keyTemp += row.Trackers_channel_token
  1382. keyTemp += row.Campaigns_token
  1383. keyTemp += row.Adgroups_token
  1384. keyTemp += row.Creatives_token
  1385. keyTemp += row.Countries
  1386. keyTemp += row.OsNames
  1387. adjustPeriodViewMap[keyTemp] = row.Id
  1388. }
  1389. updateCnt := 0
  1390. updateSql := ""
  1391. periodViewTokens := PeriodViewTokens()
  1392. for _, v := range list.([]interface{}) {
  1393. trackers_channel_token := function.Strval(v.(map[string]interface{})["token"])
  1394. trackers_channel_name := function.Strval(v.(map[string]interface{})["name"])
  1395. if trackers_channel_token != "r2phf78" &&
  1396. trackers_channel_token != "ussdj6t" &&
  1397. trackers_channel_token != "6xxj7ry" &&
  1398. trackers_channel_token != "rs64xuy" &&
  1399. !function.IsContain(periodViewTokens, trackers_channel_token) {
  1400. //fmt.Println(trackers_channel_token + " null 不是 FB & Google_ads & Mintegral")
  1401. fmt.Println(trackers_channel_name + " 不是 FB & Google_ads & Mintegral & TikTok & asa")
  1402. continue
  1403. }
  1404. campaigns := v.(map[string]interface{})["campaigns"]
  1405. if campaigns == nil {
  1406. //fmt.Println("campaigns null")
  1407. continue
  1408. }
  1409. for _, campaignsRow := range campaigns.([]interface{}) {
  1410. campaigns_token := function.Strval(campaignsRow.(map[string]interface{})["token"])
  1411. //campaigns_name := function.Strval(campaignsRow.(map[string]interface{})["name"])
  1412. //campaigns_id := function.RegularGetBrackets(campaigns_name) //正则匹配出扩展里面的数值
  1413. //fmt.Println(campaigns_id)
  1414. adgroups := campaignsRow.(map[string]interface{})["adgroups"]
  1415. if adgroups == nil {
  1416. //fmt.Println("adgroups null")
  1417. continue
  1418. }
  1419. for _, adgroupsRow := range adgroups.([]interface{}) {
  1420. adgroups_token := function.Strval(adgroupsRow.(map[string]interface{})["token"])
  1421. //adgroups_name := function.Strval(adgroupsRow.(map[string]interface{})["name"])
  1422. //adgroups_id := function.RegularGetBrackets(adgroups_name) //正则匹配出扩展里面的数值
  1423. //fmt.Println(adgroups_id)
  1424. creatives := adgroupsRow.(map[string]interface{})["creatives"]
  1425. if creatives == nil {
  1426. //fmt.Println("creatives null")
  1427. continue
  1428. }
  1429. for _, creativesRow := range creatives.([]interface{}) {
  1430. creatives_token := function.Strval(creativesRow.(map[string]interface{})["token"])
  1431. countries := creativesRow.(map[string]interface{})["countries"]
  1432. if countries == nil {
  1433. //fmt.Println("countries null")
  1434. continue
  1435. }
  1436. for _, countryRow := range countries.([]interface{}) {
  1437. //第一层国家
  1438. country := function.Strval(countryRow.(map[string]interface{})["country"])
  1439. //fmt.Println("国家:" + country)
  1440. os_names := countryRow.(map[string]interface{})["os_names"]
  1441. if os_names == nil {
  1442. //fmt.Println("os_names null")
  1443. continue
  1444. }
  1445. for _, os_nameRow := range os_names.([]interface{}) {
  1446. //第二层设备
  1447. os_name := function.Strval(os_nameRow.(map[string]interface{})["os_name"])
  1448. //fmt.Println("设备:" + os_name)
  1449. kpi_values := function.Strval(os_nameRow.(map[string]interface{})["kpi_values"])
  1450. keyTemp := date + trackers_channel_token + campaigns_token + adgroups_token + creatives_token + country + os_name
  1451. updateCnt++
  1452. updateSql = "update " + tableName + " set "
  1453. updateSql += "`kpi_values` = '" + kpi_values + "'"
  1454. updateSql += " where id=" + function.Strval(adjustPeriodViewMap[keyTemp])
  1455. db := dblogic.M("GAMES1").Exec(updateSql)
  1456. if db.Error != nil {
  1457. fmt.Print(updateSql)
  1458. fmt.Println(db.Error)
  1459. continue
  1460. }
  1461. if updateCnt%300 == 0 {
  1462. fmt.Print("update cnt:300 time:")
  1463. fmt.Println(time.Now().Unix())
  1464. }
  1465. }
  1466. }
  1467. }
  1468. }
  1469. }
  1470. }
  1471. fmt.Print("updateCnt:")
  1472. fmt.Println(updateCnt)
  1473. return url
  1474. }