使用access_token向Facebook的Graph API发出POST请求

时间:2018-11-05 21:22:57

标签: python python-3.x python-2.7 facebook-graph-api

Facebook有关为Leadgen创建测试线的文档相当乏味。但是,它们提供了一些有用的cURL命令,似乎可以完成工作:

curl \
-F "access_token=<ACCESS_TOKEN>" \
"https://graph.facebook.com/<API_VERSION>/<FORM_ID>/test_leads"

curl \
-F "field_data=[{'name': 'favorite_color?', 'values': ['yellow']}, {'name': 'email', 'values': ['test@test.com']}]" \
-F "custom_disclaimer_responses=[{'checkbox_key': 'my_checkbox', 'is_checked': true}]" \
-F "access_token=<ACCESS_TOKEN>" \
"https://graph.facebook.com/<API_VERSION>/<FORM_ID>/test_leads"

就像我说的那样,这对我有用。但是,我想知道如何使用Python的requests库及其post方法发出此请求。

这是我正在使用的代码:

token = "<MY_TOKEN"
url = "https://graph.facebook.com/<MY_API_VERSION>/<MY_FORM_ID>/test_leads"

r = requests.post(url, headers={'access_token': token})

我似乎无法通过使用Python(从Facebook返回"code":100,"error_subcode":33)来获得此请求,但是使用cURL可以很好地工作。我该怎么做才能使用我的Python脚本来使该请求正常工作。

编辑:结合我的问题如何在我的Post请求中传递访问令牌,我将如何传递在示例中显示的其他内容eh,field_data和{{1} }?

EDIT2:如果我使用URL custom_disclaimer_responses,则请求会顺利进行。我似乎无法通过标头传递它。

1 个答案:

答案 0 :(得分:1)

对于

curl \
-F "access_token=<ACCESS_TOKEN>" \
"https://graph.facebook.com/<API_VERSION>/<FORM_ID>/test_leads"

在python中,您可以做

import requests

files = {
    'access_token': (None, 'ACCESS_TOKEN'),
}

response = requests.post('https://graph.facebook.com/API_VERSION/FORM_ID/test_leads', files=files)

对于

curl \
-F "field_data=[{'name': 'favorite_color?', 'values': ['yellow']}, {'name': 'email', 'values': ['test@test.com']}]" \
-F "custom_disclaimer_responses=[{'checkbox_key': 'my_checkbox', 'is_checked': true}]" \
-F "access_token=<ACCESS_TOKEN>" \
"https://graph.facebook.com/<API_VERSION>/<FORM_ID>/test_leads"

您可以在python中做

import requests

files = {
    'field_data': (None, '[ {'name': 'favorite_color?', 'values': ['yellow'] }, {'name': 'email', 'values': ['test@test.com'] } ]'),
    'custom_disclaimer_responses': (None, '[ { 'checkbox_key': 'my_checkbox', 'is_checked': 'true' } ]'),
    'access_token': (None, 'ACCESS_TOKEN'),
}

response = requests.post('https://graph.facebook.com/API_VERSION/FORM_ID/test_leads', files=files)