首页 > 解决方案 > Python keyError: 'stop_time' / Facebook API 运行文件

问题描述

我在运行 Python 文件以从 Facebook API 请求数据时遇到 KeyError:'stop_time'。有人遇到过吗?这可能是什么原因以及如何解决?

Traceback (most recent call last):
  File "C:/Users/LorealAdmin/PycharmProjects/LorealDigitalConnectors/Facebook2/runner.py", line 89, in <module>
    r.campaigns()
  File "C:/Users/LorealAdmin/PycharmProjects/LorealDigitalConnectors/Facebook2/runner.py", line 35, in campaigns
    self.db.ins_campaigins(self.api.campaigns(acc))
  File "C:\Users\LorealAdmin\PycharmProjects\LorealDigitalConnectors\Facebook2\db_conn.py", line 83, in ins_campaigins
    stop_time = camp['stop_time']
  File "C:\Anaconda3\lib\site-packages\facebookads\adobjects\abstractobject.py", line 48, in __getitem__
    return self._data[str(key)]
KeyError: 'stop_time'

非常感谢!

标签: pythonfacebook

解决方案


#encoding:utf8
try:
from api_conn import Facebook
except:
from .api_conn import Facebook
try:
from db_conn import Database
except:
from .db_conn import Database
try: from .fb_utilities import *
except:from fb_utilities import *
import time

class Runner:
"""Class that connecting api_conn and db_conn together. Main runner"""
def __init__(self):

    self.api = Facebook()
    self.db = Database()


def accounts(self):
     pass #DEPRECATED
    # print('Loading accounts')
    # accs = self.api.accounts()
    # self.db.ins_adaccounts(accs)

def campaigns(self):
    print('Loading campaigns')
    accs = self.db.get_adaccounts()
    accs = ad_accounts
    for acc in accs:
        time.sleep(2)
        print('slept 2 seconds')
        self.db.ins_campaigins(self.api.campaigns(acc))
        print(self.api.campaigns(acc))

def adsets(self):
    print('Loading ad sets')
    accs = ad_accounts#self.db.get_adaccounts()
    for acc in accs:
        time.sleep(2)
        self.db.ins_adsets(self.api.adsets(acc))


def ads(self):
    print('Loading ads')
    accs = ad_accounts#self.db.get_adaccounts()
    for acc in accs:
        time.sleep(2)
        self.db.ins_ads(self.api.ads(acc))

def creatives(self):
    print('Loading creatives')
    accs = ad_accounts#self.db.get_adaccounts()
    for acc in accs:
        time.sleep(2)
        self.db.ins_creative(self.api.creatives(acc))

def ad_statistics(self):
    print('Loading Ad Statistics')
    accs = ad_accounts# self.db.get_adaccounts()
    for acc in accs:
        print('now is loading account ----', acc)
        camps = self.db.get_campaigns_by_acc(acc)
        for camp in camps:
            # self.db.ins_ad_statistics(self.api.adaccount_stat(acc))
            time.sleep(2)
            # self.db.ins_ad_statistics(self.api.ad_statistics(camp))

def ad_statistics_cum(self):
    accs = self.db.get_adaccounts()
    for acc in accs:
        # camps = self.db.get_campaigns_by_acc(acc)
        # for camp in camps:
        self.db.ins_ad_statistics_cum(self.api.adaccount_stat_cum(acc))

def campaign_statistics_cum(self):
    print('Loading Campaign statistics')
    accs = self.db.get_adaccounts()
    for acc in accs:
        camps = self.db.get_campaigns_by_acc(acc)
        for camp in camps:

self.db.ins_statistics_cum_campaign(self.api.adaccount_stat_cum_campaign(acc))

if __name__ == '__main__':
r = Runner()
r.accounts()
r.campaigns()
r.adsets()
r.ads()
r.creatives()
r.ad_statistics()
r.campaign_statistics_cum()

推荐阅读