使用Twitter gem通过slug获取Twitter List时报NotFound错误如何解决
问题核心原因
你遇到的404报错是两个认知偏差导致的:
- 你传入的
emilyslist是Twitter用户的账号ID,不是列表的slug。Twitter列表是归属于特定用户的二级资源,完整的公开列表URL格式为https://twitter.com/[列表所有者用户名]/lists/[列表slug],你访问的https://twitter.com/emilyslist是用户个人主页,不是列表页。 twittergem的list方法不能仅传入slug参数,默认情况下仅传slug会查询你当前认证账号名下的对应列表,你自己的账号下没有对应slug的列表自然返回不存在。
修复方案
1. 调整方法参数
需要同时传入列表所有者的用户名/用户ID、列表slug两个参数,修正后的方法如下:
# 初始化客户端的代码无需调整 def retrieve_a_list(owner_identifier, list_slug) @list_info = @client.list(owner_identifier, list_slug) return @list_info end
2. 正确调用方法
如果你不知道目标用户有哪些公开列表,可以先拉取该用户的全部公开列表获取对应的slug:
# 获取@emilyslist账号的所有公开列表 user_lists = @client.lists('emilyslist') # 遍历打印列表名称和对应slug user_lists.each do |list| puts "列表名称:#{list.name},slug:#{list.slug}" end
拿到slug后再调用列表查询方法即可,示例:
# 示例:拉取@emilyslist账号下slug为endorsed-2024的列表 target_list = retrieve_a_list('emilyslist', 'endorsed-2024') # 查看列表属性 puts target_list.member_count # 列表成员数 puts target_list.description # 列表描述
额外注意事项
如果目标列表是私有列表,你当前认证的账号需要获得列表所有者的访问权限才能正常拉取,否则依然会返回404错误。
内容的提问来源于stack exchange,提问作者DrewB
相关产品推荐
相关产品推荐

