带有node.js的Twitter应用OAuth

时间:2016-12-19 22:55:02

标签: node.js oauth twitter-oauth

以下"应该"用以下message的内容发布推文,即" Lorem ipsum dolor ..."

var OAuth = require("oauth").OAuth;
const twitterer = new OAuth(    "https://api.twitter.com/oauth/request_token",
                                "https://api.twitter.com/oauth/access_token",
                                getContext().configuration.tasks.auto_tweet.apiAccessKey,
                                getContext().configuration.tasks.auto_tweet.apiAccessSecret,
                                // getContext().configuration.tasks.auto_tweet.apiPostKey,
                                // getContext().configuration.tasks.auto_tweet.apiPostSecret,
                                "1.0", null,"HMAC-SHA1");
// ... business logic
const message = "Lorem ipsum dolor..."
twitterer.post(     
    "https://api.twitter.com/1.1/statuses/update.json",
    getContext().configuration.tasks.auto_tweet.apiPostKey,
    getContext().configuration.tasks.auto_tweet.apiPostSecret,
                                        ({'status': message}),
                                        "application/json",
                                        function (error, data, response2) {
                                            if(error){
                                                failedTweets ++;
                                                console.log("~~~~~~~~ Failed to send" , failedTweets, "tweets" );
                                                console.log(error);
                                            }
                                            else{ sentTweets ++; }
                                            console.log("~~~~~~~~ Sent" , sentTweets, "tweets" );
                                            setTimeout(function(){
                                                sendNextTweet();
                                            },1000);

上述结果,在Twitter应用程序仪表板中填充了密钥是这个错误:

`{ statusCode: 401, data: '{"errors":[{"code":89,"message":"Invalid or expired token."}]}' }`

我在这里不知所措 - 这是一个应用程序需要发布到Twitter作为自己的专用用户,并且它没有验证其他用户或任何类似的东西,所以我相信{{ 1}}是无关紧要的......无论如何,如果需要,我都不知道callback_url会是什么。

  • 我尝试过交换使用过的密钥s.t. callback_url调用使用apiPostKey / secret
  • 时,构造函数使用post / secret
  • 我已生成新密钥并使用它们更新配置。
  • 我已验证服务器时间是否正确

此外,'测试OAuth'应用设置页面上的按钮(https://apps.twitter.com/app/XXXXX/settings)会生成一个包含此消息的页面"抱歉,该页面不存在!"在https://dev.twitter.com/apps/XXXXX/oauth上。但不清楚这告诉我的是什么

2 个答案:

答案 0 :(得分:0)

来自:https://dev.twitter.com/oauth/application-only

  

使用仅限应用程序身份验证时,您没有上下文   经过身份验证的用户,这意味着对API的任何请求   需要用户上下文的端点(例如发布推文)不会   工作。但是,仍然可用的端点集可以   有更高的利率限制。

     

它将无法:

     

发布推文或其他资源;

我建议你尝试使用twitter的节点包: 例如 https://www.npmjs.com/package/twitter

答案 1 :(得分:0)

事实证明,第一个要点是谎言。最有可能的是我测试了#34;当应用程序没有重新加载交换的配置时。问题是应该在帖子中使用accessKey,并且" post" key(实际上是使用者密钥)是Preference-Applied构造函数中的相关值。