Python fbchat库问题

时间:2017-01-04 02:15:58

标签: python python-2.7

我有两个关于fbchat库的主要问题。第一个是假设的,第二个是基于代码/函数的。

我的第一个问题是,当用户在线时,fbchat可以返回吗?当我使用这段代码时:

 persons = client.getUsers(name)
 for person in persons:
    person_info = client.getUserInfo(person.uid)
    if person_info['is_friend'] == True:
        print person_info

我得到这样的东西(用尊重隐私的方式用通用的东西替换所有信息):

{u'alternateName': u'', u'name': u'Name', u'firstName': u'Name', u'gender': 2, u'thumbSrc': u'url', u'uri': u'url', u'searchTokens': [u'Name', u'Name'], u'dir': None, u'is_friend': True, u'numbers/letters': number, u'mThumbSrcSmall': None, u'is_nonfriend_messenger_contact': False, u'type': u'friend', u'id': u'number', u'mThumbSrcLarge': None, u'vanity': u'messenger_id'}

我想知道其中一个是否是衡量这个人是否在线的方法,或者是如何做到这一点。

第二个问题是关于阅读信息。使用此代码,我收到一个错误(粘贴在代码后面)。

def check_message():
    client = login()
    friend = "Name"

    last_messages = client.getThreadInfo(client.getUsers(friend)[0].uid, 0)
    last_messages.reverse()

    for message in last_messages:
        print(message.body)

这是错误:

Traceback (most recent call last):
  File "C:/Users/lukec/PycharmProjects/Sysgen_AI/test.py", line 32, in <module>
    check_message()
  File "C:/Users/lukec/PycharmProjects/Sysgen_AI/test.py", line 30, in check_message
    print(message.body)
AttributeError: Message instance has no attribute 'body'

但是fb chat pypi page说message.body确实存在......

另外,当我最后删除.body时,我得到了这个输出:

<fbchat.models.Message instance at value>
<fbchat.models.Message instance at value>
<fbchat.models.Message instance at value>
<fbchat.models.Message instance at value>
<fbchat.models.Message instance at value>
<fbchat.models.Message instance at value>
<fbchat.models.Message instance at value>
<fbchat.models.Message instance at value>
<fbchat.models.Message instance at value>
<fbchat.models.Message instance at value>
<fbchat.models.Message instance at value>

知道为什么吗?我正在建立一个涵盖各种任务的个人机器人/人工智能。

修改:使用@ fsociety的建议,dir(消息)返回以下内容:

['__doc__', '__init__', '__module__', u'action_type', u'attachments', u'author', u'author_email', u'body', u'commerce_message_type', u'customizations', u'ephemeral_ttl_mode', u'folder', u'forward_count', u'forward_message_ids', u'has_attachment', u'is_filtered_content', u'is_filtered_content_account', u'is_filtered_content_bh', u'is_filtered_content_invalid_app', u'is_filtered_content_quasar', u'is_forward', u'is_sponsored', u'is_spoof_warning', u'is_unread', u'message_id', u'message_source', u'meta_ranges', u'montage_reply_data', u'offline_threading_id', u'other_user_fbid', u'platform_xmd', u'profile_ranges', u'ranges', u'raw_attachments', u'reactions', u'skip_bump_thread', u'source', u'source_tags', u'subject', u'tags', u'thread_fbid', u'thread_id', u'threading_id', u'timestamp', u'timestamp_absolute', u'timestamp_datetime', u'timestamp_relative', u'timestamp_time_passed']

正如你所看到的那样&#34;身体&#34;过来。我现在对错误发生的原因更加困惑。另外,为什么第一个(person_info)与这个(消息)不同?我也希望它也是一个字典(因此可以调用一个密钥)。

编辑2 :使用以下内容,我收到错误消息:

def check_message():
    client = login()
    friend = "Name"

    last_messages = client.getThreadInfo(client.getUsers(friend)[0].uid, 0)
    last_messages.reverse()

    for message in last_messages:
        print(message['body'])

错误是:

 File "C:/Users/lukec/PycharmProjects/Sysgen_AI/test.py", line 33, in <module>
    check_message()
 File "C:/Users/lukec/PycharmProjects/Sysgen_AI/test.py", line 31, in check_message
    print(message['body'])
 AttributeError: Message instance has no attribute '__getitem__'

思想?

编辑3:打印邮件的其他属性有效,而不是正文...例如,我可以

print message.timestamp_datetime

并获得:

October 10, 2016 7:16 pm

作为输出。不确定message.body问题是我还是库。你能想到的任何解决方法吗?

1 个答案:

答案 0 :(得分:0)

想出来:

当朋友最终加入Messenger时,Facebook会向您发送提醒,说明如此。 fbchat将此视为一条消息,并尝试缓存并解析它,但却因为没有正文而被绊倒。

使用此:

for Message in last_messages:
    message_time = Message.timestamp_datetime
        try:
            message_body = Message.body
            print message_time
            print message_body
        except:
            pass

它传递了第一条消息没有正文的问题,可以继续打印后续消息。

非常感谢你的帮助@SancaKembang。如果你从未联系过this,我就不会想出来。它让我自己查看库文件,看看为什么错误产生而不仅仅是查看我的代码。