feat: add MediaGo channel (backfill 08-20~09-06, 30 records) + daily auto-update

This commit is contained in:
王源
2026-09-08 22:47:54 +08:00
parent 6c23b5beac
commit fb24195233
4 changed files with 606 additions and 1 deletions
+4
View File
@@ -7,3 +7,7 @@ backfill.log
bigo_test.py
bigo_refresh.py
bigo_backfill.py
mediago_probe.py
mediago_backfill.py
mediago_matches.json
mediago_backfill.log
+1 -1
View File
@@ -1 +1 @@
{"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlA0SkRvOUx1emlkeUVoZlF6SG1qbHRKR0R5bC81UXNKVzBZMDhkTmkrTHM9In0.eyJhdWQiOlsib3BlbmFwaSJdLCJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbInJlYWQiXSwiZXhwIjoxNzg4OTQyNDA1LCJhdXRob3JpdGllcyI6WyJST0xFX0FETUlOIl0sImp0aSI6IjYzOTA5OTk5LTcwNDYtNDY1OC1iMzI5LTFhZWUyOGRmNTEyYiIsImNsaWVudF9pZCI6IjI2MDMyNTY0NDIyMTIwNDA2MTAwNDgifQ.Wj1KeLNE5DUXBkVhIYcFbVUaXevhy6g7fydyHennSmvKCBFFtZrsrq81EaAKJeST0fJdHVrfTj47wUAa_Z3VEQtCD7n6io50qo9o3VYjY6WetLlNWec--nYFiDoYbVN1vFjaPxi44BxUn32rIZScxQvZEhMxyxthn67KLnmlQi9_1smS5thnKdNUryC7iN_FmD4TwvD7dr4lU4P2VQJXyUDABFP7yXIf_zrhg22pn37zMIpBx9YDMxnhgZbxx-EiJ_kw_r3ANHvgN9Bl0QkXbj4pRLpeB0PLX0pjo9DKYZib4fSTP9Q6S_wq2eDd7_pLWYuxf8gc9bEV2SvnJGxC1w", "token_type": "bearer", "refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlA0SkRvOUx1emlkeUVoZlF6SG1qbHRKR0R5bC81UXNKVzBZMDhkTmkrTHM9In0.eyJhdWQiOlsib3BlbmFwaSJdLCJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbInJlYWQiXSwiYXRpIjoiNjM5MDk5OTktNzA0Ni00NjU4LWIzMjktMWFlZTI4ZGY1MTJiIiwiZXhwIjoxNzkxNDQ4MDA1LCJhdXRob3JpdGllcyI6WyJST0xFX0FETUlOIl0sImp0aSI6IjYxM2NlYjY2LWY4YmQtNGE0MS1hNDVjLTkyMzFiYTEzZTU2MyIsImNsaWVudF9pZCI6IjI2MDMyNTY0NDIyMTIwNDA2MTAwNDgifQ.N9-uw7G1tukQyVB0fRdvXWRC4s5o2BYzD1aUDX20XpITWJE4HKLICUkkVQFTL-RUy0Kpup14GcbpLXyE_W6vb9CJmvxsHQ8mdoDYe-QxOOeKGad2mmwNLl1UR8aIAXMs7GQE2yUfUC30FQnM8rC5fHXYWj00C-Q-YQ0xRgvK_p3SNpz9QIkoVp7JeGCpNT0cFVgMvroU5QC6KIUPILbHeYlrMYUzSOiD0CBvQkqfTusPXRj_qfW0CeMHFt0rizLaUKlTx1oXZQ9AtgSss28GSNXuPumTtG87LCIngBLWzdnB-jHepjfVhXg4k8hbE8RMhf2BYJ1lXAtE2sHUyDJIIA", "expires_in": 86399, "scope": "read", "jti": "63909999-7046-4658-b329-1aee28df512b"}
{"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlA0SkRvOUx1emlkeUVoZlF6SG1qbHRKR0R5bC81UXNKVzBZMDhkTmkrTHM9In0.eyJhdWQiOlsib3BlbmFwaSJdLCJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbInJlYWQiXSwiZXhwIjoxNzg4OTY1MTI4LCJhdXRob3JpdGllcyI6WyJST0xFX0FETUlOIl0sImp0aSI6IjgyMzIyYTFkLTFmZTQtNDA2Ny05MTM1LTg2M2ZlZjAzMWUxNCIsImNsaWVudF9pZCI6IjI2MDMyNTY0NDIyMTIwNDA2MTAwNDgifQ.I0EQigC2GTHdVKxiCdfXEiq7lEppIly53soQkvcc66AXfYHAaRwr41gFdpjR0pudI7lUbl9_sMzRq3IHIQs4LUmy9p3Zqx9YW9WV6GTAiw3HL4UEt92-j2wxtqEGus21NejP42IHU155lP_RQC726PX5Jjy_mf4cAlzj0o0MxIabTgP2jntT6Y3tpY9Xq851-t2bFflRxGddhjJKikqJbfT2P85eXcnmv3rWVlcxVQAkz0_wctKVGy27RHliQL7gkimjBpOQdx07sVWPqiBLL0aNHHrMvbF2E9V4XtH8uhNlyQy55yo1VtvCSd8TTvtbKhySnoAuQbfQH9UzP9AZDQ", "token_type": "bearer", "refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlA0SkRvOUx1emlkeUVoZlF6SG1qbHRKR0R5bC81UXNKVzBZMDhkTmkrTHM9In0.eyJhdWQiOlsib3BlbmFwaSJdLCJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbInJlYWQiXSwiYXRpIjoiODIzMjJhMWQtMWZlNC00MDY3LTkxMzUtODYzZmVmMDMxZTE0IiwiZXhwIjoxNzkxNDcwNzI4LCJhdXRob3JpdGllcyI6WyJST0xFX0FETUlOIl0sImp0aSI6ImI5MmY1NDg0LTY1NWMtNGQ1Yi1hMjRiLTZiZDFlNTk0NzM0NCIsImNsaWVudF9pZCI6IjI2MDMyNTY0NDIyMTIwNDA2MTAwNDgifQ.Kf-bBcgOYd5ZyL8VMu1un0lqJGB4zjA8YvTj-riZ7BKdZH49cEwnk6JCeqkgSXm1tSUWwnmW89Og1EkteiUMcJNtXHDejehGPdtKCsqgZPtL06O_flbbdLW8SlBEarvLUNxMj1_ELXTJ9kdZPUVVGig7oXSzLah2B8MISejnyD9LF_iGZL6Rq8NE0YlJgqZRjXN2Js7qUN6TWSGBpcNBI0Lh5iDFqVVojejuzatTLkOUWxKhBX40LteQgYjB_JD1zhAxtjtUGqZWy17H8qHhDTW9dPP-9tsGFCKGuRxRvEaPFExOi7OacT9hBdpZ65E_C0mZ1k0BLqqH26kUabVrQg", "expires_in": 86399, "scope": "read", "jti": "82322a1d-1fe4-4067-9135-863fef031e14"}
+512
View File
@@ -2079,6 +2079,22 @@
"cvr": 0.0,
"spend": 0.0
},
{
"date": "2026-08-20",
"channel": "MediaGo",
"campid": "91546637",
"offer_name": "91546637_IGG_RU_20260820",
"product": "IGG (Lords Mobile)",
"pkg": "com.igg.android.lordsmobile",
"location": "RU",
"bid_type": "",
"impression": 38616,
"clicks": 369,
"conversions": 2,
"ctr": 0.00956,
"cvr": 0.00542,
"spend": 1.58
},
{
"date": "2026-08-20",
"channel": "Mintegral",
@@ -2207,6 +2223,22 @@
"cvr": 0.0,
"spend": 0.0
},
{
"date": "2026-08-21",
"channel": "MediaGo",
"campid": "91546637",
"offer_name": "91546637_IGG_RU_20260820",
"product": "IGG (Lords Mobile)",
"pkg": "com.igg.android.lordsmobile",
"location": "RU",
"bid_type": "",
"impression": 384,
"clicks": 3,
"conversions": 0,
"ctr": 0.00781,
"cvr": 0.0,
"spend": 0.05
},
{
"date": "2026-08-21",
"channel": "Mintegral",
@@ -2783,6 +2815,54 @@
"cvr": 0.0225,
"spend": 4.61
},
{
"date": "2026-08-26",
"channel": "MediaGo",
"campid": "91546637",
"offer_name": "91546637_IGG_RU_20260820",
"product": "IGG (Lords Mobile)",
"pkg": "com.igg.android.lordsmobile",
"location": "RU",
"bid_type": "",
"impression": 15914,
"clicks": 5954,
"conversions": 46,
"ctr": 0.37414,
"cvr": 0.00773,
"spend": 30.15
},
{
"date": "2026-08-26",
"channel": "MediaGo",
"campid": "91546640",
"offer_name": "91546640_xczyw_HK_260820",
"product": "灵犀互动",
"pkg": "com.qookkagames.xczyw.gp.hk",
"location": "HK",
"bid_type": "",
"impression": 56,
"clicks": 0,
"conversions": 0,
"ctr": 0.0,
"cvr": 0.0,
"spend": 0.0
},
{
"date": "2026-08-26",
"channel": "MediaGo",
"campid": "91546639",
"offer_name": "91546639_xczyw_TW_260820",
"product": "灵犀互动",
"pkg": "com.sialiagames.xczyw.gp.tw",
"location": "TW",
"bid_type": "",
"impression": 10,
"clicks": 0,
"conversions": 0,
"ctr": 0.0,
"cvr": 0.0,
"spend": 0.0
},
{
"date": "2026-08-26",
"channel": "Mintegral",
@@ -2927,6 +3007,54 @@
"cvr": 0.0343,
"spend": 24.68
},
{
"date": "2026-08-27",
"channel": "MediaGo",
"campid": "91546637",
"offer_name": "91546637_IGG_RU_20260820",
"product": "IGG (Lords Mobile)",
"pkg": "com.igg.android.lordsmobile",
"location": "RU",
"bid_type": "",
"impression": 24500,
"clicks": 4215,
"conversions": 91,
"ctr": 0.17204,
"cvr": 0.02159,
"spend": 19.55
},
{
"date": "2026-08-27",
"channel": "MediaGo",
"campid": "91546640",
"offer_name": "91546640_xczyw_HK_260820",
"product": "灵犀互动",
"pkg": "com.qookkagames.xczyw.gp.hk",
"location": "HK",
"bid_type": "",
"impression": 131,
"clicks": 0,
"conversions": 0,
"ctr": 0.0,
"cvr": 0.0,
"spend": 0.0
},
{
"date": "2026-08-27",
"channel": "MediaGo",
"campid": "91546639",
"offer_name": "91546639_xczyw_TW_260820",
"product": "灵犀互动",
"pkg": "com.sialiagames.xczyw.gp.tw",
"location": "TW",
"bid_type": "",
"impression": 17,
"clicks": 0,
"conversions": 0,
"ctr": 0.0,
"cvr": 0.0,
"spend": 0.0
},
{
"date": "2026-08-27",
"channel": "Mintegral",
@@ -3039,6 +3167,38 @@
"cvr": 0.0568,
"spend": 24.31
},
{
"date": "2026-08-28",
"channel": "MediaGo",
"campid": "91546640",
"offer_name": "91546640_xczyw_HK_260820",
"product": "灵犀互动",
"pkg": "com.qookkagames.xczyw.gp.hk",
"location": "HK",
"bid_type": "",
"impression": 121,
"clicks": 1,
"conversions": 0,
"ctr": 0.00826,
"cvr": 0.0,
"spend": 0.01
},
{
"date": "2026-08-28",
"channel": "MediaGo",
"campid": "91546639",
"offer_name": "91546639_xczyw_TW_260820",
"product": "灵犀互动",
"pkg": "com.sialiagames.xczyw.gp.tw",
"location": "TW",
"bid_type": "",
"impression": 21,
"clicks": 0,
"conversions": 0,
"ctr": 0.0,
"cvr": 0.0,
"spend": 0.0
},
{
"date": "2026-08-28",
"channel": "Mintegral",
@@ -3183,6 +3343,38 @@
"cvr": 0.0909,
"spend": 23.9
},
{
"date": "2026-08-29",
"channel": "MediaGo",
"campid": "91546640",
"offer_name": "91546640_xczyw_HK_260820",
"product": "灵犀互动",
"pkg": "com.qookkagames.xczyw.gp.hk",
"location": "HK",
"bid_type": "",
"impression": 126,
"clicks": 2,
"conversions": 0,
"ctr": 0.01587,
"cvr": 0.0,
"spend": 0.01
},
{
"date": "2026-08-29",
"channel": "MediaGo",
"campid": "91546639",
"offer_name": "91546639_xczyw_TW_260820",
"product": "灵犀互动",
"pkg": "com.sialiagames.xczyw.gp.tw",
"location": "TW",
"bid_type": "",
"impression": 15,
"clicks": 0,
"conversions": 0,
"ctr": 0.0,
"cvr": 0.0,
"spend": 0.0
},
{
"date": "2026-08-29",
"channel": "Mintegral",
@@ -3295,6 +3487,38 @@
"cvr": 0.0543,
"spend": 24.73
},
{
"date": "2026-08-30",
"channel": "MediaGo",
"campid": "91546640",
"offer_name": "91546640_xczyw_HK_260820",
"product": "灵犀互动",
"pkg": "com.qookkagames.xczyw.gp.hk",
"location": "HK",
"bid_type": "",
"impression": 148,
"clicks": 3,
"conversions": 0,
"ctr": 0.02027,
"cvr": 0.0,
"spend": 0.01
},
{
"date": "2026-08-30",
"channel": "MediaGo",
"campid": "91546639",
"offer_name": "91546639_xczyw_TW_260820",
"product": "灵犀互动",
"pkg": "com.sialiagames.xczyw.gp.tw",
"location": "TW",
"bid_type": "",
"impression": 19,
"clicks": 1,
"conversions": 0,
"ctr": 0.05263,
"cvr": 0.0,
"spend": 0.02
},
{
"date": "2026-08-30",
"channel": "Mintegral",
@@ -3439,6 +3663,38 @@
"cvr": 0.0288,
"spend": 23.74
},
{
"date": "2026-08-31",
"channel": "MediaGo",
"campid": "91546640",
"offer_name": "91546640_xczyw_HK_260820",
"product": "灵犀互动",
"pkg": "com.qookkagames.xczyw.gp.hk",
"location": "HK",
"bid_type": "",
"impression": 108,
"clicks": 0,
"conversions": 0,
"ctr": 0.0,
"cvr": 0.0,
"spend": 0.0
},
{
"date": "2026-08-31",
"channel": "MediaGo",
"campid": "91546639",
"offer_name": "91546639_xczyw_TW_260820",
"product": "灵犀互动",
"pkg": "com.sialiagames.xczyw.gp.tw",
"location": "TW",
"bid_type": "",
"impression": 15,
"clicks": 0,
"conversions": 0,
"ctr": 0.0,
"cvr": 0.0,
"spend": 0.0
},
{
"date": "2026-08-31",
"channel": "Mintegral",
@@ -3551,6 +3807,38 @@
"cvr": 0.0093,
"spend": 16.05
},
{
"date": "2026-09-01",
"channel": "MediaGo",
"campid": "91546640",
"offer_name": "91546640_xczyw_HK_260820",
"product": "灵犀互动",
"pkg": "com.qookkagames.xczyw.gp.hk",
"location": "HK",
"bid_type": "",
"impression": 464,
"clicks": 218,
"conversions": 0,
"ctr": 0.46983,
"cvr": 0.0,
"spend": 6.35
},
{
"date": "2026-09-01",
"channel": "MediaGo",
"campid": "91546639",
"offer_name": "91546639_xczyw_TW_260820",
"product": "灵犀互动",
"pkg": "com.sialiagames.xczyw.gp.tw",
"location": "TW",
"bid_type": "",
"impression": 40,
"clicks": 7,
"conversions": 0,
"ctr": 0.175,
"cvr": 0.0,
"spend": 0.18
},
{
"date": "2026-09-01",
"channel": "Mintegral",
@@ -3631,6 +3919,54 @@
"cvr": 0.0,
"spend": 0.0
},
{
"date": "2026-09-02",
"channel": "MediaGo",
"campid": "91546640",
"offer_name": "91546640_xczyw_HK_260820",
"product": "灵犀互动",
"pkg": "com.qookkagames.xczyw.gp.hk",
"location": "HK",
"bid_type": "",
"impression": 1498,
"clicks": 849,
"conversions": 0,
"ctr": 0.56676,
"cvr": 0.0,
"spend": 27.24
},
{
"date": "2026-09-02",
"channel": "MediaGo",
"campid": "91546639",
"offer_name": "91546639_xczyw_TW_260820",
"product": "灵犀互动",
"pkg": "com.sialiagames.xczyw.gp.tw",
"location": "TW",
"bid_type": "",
"impression": 90,
"clicks": 48,
"conversions": 0,
"ctr": 0.53333,
"cvr": 0.0,
"spend": 1.38
},
{
"date": "2026-09-02",
"channel": "MediaGo",
"campid": "91546640",
"offer_name": "91546640_xczyw_HK_260820",
"product": "灵犀互动",
"pkg": "com.qookkagames.xczyw.gp.hk",
"location": "CN",
"bid_type": "",
"impression": 3,
"clicks": 3,
"conversions": 0,
"ctr": 1.0,
"cvr": 0.0,
"spend": 0.01
},
{
"date": "2026-09-02",
"channel": "Mintegral",
@@ -3743,6 +4079,54 @@
"cvr": 0.0,
"spend": 0.0
},
{
"date": "2026-09-03",
"channel": "MediaGo",
"campid": "91546640",
"offer_name": "91546640_xczyw_HK_260820",
"product": "灵犀互动",
"pkg": "com.qookkagames.xczyw.gp.hk",
"location": "HK",
"bid_type": "",
"impression": 596,
"clicks": 312,
"conversions": 0,
"ctr": 0.52349,
"cvr": 0.0,
"spend": 3.3
},
{
"date": "2026-09-03",
"channel": "MediaGo",
"campid": "91546639",
"offer_name": "91546639_xczyw_TW_260820",
"product": "灵犀互动",
"pkg": "com.sialiagames.xczyw.gp.tw",
"location": "TW",
"bid_type": "",
"impression": 60,
"clicks": 11,
"conversions": 0,
"ctr": 0.18333,
"cvr": 0.0,
"spend": 0.25
},
{
"date": "2026-09-03",
"channel": "MediaGo",
"campid": "91546640",
"offer_name": "91546640_xczyw_HK_260820",
"product": "灵犀互动",
"pkg": "com.qookkagames.xczyw.gp.hk",
"location": "CN",
"bid_type": "",
"impression": 2,
"clicks": 1,
"conversions": 0,
"ctr": 0.5,
"cvr": 0.0,
"spend": 0.01
},
{
"date": "2026-09-03",
"channel": "Mintegral",
@@ -3871,6 +4255,38 @@
"cvr": 0.0,
"spend": 0.0
},
{
"date": "2026-09-04",
"channel": "MediaGo",
"campid": "91546640",
"offer_name": "91546640_xczyw_HK_260820",
"product": "灵犀互动",
"pkg": "com.qookkagames.xczyw.gp.hk",
"location": "HK",
"bid_type": "",
"impression": 129,
"clicks": 25,
"conversions": 0,
"ctr": 0.1938,
"cvr": 0.0,
"spend": 0.09
},
{
"date": "2026-09-04",
"channel": "MediaGo",
"campid": "91546639",
"offer_name": "91546639_xczyw_TW_260820",
"product": "灵犀互动",
"pkg": "com.sialiagames.xczyw.gp.tw",
"location": "TW",
"bid_type": "",
"impression": 38,
"clicks": 14,
"conversions": 0,
"ctr": 0.36842,
"cvr": 0.0,
"spend": 0.57
},
{
"date": "2026-09-04",
"channel": "Mintegral",
@@ -3967,6 +4383,38 @@
"cvr": 0.0,
"spend": 0.0
},
{
"date": "2026-09-05",
"channel": "MediaGo",
"campid": "91546640",
"offer_name": "91546640_xczyw_HK_260820",
"product": "灵犀互动",
"pkg": "com.qookkagames.xczyw.gp.hk",
"location": "HK",
"bid_type": "",
"impression": 118,
"clicks": 19,
"conversions": 0,
"ctr": 0.16102,
"cvr": 0.0,
"spend": 0.04
},
{
"date": "2026-09-05",
"channel": "MediaGo",
"campid": "91546639",
"offer_name": "91546639_xczyw_TW_260820",
"product": "灵犀互动",
"pkg": "com.sialiagames.xczyw.gp.tw",
"location": "TW",
"bid_type": "",
"impression": 79,
"clicks": 33,
"conversions": 0,
"ctr": 0.41772,
"cvr": 0.0,
"spend": 0.48
},
{
"date": "2026-09-05",
"channel": "Mintegral",
@@ -4079,6 +4527,38 @@
"cvr": 0.0,
"spend": 0.0
},
{
"date": "2026-09-06",
"channel": "MediaGo",
"campid": "91546639",
"offer_name": "91546639_xczyw_TW_260820",
"product": "灵犀互动",
"pkg": "com.sialiagames.xczyw.gp.tw",
"location": "TW",
"bid_type": "",
"impression": 144,
"clicks": 80,
"conversions": 0,
"ctr": 0.55556,
"cvr": 0.0,
"spend": 1.21
},
{
"date": "2026-09-06",
"channel": "MediaGo",
"campid": "91546640",
"offer_name": "91546640_xczyw_HK_260820",
"product": "灵犀互动",
"pkg": "com.qookkagames.xczyw.gp.hk",
"location": "HK",
"bid_type": "",
"impression": 120,
"clicks": 36,
"conversions": 0,
"ctr": 0.3,
"cvr": 0.0,
"spend": 0.06
},
{
"date": "2026-09-06",
"channel": "Mintegral",
@@ -4175,6 +4655,38 @@
"cvr": 0.0,
"spend": 0.0
},
{
"date": "2026-09-07",
"channel": "MediaGo",
"campid": "91546639",
"offer_name": "91546639_xczyw_TW_260820",
"product": "灵犀互动",
"pkg": "com.sialiagames.xczyw.gp.tw",
"location": "TW",
"bid_type": "",
"impression": 39,
"clicks": 21,
"conversions": 0,
"ctr": 0.53846,
"cvr": 0.0,
"spend": 0.39
},
{
"date": "2026-09-07",
"channel": "MediaGo",
"campid": "91546640",
"offer_name": "91546640_xczyw_HK_260820",
"product": "灵犀互动",
"pkg": "com.qookkagames.xczyw.gp.hk",
"location": "HK",
"bid_type": "",
"impression": 31,
"clicks": 4,
"conversions": 0,
"ctr": 0.12903,
"cvr": 0.0,
"spend": 0.0
},
{
"date": "2026-09-07",
"channel": "Mintegral",
+89
View File
@@ -190,4 +190,93 @@ json.dump(out, open("mtg_data.json","w"), ensure_ascii=False, indent=2)
print(f"[update] Bigo 合并后共 {len(out)} 条,已写入 mtg_data.json")
PYEOF
# ============ MediaGo 每日更新 ============
python3 - <<'PYEOF'
import json, os, time, urllib.request, urllib.parse, urllib.error
from datetime import date, timedelta
AUTH_URL = "https://api.mediago.com/manage/api/v1/access_token"
COST_URL = "https://api.mediago.com/report/api/v1/cost/daily"
TOKENS = [
"YWNjb3VundF8zmu5wjlv1vcRwbpdqaCugRvQKslUg9kQH4XnrNXefCbtGDcC",
"YWNjb3VundF8XrY8TwaXlX6pJDLnmfqmGgZT654Hh6rBRH9Cj9GzPXpO48BW",
"YWNjb3VundF89iFLKQQHlvwxnhVbWvchTAz009Zcjw7jTkOPzCDC3oLK0RGO",
"YWNjb3VundF815Lb3KpFWB8pnajnDZwL8Aw0YHpquAqUPWl78NKSaSigRBsY",
"YWNjb3VundF8SKbXp3ceGoHmS9SyMBleK2bIglGThBhoHly8yPoYOP8jZtww",
"YWNjb3VundF80DXnMfSwD4LWsV1hVVSA2j5FZQsWMSTQbJ6lTZIUhhrQZ9c6",
"YWNjb3VundF8gK0LuXHCZkNyC4R14Adayu4j1xnNJMzxvu1hokiwUPNOPJxS",
"YWNjb3VundF82rld59cRZIn53Uf0NhkWdcGIdNzOSRCZrkyj81xemBTQrOmi",
"YWNjb3VundF86E54f6seADTvrVjgeY3mrFNYsTn4jKVH5G5UyixyKkJi7T1S",
"YWNjb3VundF8MCmSFzV7LO4VRrxpJME8YrZCb6MyLp5KhRz4Q3crCjsDxPvI",
"YWNjb3VundF8tKh2Lye5ehjWsrSQUBTq6L4caohAKvG71qJVSOkMKDCKcKGu",
"YWNjb3VundF8xZYwIg4AFeVlTmrjBovgjxCSsHxYenyTTNbnNo1a0gIgs75V",
"YWNjb3VundF8QcNhks2O2ObIVmVXoIr1fuPPGTQ34YsaE0idvLVqTM5bSjbr",
"YWNjb3VundF8JtqahIBkypktae5H98q3PYjFXYPzqukmwY2wIOYqLSrYg0JQ",
"YWNjb3VundF8x4GsJSnSBns6y5tVGZRlDdC0w40k1ApVlj8v9cme64KNHmKq",
"YWNjb3VundF8GbE7ycPaH0fSozZ80v38jC00qdJB5YJRJJeqdy4DomjKG2ns",
"YWNjb3VundF83KP9txx57PNlElIa61g7vi7QQ1BTw4nlyPn6Tw8P4bXfX5IT",
"YWNjb3VundF8CDELpJV0axNw1AH4Pb7N1yfoe9HzyL0u9XQEnW3tgXVj1rbB",
"YWNjb3VundF8AzmnXydKyjDthsIx7BaYn6xof2lRh4pdJRTJT8qmupaLi7pX",
"YWNjb3VundF8PwLbajYpTYLe2dVhm1EX8seXxsPJlbpkxT8LhSONHhffW48Z",
"YWNjb3VundF8OGELq8i2wxXDw2kniuY9wp9nRz6xvoDU5jfFo2vsiUeoO2MV",
"YWNjb3VundF8u5aQbeM0LrTQcxc3t4DcbvZp1kBoDueP0q0rMjDPvLefG3WR",
]
camps = json.load(open("campaigns.json"))
mg = {c["campid"]: c for c in camps if c.get("channel") == "MediaGo"}
mg_ids = list(mg.keys())
if not mg:
print("[update] MediaGo 无目标 campid,跳过"); raise SystemExit(0)
PKGS = ",".join(sorted({c["pkg"] for c in mg.values()}))
target = (date.today() - timedelta(days=1)).isoformat()
def get_token(api_token):
req = urllib.request.Request(AUTH_URL, data=json.dumps({"api_token": api_token}).encode(),
headers={"Content-Type": "application/json"}, method="POST")
with urllib.request.urlopen(req, timeout=40) as r:
return json.loads(r.read().decode())["data"]["AccessToken"]
def cost_daily(tok):
p = [("dimension","campaign"),("tz","UTC+8"),("app_ids",PKGS),
("start_date",target),("end_date",target),("page_idx",0),("page_size",100)]
req = urllib.request.Request(COST_URL + "?" + urllib.parse.urlencode(p),
headers={"Authorization":"Bearer "+tok}, method="GET")
with urllib.request.urlopen(req, timeout=60) as r:
d = json.loads(r.read().decode())
return d.get("data",{}).get("list") or [] if d.get("code")==0 else []
new_rows = []
for api_token in TOKENS:
try:
tok = get_token(api_token)
lst = cost_daily(tok)
except Exception:
continue
for r in lst:
cn = r.get("campaign_name","")
cid = next((c for c in mg_ids if cn.startswith(c) or c in cn), None)
if not cid: continue
imp=int(r.get("imp") or 0); clk=int(r.get("click") or 0); cv=int(r.get("cv") or 0); sp=float(r.get("spend") or 0)
if imp==0 and clk==0 and sp==0: continue
rec = mg[cid]
new_rows.append({
"date": r.get("date"), "channel":"MediaGo", "campid":cid,
"offer_name":cn, "product":rec["product"], "pkg":rec["pkg"],
"location":(r.get("geo") or "").upper(), "bid_type":"",
"impression":imp, "clicks":clk, "conversions":cv,
"ctr":round(clk/imp,5) if imp else 0.0, "cvr":round(cv/clk,5) if clk else 0.0,
"spend":round(sp,2),
})
time.sleep(0.3)
print(f"[update] MediaGo 新增匹配 {len(new_rows)} 条 ({target})")
existing = json.load(open("mtg_data.json")) if os.path.exists("mtg_data.json") else []
merged = {(r["date"],r["campid"],r["location"],r.get("channel","")): r for r in existing}
for r in new_rows:
merged[(r["date"],r["campid"],r["location"],r["channel"])] = r
out = sorted(merged.values(), key=lambda x:(x["date"], x.get("channel",""), -x["impression"]))
json.dump(out, open("mtg_data.json","w"), ensure_ascii=False, indent=2)
print(f"[update] MediaGo 合并后共 {len(out)} 条,已写入 mtg_data.json")
PYEOF
echo "[update] $(date '+%Y-%m-%d %H:%M:%S') 完成"