首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用JSON存储Facebook广告集的Python和创建计时器

用JSON存储Facebook广告集的Python和创建计时器
EN

Stack Overflow用户
提问于 2015-10-29 16:59:04
回答 2查看 471关注 0票数 0

我是Python新手,我试图写一个脚本来控制Facebook的营销API中的一项活动的预算。您不需要真正了解Facebook营销平台就可以帮助我,因为这主要是一个与Python相关的问题,因为我对Python并不熟悉,也不知道如何编写这段代码。

代码语言:javascript
复制
#==========specify account ID in which the campaign you want to budget control resides=========================
AD_ACCOUNT_ID = 'act_4534633563'
#===============================================================================

campaign = Campaign(34635645764574)
fields = [
    AdSet.Field.name,
    AdSet.Field.lifetime_budget,
]
adsets = campaign.get_ad_sets(fields=fields)

with open('data.json', 'w') as f:
    for adset in adsets:
        print(adset[AdSet.Field.name])
        json.dump(adset, f)

结果:

代码语言:javascript
复制
Traceback (most recent call last):
  File "C:\Python27\Scripts\JSonTest1.py", line 50, in <module>
    json.dump(adset, f)
  File "C:\Python27\Lib\json\__init__.py", line 189, in dump
    for chunk in iterable:
  File "C:\Python27\Lib\json\encoder.py", line 442, in _iterencode
    o = _default(o)
  File "C:\Python27\Lib\json\encoder.py", line 184, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <AdSet> {
    "id": "534534533454353",
    "lifetime_budget": "50000",
    "name": "US, CA, BR, PL, CN, IN, PK, SA, DE, AR, VE, JP, EG - 14+ - Copy"
} is not JSON serializable

这个脚本应该允许通过在一天开始时将给定的竞选广告集的id和生命周期预算存储到JSON中来控制活动级别的预算。然后,这个脚本应该每六小时轮询一次生存期预算,以便在一天开始时(每天早上都存储在JSON文件中),将当前生存期(实时数据值)预算减去生命周期预算。如果所有广告集生命周期的累积预算达到用户指定的当天的活动预算,则活动将暂停一天,然后在第二天重新启动。

我有几个问题.

  1. 如何克服这个JSON问题,它说我要存储的数据是不可序列化的?
  2. 如何存储/读取JSON对象,从而可以减去生存期预算?
  3. 我可以用Python做些什么,以便脚本每天运行,运行一整天,然后在一天结束时结束。
EN

回答 2

Stack Overflow用户

发布于 2017-02-12 20:16:54

sdk使用自己的dict值作为对象。使用python的内置函数,隐蔽到str。另外,你真的不需要使用Json转储,你可以把str转换成csv,然后转换成熊猫df。

代码语言:javascript
复制
 me = objects.AdUser(fbid='me')
    my_accounts = (me.get_ad_accounts())
`   my_account = my_accounts[0]
    a = str(my_account)
票数 1
EN

Stack Overflow用户

发布于 2015-10-29 17:06:38

不能序列化自定义的对象。相反,您可以使用所需的值创建python字典,然后将其序列化:

代码语言:javascript
复制
  for adset in adsets:
    print(adset[AdSet.Field.name])
    adset_json = {'name': adset[AdSet.Field.name], 
                  'budget': adset[AdSet.Field.lifetime_budget]}
    json.dump(adset_json, f)

用JSON存储和读取非常简单: json.dump()和json.load()

对于每天运行脚本,我建议使用linux机器(或虚拟机)并设置Cron作业(Cron用于调度linux中的任务)。我确信在windows中有一种类似的方法,但我不知道如何做到这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33420351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档