def campaign_status(campaign_id):
        mydb = mysql_adactivity_save.connectDB("dev_facebook_test")
        df_camp = pd.read_sql(
            "SELECT * FROM campaign_target WHERE campaign_id=%s" %
            (campaign_id),
            con=mydb)
        df_camp['charge_per_day'] = df_camp['target'] / df_camp['period']
        df_camp['campaign_bid'] = df_camp['spend_cap'] / df_camp['target']

        #         df_temp = pd.concat( df_camp[['campaign_id', 'charge_per_day', 'budget_per_day', 'daily_budget','']])
        insights = facebook_datacollector.Campaigns(
            campaign_id).get_campaign_insights()
        for insight in insights:
            spend = insight.get("spend")
            campaign_cpc = insight.get("cpc")
            campaign_charge = insight.get("clicks")
            impressions = insight.get("impressions")
            df = pd.DataFrame({
                'campaign_id': [campaign_id],
                'campaign_cpc': [campaign_cpc],
                'campaign_charge': [campaign_charge],
                'impressions': [impressions],
                'campaign_bid': [df_camp['campaign_bid'].iloc[0]],
                'spend': [spend],
                'daily_budget': [df_camp['budget_per_day'].iloc[0]],
                'charge_per_day': [df_camp['charge_per_day'].iloc[0]],
                'budget_per_day': [df_camp['budget_per_day'].iloc[0]]
            })
        df = df.convert_objects(convert_numeric=True)
        mydb.close()
        return df
def get_sorted_adset(campaign):
    mydb = mysql_adactivity_save.connectDB(DATABASE)
    try:
        df = pd.read_sql("select * from adset_score where campaign_id=%s" %
                         (campaign),
                         con=mydb)
        df = df[df.request_time.dt.date == DATE].sort_values(by=['score'],
                                                             ascending=False)
        adset_list = df['adset_id']
        assert adset_list, 'Empty List'
    except:
        df_camp = mysql_adactivity_save.get_campaign_target(campaign)
        charge_type = df_camp['charge_type'].iloc[0]
        adset_list = Campaigns(campaign, charge_type).get_adsets()
    return adset_list
def ga_optimal_weight(campaign_id):
    request_time = datetime.datetime.now().date()
    mydb = mysql_adactivity_save.connectDB("dev_facebook_test")
    df_weight = pd.read_sql(
        "SELECT * FROM optimal_weight WHERE campaign_id=%s " % (campaign_id),
        con=mydb)
    df_camp = pd.read_sql(
        "SELECT * FROM campaign_target WHERE campaign_id=%s " % (campaign_id),
        con=mydb)
    charge_type = df_camp['charge_type'].iloc[0]
    adset_list = facebook_datacollector.Campaigns(campaign_id,
                                                  charge_type).get_adsets()
    for adset_id in adset_list:

        #         print(ad_id)
        df = ObjectiveFunc.adset_status(adset_id)
        r = ObjectiveFunc.adset_fitness(df_weight, df)
        #         print('[score]', r, ad_id)

        df_final = pd.DataFrame(
            {
                'campaign_id': campaign_id,
                'adset_id': adset_id,
                'score': r,
                'request_time': request_time
            },
            index=[0])

        mysql_adactivity_save.intoDB("adset_score", df_final)


#         try:
# #             print(ad_id)
#             df = ObjectiveFunc.adset_status(ad_id)
#             r = ObjectiveFunc.adset_fitness( df_weight, df )
#             print('[score]', r)
#             df_ad=pd.read_sql("SELECT adset_id FROM ad_insights WHERE ad_id=%s LIMIT 1" %(ad_id), con=mydb)
#             adset_id = df_ad['adset_id'].iloc[0].astype(dtype=object)

#             df_final = pd.DataFrame({'campaign_id':campaign_id, 'adset_id':adset_id, 'ad_id':ad_id, 'score':r, 'request_time':request_time}, index=[0])

#             mysql_adactivity_save.intoDB("adset_score", df_final)
#         except:
#             pass
    mydb.close()
    return
    def adset_status(adset_id):
        mydb = mysql_adactivity_save.connectDB("dev_facebook_test")

        df = pd.DataFrame({
            'adset_id': [],
            'target': [],
            'impressions': [],
            'bid_amount': []
        })

        #         df_ad = pd.read_sql("SELECT * FROM ad_insights WHERE ad_id=%s ORDER BY request_time DESC LIMIT 1" %(ad_id), con=mydb)
        #         df_ad = df_ad.apply(pd.to_numeric)
        df_adset = pd.read_sql(
            "SELECT * FROM adset_insights WHERE adset_id=%s ORDER BY request_time DESC LIMIT 1"
            % (adset_id),
            con=mydb)
        df_camp = pd.read_sql(
            "SELECT * FROM campaign_target WHERE campaign_id=%s" %
            (df_adset['campaign_id'].iloc[0]),
            con=mydb)
        #         df_camp['charge_per_day'] = df_camp['target']/df_camp['campaign_days']
        df_temp = pd.merge(
            df_adset[[
                'campaign_id', 'adset_id', 'target', 'cost_per_target',
                'impressions'
            ]],
            df_adset[['adset_id', 'spend', 'bid_amount', 'daily_budget']],
            on=['adset_id'])
        df_camp['campaign_daily_budget'] = df_camp['daily_budget']
        df_status = pd.merge(
            df_temp,
            df_camp[['campaign_id', 'daily_charge', 'campaign_daily_budget']],
            on=['campaign_id'])
        df = pd.concat([df, df_status], ignore_index=True, sort=True)
        #         print(ad_id)
        #         print(df[['adset_id', 'charge', 'charge_cpc','bid_amount', 'impressions', 'spend']])
        mydb.close()
        return df
 def account_status(campaign_id):
     mydb = mysql_adactivity_save.connectDB("dev_facebook_test")
     df_camp = pd.read_sql(
         "SELECT * FROM campaign_target WHERE campaign_id=%s" %
         (campaign_id),
         con=mydb)
     df_camp['charge_per_day'] = df_camp['target'] / df_camp['period']
     df_camp['campaign_bid'] = df_camp['spend_cap'] / df_camp['target']
     charge_type = df_camp['charge_type'].iloc[0]
     acc_id = facebook_datacollector.Campaigns(
         campaign_id, charge_type).get_account_id()
     insights = facebook_datacollector.Accounts(
         "act_" + str(acc_id)).get_account_insights()
     if bool(insights):
         spend = int(insights.get("spend"))
         account_cpc = float(insights.get("cpc"))
         account_charge = int(insights.get("clicks"))
         impressions = int(insights.get("impressions"))
     else:
         spend = 0
         account_cpc = 0
         account_charge = 0
         impressions = 0
     df = pd.DataFrame({
         'campaign_id': [campaign_id],
         'campaign_cpc': [account_cpc],
         'campaign_charge': [account_charge],
         'impressions': [impressions],
         'campaign_bid': [df_camp['campaign_bid'].iloc[0]],
         'spend': [spend],
         'daily_budget': [df_camp['daily_budget'].iloc[0]],
         'charge_per_day': [df_camp['daily_charge'].iloc[0]],
         'budget_per_day': [df_camp['daily_budget'].iloc[0]]
     })
     df = df.convert_objects(convert_numeric=True)
     mydb.close()
     return df