1

所以有很多类似的问题,虽然我没有设法在任何一个中找到答案,所以我们来了。我正在尝试使用 Python 从 Facebook API 中提取一些数据,这是我得到的错误:

facebook_business.exceptions.FacebookRequestError: 

  Message: Call was not successful
  Method:  GET
  Path:    https://graph.facebook.com/v10.0/[hidden]/ads
  Params:  {'summary': 'true'}

  Status:  400
  Response:
    {
      "error": {
        "message": "(#2635) You are calling a deprecated version of the Ads API. Please update to the latest version: v11.0.",
        "type": "OAuthException",
        "code": 2635,
        "fbtrace_id": "[hidden]"
      }
    }

我直接进入我的 Facebook 个人资料中的应用程序设置,看起来像(图片相关)在此处输入图像描述

请注意,在错误消息v10.0中有路径,并且在应用程序配置文件中的任何更改 API 版本之前是v7.0,这很奇怪,是否还有其他一些 API 需要切换其版本?将那个切换到 v12.0(或 v11.0)并没有帮助,所以我真的不知道该怎么办了。

另一个重要注意事项是,此代码是 Matillion 中计划作业的一部分,并且在版本切换后,如果在本地运行,代码确实会返回数据,所以我的另一个预感是 Matillion 环境也需要进行一些更改.

代码如下所示:

from facebook_business.api import FacebookAdsApi
from facebook_business.adobjects.adaccount import AdAccount
from facebook_business.adobjects.adreportrun import AdReportRun
import time
from io import StringIO
import json
import boto3

access_token = [hidden]
app_secret = [hidden]
app_id = [hidden]


FacebookAdsApi.init(app_id, app_secret, access_token)

fb_account = AdAccount('[hidden]')

params = {'time_range': {'since': '2022-01-05', 'until': '2022-01-06'},
            'level':'ad',
            'action_breakdowns':['action_device','action_type'],
            'TimeIncrement':1,
             }
fields = [<a pretty big list of fields>]

ads=fb_account.get_ads()
async_job = fb_account.get_insights(params = params, fields = fields,is_async=True)
async_job.api_get()

while async_job[AdReportRun.Field.async_status] != 'Job Completed' or async_job[AdReportRun.Field.async_percent_completion] < 100:
        time.sleep(1)
        async_job.api_get()
time.sleep(1)
responce=async_job.get_result()


print(response)

如果我忘记提及一些细节,请随时提出任何问题,谢谢!

4

1 回答 1

1

默认情况下,您使用的 Facebook Python 模块不会随 Matillion 一起安装。我想一定有人按照这个 Matillion 指南安装了它们?也许它是很久以前完成的,在这种情况下,您可能只需要使用与更新的 Facebook API 对话的更新版本重新安装模块。

作为 Python 的替代方案,您还可以查看Facebook 广告查询组件,它是一个顶级的 Matillion 编排组件,不需要任何 Python 编码。根据文档,它使用 API 的 V11。如果您需要的数据在该组件的数据模型中,那么总体上它的工作量可能比手工编码要少。

于 2022-01-06T16:56:47.660 回答