javascript - 使用节点运行 twitter 时出现状态错误 401。可能的授权错误
问题描述
我在使用 npm twitter API 时遇到了连接问题。到目前为止,我一直无法解决这个问题。我在阅读和练习 Semmy Purewal 的书时遇到的问题,在这个例子中,我们想要流式传输包含某些单词的推文。解决这个问题我尝试了各种不同的方法,这些方法要么是在网上找到的,要么是我自己想到的。我将首先从我的终端显示错误代码,然后我将提及我尝试过的内容以及我的设置。请注意,我是一个完全的编程初学者,我从来没有不喜欢尝试解决我可以在网上找到的问题。然而,在没有找到令人满意的解决方案后,我转向 Stack Overflow 询问我的第一个技术相关问题;)。
运行 twitter.js 的错误(问题末尾找到的 JS 文件)
Error: Status Code: 401
at Request.<anonymous> (/home/vagrant/app/twitterapi/node_modules/twitter/lib/twitter.js:277:28)
at emitOne (events.js:77:13)
at Request.emit (events.js:169:7)
at Request.onRequestResponse (/home/vagrant/app/twitterapi/node_modules/request/request.js:1066:10)
at emitOne (events.js:77:13)
at ClientRequest.emit (events.js:169:7)
at HTTPParser.parserOnIncomingClient [as onIncoming] (_http_client.js:414:21)
at HTTPParser.parserOnHeadersComplete (_http_common.js:88:23)
at TLSSocket.socketOnData (_http_client.js:304:20)
at emitOne (events.js:77:13)
我的 js 代码看起来与书中第 197 页中给出的示例完全相同。我了解到,当存在授权问题时,或者在其他未描述的时刻(根据 Twitter API),会引发状态错误 401。
设置差异:
- 我已经在 twitter 文件夹中本地安装了节点包,因为我在安装 Express 时出错。(我先运行 npm init,然后运行 npm install express)
- 我运行 Ubuntu 16.04
- 我运行虚拟盒 5.2(而不是 6)
- 服务器在 vagrant box 上运行
我尝试过的几种方法:
- 使用不同的 twitter API 代替 ntwitter(例如 'twitter' 和 'twit')
- 创建一个包含授权代码的对象变量并用它来初始化我的推特
- 单独运行 twitter 创建行(没有流),没有出错。
- 使用不同的语句而不是 statuses/filter 和 track :
不幸的是,我花了几个小时试图解决这个问题,我很高兴试图找出问题所在,但我将继续不使用这个例子,也没有使用这个例子的后续练习。无论如何,我想看看是否有人能找到解决方案。我很想尝试使用 twitter API
谢谢你!
跟着我的 js 和 json 文件。
var twitter = require("twitter"),
credentials = require("./credentials.json"),
client;
var credentialObject = {
"consumer_key": "xx",
"consumer_secret": "xx",
"access_token_key": "xx",
"access_token_secret": "xx"
};
console.log(credentials);
//setting up our twitter object
client = new twitter(credentials);
//setting up our twitter stream with three parameters, seperated by commas
client.stream(
//the first parameter is a string
"statuses/filter",
//second parameter an object containing an array
{"track": ["Awesome", "cool", "rad", "gnarly", "groovy"]},
//the third parameter is our callback for when the stream is created
function(stream){
stream.on("data", function(tweet){
console.log(tweet.text);
});
stream.on('error', function(error) {
throw error;
});
}
);
credentials.json 文件结构
{
"consumer_key": "xx",
"consumer_secret": "xx",
"access_token_key": "xx-xx",
"access_token_secret": "xx"
}
解决方案
推荐阅读
- html - TD类不改变不生效
- docker - 运行 Gitlab CI Runner 以 shell 执行模式构建 docker
- google-admin-sdk - 在 javascript 中使用 service.users.aliases.insert 时出现错误“输入无效:alias_email”
- java - SMPP 接收器 Java 客户端
- excel - 高效地将大数据从excel导入Oracle
- jsp - 从servlet向jsp发送数据不起作用
- c++ - C++模板类实例问题
- linux - ubuntu上的docker登录超时`为org.freedesktop.secrets调用StartServiceByName时出错:已达到超时`
- java - 在 TCP 服务器中使用 vertx Vertciles 的有效方法
- mongodb - mongodb 在同一实例中更喜欢一个数据库而不是其他数据库