Exemplo n.º 1
0
def get_campaigns(query):
    urllib3.disable_warnings()
    campaigns = list()
    dst_url = tool.FB_HOST_URL + os.environ["act_id"] + '/campaigns?{}'.format(query)
    while True:
        try:
            html = requests.get(dst_url, verify=False).text
            json_out = json.loads(html)
            if 'data' not in json_out:
                time.sleep(5)
            else:
                for node in json_out['data']:
                    campaign_id = node['id']
                    adset_id = node['adsets']['data'][0]['id']
                    ad_id = node['adsets']['data'][0]['ads']['data'][0]['id']
                    campaigns.append((campaign_id, adset_id, ad_id))
                if 'paging' in json_out:
                    if 'next' in json_out['paging']:
                        dst_url = json_out['paging']['next']
                    else:
                        break
                else:
                    break
        except Exception as e:
            log.logger.info(str(e))
            log.log_exp()
            time.sleep(60)
    return campaigns
Exemplo n.º 2
0
def online_check():
    # 获取状态为ACTIVE的广告数量
    online_count = cur_index['active'] + cur_index['pending']
    set_size = int(os.environ["init_ads_size"])
    if bb.delivery_status == "off":
        set_size = 0
    else:
        set_size = int(round(set_size*math.pow((5-bb.blood_control_coef)/4, 3), 0))
    log.logger.info("online ads:" + str(online_count))
    if online_count < set_size:
        ready_to_create = set_size - online_count
        log.logger.info("ready to create " + str(ready_to_create) + " ads.")
        try:
            if bb.blood_control_coef >= 2:
                log.logger.info('directly apply...')
                real_n = mother.create_new_ads(ready_to_create)
                mongo.update_delivery_data(cur_index['today'], 0, 0, 0, 0, 0, online_count,
                                           cur_index['paused'], real_n, 0, 0, cur_index['gt6'])
            else:
                need_awake_num = round(ready_to_create)
                real_awake_num = awake(need_awake_num)
                log.logger.info('awake '+str(real_awake_num)+' ads.')
                real_n = mother.create_new_ads(ready_to_create - real_awake_num)
                mongo.update_delivery_data(cur_index['today'], 0, 0, 0, 0, 0, online_count,
                                           cur_index['paused'], real_n, real_awake_num, 0, cur_index['gt6'])
        except Exception as e:
            log.logger.info("create ads exception:" + str(e))
            log.log_exp()
Exemplo n.º 3
0
def status_check():
    # 去掉状态为 In Review 且发布时间超过4小时的广告
    pending_campaigns = ds.snap_data.pending_campaigns
    disapproved_campaigns = ds.snap_data.disapproved_campaigns
    need_remove_campaigns = []
    need_remove_campaigns_cmd_type = []
    need_remove_ads = []
    if len(pending_campaigns) > 0:
        time_now = datetime.datetime.now(tool.tz).strftime('%Y-%m-%d %H:%M:%S')
        new_date = datetime.datetime.strptime(time_now, '%Y-%m-%d %H:%M:%S')
        ads_time = mongo.get_campaigns_create_time(pending_campaigns)
        for record in ads_time:
            old_date = datetime.datetime.strptime(record['create_time'], '%Y-%m-%d %H:%M:%S')
            diff_val = new_date - old_date
            if diff_val.seconds / 3600 + diff_val.days * 24 >= 4:
                need_remove_campaigns.append(record['campaign_id'])
                need_remove_campaigns_cmd_type.append('DELETED')
                need_remove_ads.append(record['ad_id'])
    if len(need_remove_campaigns) > 0:
        ntp.control_campaign(need_remove_campaigns, cmd_type=need_remove_campaigns_cmd_type)
        mongo.remove_ads(need_remove_ads)
        log.logger.info(" remove "+str(len(need_remove_campaigns)) +
                        " campaigns for staying In Review status over 4 hours.")
    pending_campaigns_count = len(pending_campaigns) - len(need_remove_campaigns)
    # 发现状态为 Not Approved 的广告触发报警机制
    if len(disapproved_campaigns) > 0:
        message = "discover " + str(len(disapproved_campaigns)) + " ads Not Approved. from : " + os.environ["name"]
        try:
            sms_service.gsm_message(message)
            log.logger.info(message)
        except Exception as e:
            log.logger.info(str(e))
            log.log_exp()
    return pending_campaigns_count, len(need_remove_campaigns)
Exemplo n.º 4
0
def control_campaign(campaign_ids, cmd_type):
    loop = asyncio.get_event_loop()
    try:
        loop.run_until_complete(run(loop, campaign_ids, cmd_type))
    except Exception as e:
        log.log_exp()
        raise e
Exemplo n.º 5
0
 def work(self, dict_key):
     while True:
         try:
             req_out = requests.post(os.environ["facebook_service"], data=self.data_dict[dict_key], headers=tool.HEADERS)
             self.result[dict_key] = json.loads(req_out.text)
             break
         except Exception as e:
             log.logger.info(str(e))
             log.log_exp()
             time.sleep(20)
Exemplo n.º 6
0
def period_control():
    data = {
        "delt_name": os.environ["name"],
        "utc8_datetime": tool.get_cur_date(),
        "period": "12"
    }
    try:
        req_out = requests.post(os.environ["period_blood_service"], data=json.dumps(data))
        json_out = json.loads(req_out.text)
        for element in json_out:
            if not mongo.check_prize(element['ad_id']) and not mongo.check_period(element['ad_id']):
                if element['ad_id'] in bb.ads_group_blood:
                    # 针对活跃的广告,周期回血
                    bb.set_blood(element['ad_id'], element['backBlood'], 0)
                    mongo.blood_return(element['ad_id'], element['backBlood'], 'period')
                    log.logger.info("周期回血 -> ad_id(" + element['ad_id'] + ") add blood:" + str(element['backBlood']))
    except Exception as e:
        log.logger.info("period blood exception:"+str(e))
        log.log_exp()
Exemplo n.º 7
0
def update_bid_amount(ad_set_id, bid_amount):
    url = tool.FB_HOST_URL + ad_set_id
    data = tool.compose({'bid_amount': bid_amount}, is_utf8=True)
    while True:
        try:
            req_out = requests.post(url, data=data)
            log.logger.info(req_out.text)
        except Exception as e:
            log.logger.info(e)
            log.log_exp()
            time.sleep(60)
        else:
            json_out = json.loads(req_out.text)
            if 'success' in json_out and json_out['success']:
                log.logger.info("update bid success!")
                log.logger.info('adset ' + ad_set_id + ' update bid amount to ' + str(bid_amount))
                break
            else:
                log.logger.info("update bid failure!")
                time.sleep(60)