【问题标题】:Twitter app OAuth with node.js使用 node.js 的 Twitter 应用 OAuth
【发布时间】:2017-05-05 01:54:36
【问题描述】:

以下“应该”用于发布带有以下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 的应用程序中,它没有对其他用户或任何类似的用户进行身份验证,所以我相信 callback_url 是无关紧要...无论如何我都不知道callback_url会是什么,如果需要的话。

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

此外,应用设置页面 (https://apps.twitter.com/app/XXXXX/settings) 上的“测试 OAuth”按钮会生成一个页面,其中包含以下消息“抱歉,该页面不存在!”在https://dev.twitter.com/apps/XXXXX/oauth。不过,目前尚不清楚这告诉我什么

【问题讨论】:

    标签: node.js oauth twitter-oauth


    【解决方案1】:

    事实证明,第一个要点是谎言。当应用程序没有重新加载交换的配置时,我很可能“测试”了。问题是在post中应该使用accessKey,而“post”键(实际上是消费者键)是OAuth构造函数中的相关值。

    【讨论】:

      【解决方案2】:

      发件人:https://dev.twitter.com/oauth/application-only

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

      它不能:

      发布推文或其他资源;

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

      【讨论】:

      • 但是,我没有使用仅应用程序身份验证。我正在使用single-user auth 我的目标正是那些文档中描述的用例——我的应用程序作为自己发布,而不是其他人。此外,在这里更改包是不可取的,因为我正在添加现有的代码库,使用 OAuth 包发布推文
      猜你喜欢
      • 2012-10-06
      • 2013-05-29
      • 2011-07-01
      • 1970-01-01
      • 2016-01-27
      • 2011-04-16
      • 2020-03-12
      • 2012-09-29
      • 1970-01-01
      相关资源
      最近更新 更多