如何使用Mastodon.py获取Mastodon私信
问题:使用Mastodon.py无法获取私信
我正尝试用Mastodon.py从我的Mastodon账号中获取私信,目前能正常获取时间线内容,但拿不到私信。网页端里私信是独立于时间线的,所以我知道不能用timeline()函数。了解过status()函数,但它需要提前知道消息ID,不太适用。
我查过API文档,但没找到明确可用的方法。当前的函数如下:
def get_direct_messages(mastodon): # 获取用户时间线的所有状态消息 statuses = mastodon.timeline() print(statuses) # 过滤出仅包含私信的消息 direct_messages = [status for status in statuses if status["visibility"] == "direct"] print(direct_messages) return direct_messages
这个函数能正常打印时间线消息,说明连接没问题,但print(statuses)只显示时间线内容,显然这不是获取私信的正确方式。
解决方法
Mastodon的私信系统基于**对话(Conversations)**设计,并非直接在时间线中展示,所以你需要用conversations()方法来获取私信,而非timeline()。
修改后的代码示例
def get_direct_messages(mastodon): # 获取所有私信对话,默认返回最新20条 conversations = mastodon.conversations() direct_messages = [] # 遍历对话,提取其中的消息 for conv in conversations: # conv['last_status'] 是对话中的最新消息 direct_messages.append(conv['last_status']) # 若需获取对话完整历史,可调用 status_context() # context = mastodon.status_context(conv['last_status']['id']) # direct_messages.extend(context['ancestors']) print(direct_messages) return direct_messages
关键说明
conversations()返回私信对话列表,每个对话对象包含参与者、最新消息(last_status)等信息- 若要获取某条私信的完整上下文(历史消息),可使用
mastodon.status_context(消息ID),它会返回该消息的祖先(之前的消息)和后代(后续回复) - 若私信数量较多,可通过
max_id参数分页获取更早的对话,示例:mastodon.conversations(max_id=last_conv_id)
内容的提问来源于stack exchange,提问作者Rick Dearman
相关产品推荐
相关产品推荐

