使用python sdk阅读facebook消息

时间:2016-02-02 15:43:32

标签: python facebook

我正在尝试使用python脚本阅读页面的facebook对话。使用此代码

import facebook

at = "page access token"
pid = "page id"
api = facebook.GraphAPI( at )
p = api.get_object( 'me/conversations')
print p

我收到一个包含以下内容的词典

{'paging': {'next': 'https://graph.facebook.com/v2.5/1745249635693902/conversations?access_token=<my_access_token>&limit=25&until=1454344040&__paging_token=<my_access_token>', 'previous': 'https://graph.facebook.com/v2.5/1745249635693902/conversations?access_token=<my_access_token>&limit=25&since=1454344040&__paging_token=<my_access_token>'}, 'data': [{'link': '/Python-1745249635693902/manager/messages/?mercurythreadid=user%3A100000386799941&threadid=mid.1454344039847%3A2e3ac25e0302042916&folder=inbox', 'id': 't_mid.1454344039847:2e3ac25e0302042916', 'updated_time': '2016-02-01T16:27:20+0000'}]}

那些领域是什么?我怎样才能得到消息的文本?

编辑:我尝试通过添加

来询问“消息”字段
    msg = api.get_object( p['data'][0]['id']+'/messages')
    print msg

但它只返回相同的字段。我已经在API文档中搜索了一段时间,但我没有找到任何有用的信息。甚至可以使用python读取Facebook页面对话的消息内容吗?

1 个答案:

答案 0 :(得分:6)

我自己找到了答案;问题没有得到很好的解决,也与我正在寻找的问题不符。

我想获取一个页面的facebook对话消息的内容。在facebook图形API文档之后,这可以通过询问对话({page-id} / conversation),然后是所述对话中的消息({conversation-id} / messages,https://developers.facebook.com/docs/graph-api/reference/v2.5/conversation/messages)来实现,最后要求邮件本身应返回包含所有字段的dict,包括内容(/ {message-id},https://developers.facebook.com/docs/graph-api/reference/v2.5/message)。

至少这是我认为应该如此;但是最后一个请求只返回了字段&created; created_time&#39;和&#39; id&#39;。

我真正想要的是一种获取“消息”的方法。 (内容)领域。我假设函数graph.get_object()来自官方python facebook sdk应该在任何情况下返回所有字段,因为它只有一个记录的参数(http://facebook-sdk.readthedocs.org/en/latest/api.html) - 所请求对象的图形路径,以及不允许添加额外的字段请求。

我正在寻找的答案是在另一个问题Request fields in Python Facebook SDK。 显然,通过传递带有这些字段的** args dict以及所请求的路径,可以要求特定字段(否则不会返回)。 在对Facebook图形的GET请求中,这相当于添加

?fields=<requested fieds> 

到对象路径。

这是工作代码:

#!/usr/bin/env python

import facebook

at = <my access token>
pid = <my page id>
api = facebook.GraphAPI( at )
args = {'fields' : 'message'}  #requested fields
conv = api.get_object( 'me/conversations')
msg = api.get_object( conv['data'][0]['id']+'/messages')
for el in msg['data']:
    content = api.get_object( el['id'], **args)   #adding the field request
    print content