Использование access_token для отправки запроса POST в API Graph Facebook - PullRequest
0 голосов
/ 06 ноября 2018

Документация Facebook по созданию тестового провода для свинца довольно скудна. Тем не менее, они предоставляют некоторые команды 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 (возвращая "code":100,"error_subcode":33 из Facebook), но он прекрасно работает, используя cURL. Что я могу сделать, чтобы этот запрос работал, используя мой скрипт на Python.

РЕДАКТИРОВАТЬ: В связи с моим вопросом о том, как передать токен доступа с моим запросом Post, как бы я мог передать другие вещи, которые они показывают в своем примере, например, field_data и custom_disclaimer_responses?

EDIT2: если я использую URL "https://graph.facebook.com/<MY_API>/<MY_FORM_ID>/test_leads?access_token="+token, запрос проходит легко и просто. Я просто не могу передать это через заголовки.

1 Ответ

0 голосов
/ 07 ноября 2018

Для

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

в питоне вы можете сделать

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"

в питоне вы можете сделать

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)
...