Я использовал python, чтобы написать инструмент автоматизации, чтобы получать данные с нескольких платформ для моей базы данных и выводить индивидуальный отчет своему партнеру каждый день. Однако я столкнулся с одной проблемой: иногда я получаю предупреждение
"KeyError:" ['omni_complete_registration', 'omni_complete_purchase'] "not in index" при использовании API маркетинга FB.
I причина в том, что эти два столбца не появляются в отчете за один день, когда я использую API для получения «AdsInsights.Field.actions».
Сначала я использовал pandas, чтобы извлечь больше столбцов из «AdsInsights». Field.actions "и удалить столбцы" действия ". Во-вторых, я переиндексирую все столбцы, которые я получил, чтобы соответствовать порядку таблицы моей базы данных fb-insight. В этой части иногда возникали проблемы, когда указанный в моем коде столбец c, соответствующий размерам таблицы fb-insight-таблицы моего БД, не отображается в сегодняшнем столбце AdsInsights.Field.actions.
Я хочу, чтобы мой код мог пренебречь отсутствием указанных столбцов c или дать им значение NULL в качестве значения, если эти столбцы не отображены сегодня, и автоматически работать каждый день автоматически.
Вот часть моего кода: A. API_FB_insight
def createCsvResult(df_insights):
for index, row in df_insights.iterrows():
actions = row['actions']
if type(actions) != float:
for action in actions:
df_insights.loc[index, action['action_type']] = str(action['value'])
df_insights = df_insights.drop(['actions'], axis=1)
df_insights["PlatForm"] = "Facebook"
df_insights["Adv_Category"] = "Facebook_ads"
df_insights["Plat_Rev"] = 0
df_insights = df_insights[['PlatForm','date_start', 'date_stop', 'Adv_Category', \
'account_id', 'account_name', 'campaign_id', 'campaign_name', \
'adset_id', 'adset_name', 'ad_id', 'ad_name', \
'impressions', 'inline_link_click_ctr', 'inline_link_clicks', \
'spend', 'Plat_Rev', 'cpc', 'cpm' , 'omni_purchase' , \
'omni_add_to_cart' , 'omni_complete_registration']]
B.csvTofb
cursor = mydb.cursor()
mydb.set_character_set('utf8')
cursor.execute('SET NAMES utf8;')
cursor.execute('SET CHARACTER SET utf8;')
cursor.execute('SET character_set_connection=utf8;')
csv_data = csv.reader(open(csv_file))
row_count = 0
for row in csv_data:
if row_count != 0:
cursor.execute('INSERT IGNORE INTO fb_insight_report(PlatForm ,date_start , date_stop , Adv_Category, account_id , account_name , campaign_id , campaign_name ,adset_id , adset_name , ad_id , ad_name , impressions , inline_link_click_ctr , inline_link_clicks , spend , Plat_Rev, cpc , cpm , omni_purchase , omni_add_to_cart , omni_complete_registration) VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)' ,row)
row_count += 1
mydb.commit()
cursor.close()
Плз, помогите разобраться с проблемой ie, искренне благодарю.