【发布时间】:2017-10-05 07:23:27
【问题描述】:
我正在尝试使用文件上传将音频文件发送给 Facebook Messenger 机器人中的用户。 官方文档说你可以通过终端中的 curl 命令来完成。 此命令有效:
curl \
-F 'recipient={"id":user_id}' \
-F 'message={"attachment":{"type":"audio", "payload":{}}}' \
-F 'filedata=@mymp3.mp3;type=audio/mp3' \
"https://graph.facebook.com/v2.6/me/messages?access_token=ACCESS_TOKEN"
其中 ACCESS_TOKEN 是我页面的令牌,“mymp3.mp3”是我要发送的文件。
问题 - 我如何在 python 中使用 requests 库做同样的事情?
我试过了:
with open("mymp3.mp3", "rb") as o:
payload = {
'recipient': "{id: 1336677726453307}",
'message': {'attachment': {'type': 'audio', 'payload':{}}},
'filedata':o, 'type':'audio/mp3'
}
files = {'recipient': {'id': '1336677726453307'},'filedata':o}
headers = {'Content-Type': 'audio/mp3'}
r = requests.post(fb_url, data=payload)
print r.text
我收到此错误:
{"error":{"message":"(#100) Message cannot be empty, must provide valid attachment or text","type":"OAuthException","code":100,"error_subcode":2018034,"fbtrace_id":"E5d95+ILnf5"}}
另外,试过这个:
import requests
from requests_toolbelt import MultipartEncoder
m = MultipartEncoder(
fields={
'recipient': {'id': '1336677726453307'},
'message': {'attachment': {'type': 'audio', 'payload':{}}},
'filedata':(open("mymp3.mp3", "rb"), 'audio/mp3')
}
)
headers = {'Content-Type': m.content_type}
r = requests.post(fb_url, data=m, headers=headers)
print r.text
我收到了这个错误: AttributeError: 'dict' 对象没有属性 'encode'
【问题讨论】:
-
只是 google 上的前 2 个结果 ;)
-
您尝试了哪些方法,目前有哪些问题?
-
@Guillaume 请查看已编辑的问题
标签: python facebook facebook-graph-api curl python-requests