如何为NLTK获取正确Twitter OAuth token及运行代码报TypeError问题咨询
问题根因
这个报错和你的密钥填写无关,是NLTK的twitter模块与高版本twython依赖库不兼容导致的:
新版twython的流请求逻辑触发错误时,会给on_error方法传入4个参数(self、响应状态码、响应内容、响应头),但NLTK内置的Streamer类的on_error方法仅定义了3个入参,参数数量不匹配才抛出该TypeError。
你对oauth_token的怀疑不成立,你从Twitter开发者平台获取的访问令牌就是正确的oauth_token,不需要额外查找其他凭证。
修复方案
- 方案1:降级twython到兼容版本
执行如下命令安装适配NLTK的twython版本即可:
pip install twython==3.7.0
该版本的twython流逻辑不会传入headers参数,和NLTK的on_error定义完全匹配。
- 方案2:修改NLTK源码适配新版twython
找到本地Python第三方库路径下的nltk/twitter/twitterclient.py文件,定位到Streamer类的on_error方法,将原方法定义:
def on_error(self, status_code, data):
修改为:
def on_error(self, status_code, data, headers=None):
新增的headers参数加默认值即可,不会影响原有错误处理逻辑。
- 方案3:替换采集方案
NLTK的twitter模块已经停止维护多年,不支持新版Twitter API,也未适配新的依赖库版本,长期使用建议直接用twython、tweepy等官方维护的Twitter SDK实现流采集功能。
密钥验证说明
如果修复兼容性问题后出现401权限报错,再检查密钥对应关系即可,你之前的对应逻辑是正确的:
- app_key = Twitter开发者平台的API Key
- app_secret = Twitter开发者平台的API Key Secret
- oauth_token = Twitter开发者平台的Access Token
- oauth_token_secret = Twitter开发者平台的Access Token Secret
内容的提问来源于stack exchange,提问作者Anton
相关产品推荐
相关产品推荐

