# coding=utf-8 import os import json import sys def MaxEcpmFacebookAdId(dic_ad_json): facebook_pool = dic_ad_json["ad"]["interstitials"]["pools"]["facebook"] max = 0 max_ad_id = None for ad_id in facebook_pool: priority = facebook_pool[ad_id] if priority > max: max = priority max_ad_id = ad_id return max_ad_id def AddFacebookPlatformId(ad_json): # 取一个facebook的id,截取前半部分 facebook_ad_id = ad_json["ad"]["interstitials"]["pools_load_strategy"]["facebook"]["root"] arr_items = facebook_ad_id.split("_") facebook_bid_platform_id = arr_items[0] ad_json["ad"]["platform_ids"].insert(0, { "p": 9, "aid": facebook_bid_platform_id }) def GetMaxEcpmFacebookAdId(ad_json, type): pool = ad_json["ad"][type]["pools"]["facebook"] max = 0 max_ad_id = None for ad_id in pool: priority = pool[ad_id] if priority > max: max = priority max_ad_id = ad_id return max_ad_id def TransType(ad_json, type): max_ecpm_facebook_ad_id = GetMaxEcpmFacebookAdId(ad_json, type) # 删除pools ad_json["ad"][type]["pools"].__delitem__("facebook") # 删除load strategy ad_json["ad"][type]["pools_load_strategy"].__delitem__("facebook") # 增加bidder ad_json["ad"][type]["bidders"] = { "facebook": max_ecpm_facebook_ad_id } def GetPoolFromLoadStrategy(strategy): root = strategy["root"] strategys = strategy["strategy"] id_2 = strategys[root]["fail_next"] id_5 = strategys[root]["suc_next"] id_1 = strategys[id_2]["fail_next"] id_4 = strategys[id_5]["fail_next"] return { id_1: 1, id_2: 2, root: 3, id_4: 4, id_5: 5 } def TransBanner(ad_json): ad_json["ad"]["banners"] = { "pools": { "admob": GetPoolFromLoadStrategy(ad_json["ad"]["banners"]["load_strategy"]) }, "pools_load_strategy": { "admob": ad_json["ad"]["banners"]["load_strategy"] }, "pages": { "banner": { "pools": ["admob"], "ctrl": ad_json["ad"]["banners"]["ctrl"] } } } def TransAdJson(ad_json): AddFacebookPlatformId(ad_json) # TransBanner(ad_json) TransType(ad_json, "interstitials") TransType(ad_json, "videos") def PrintConfirmInfo(ad_json): print "ad.json版本升级为:{}".format(ad_json["version"]) print "ad.json中使用到的广告ID如下 -----------------------" print "banner" # banner_id_name_config = { # 1: "AM_B1_lv1", # 2: "AM_B1_lv2", # 3: "AM_B2_lv1", # 4: "AM_B2_lv2", # 5: "AM_B2_lv3", # } banner_pool = GetPoolFromLoadStrategy(ad_json["ad"]["banners"]["load_strategy"]) for ad_id in banner_pool: print "\t{}: {}".format(ad_id, banner_pool[ad_id]) types = ["interstitials", "videos"] for ad_type in types: print ad_type for pool_name in ad_json["ad"][ad_type]["pools"]: print "\t{}".format(pool_name) for ad_id in ad_json["ad"][ad_type]["pools"][pool_name]: print "\t\t{}: {}".format(ad_id, ad_json["ad"][ad_type]["pools"][pool_name][ad_id]) if ad_json["ad"][ad_type].has_key("bidders"): print "\tbidders" for platform in ad_json["ad"][ad_type]["bidders"]: print "\t\t{}: {}".format(platform, ad_json["ad"][ad_type]["bidders"][platform]) def main(): print "开始转换ad.json..." ad_json_path = sys.argv[1] print "开始处理 {}".format(ad_json_path) with open(ad_json_path) as f: ad_json = json.load(f) TransAdJson(ad_json) ad_json["version"] = "6.1.4" PrintConfirmInfo(ad_json) write_to_path = os.path.join(os.path.dirname(ad_json_path), "ad_bidding.json") with open(write_to_path, "w") as f: json.dump(ad_json, f) print "转换完成,使用前请修改文件名: {} -> {}".format(ad_json_path, write_to_path) if len(sys.argv) < 2: sys.stderr.write("错误\n使用方法:python ad_json_6.1.4.py /root/ad.json") else: main()