2016-12-19 4 views
0

Следующая «должны» работать, чтобы получить возможность отправлять твиты с содержанием message ниже, то есть «Lorem Ipsum Dolor ...»Twitter приложение OAuth с node.js

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); 

результат выше, с ключи заселен как в твиттере приложении панели эта ошибка:

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

Я теряюсь здесь - это в приложении, которое необходимо размещать в твиттер, как его собственный выделенный пользователь, и это не аутентифицировать других пользователей или что-либо в этом роде, поэтому я b elieve callback_url не имеет значения ... и в любом случае я не знаю, что будет callback_url, если потребуется.

  • Я попытался обменять используемые ключи s.t. конструктор использует apiPostKey/secret, а вызов post использует apiAccessKey/secret
  • Я создал новые ключи и обновил их конфигурацию.
  • Я проверил, что сервер времени правильно

Кроме того, кнопка «Тест OAuth» на странице настроек приложения (https://apps.twitter.com/app/XXXXX/settings) дает страницу с этим сообщением «К сожалению, эта страница не существует! " на нем на https://dev.twitter.com/apps/XXXXX/oauth. Пока не ясно, что это говорит мне, однако

ответ

0

Оказывается, первая пуля точка была ложью. Скорее всего, я «протестировал», когда приложение не перезагрузило измененную конфигурацию. Проблема заключалась в том, что accessKey следует использовать в сообщении, а ключ «post» (фактически потребительский ключ) является соответствующим значением в конструкторе OAuth.

0

От: https://dev.twitter.com/oauth/application-only

With Application-only authentication you don’t have the context of an authenticated user and this means that any request to API for endpoints that require user context, such as posting tweets, will not work. However, the set of endpoints that will still be available can have a higher rate limit.

And it won’t be able to:

Post tweets or other resources;

Я рекомендую вам попробовать использовать пакет узла для твиттера: например https://www.npmjs.com/package/twitter

+0

Однако я не использую аутентификацию только для приложений. Я использую [однопользовательский auth] (https://dev.twitter.com/oauth/overview/single-user). Моя цель здесь - это пример использования, описанный в этих документах - моя публикация приложений как сама и никто другой. Кроме того, изменение пакетов здесь нежелательно, так как я добавляю и существующую базу кода, которая работает, используя пакет OAuth для отправки твитов – Ben

Смежные вопросы