【問題】
twitter OAuth を使ってnode.jsで作ったtwitter botに特定のツイートをファボらせたい。
ためしにツイート投稿API(statuses/update)を叩き、これは正常に動くのだが、
favorites/create APIは
{ statusCode: 401, data: '{"request":"\\/1\\/favorites\\/create\\/132256714090229760.json","error":"Could not authenticate with OAuth."}' }
を返す。おっかしーなー
【原因】
APIに渡すパラメータの渡し方が間違ってた。笑っちゃうほど阿呆くさいミス(これで1日喰ったけどね) なので問題コードの詳細は割愛
【解決】
以下、コード全文
my_modules/twitter.js
/** * my module * twitter.js **/ var conf = require('../my_conf.js').conf; var OAuth = require('oauth').OAuth; var oauth = new OAuth( conf.request_token, conf.access_token_app, conf.consumer_key, conf.consumer_secret, conf.oauth_version, // 1.0 null, conf.encryption ); // これ動いた。(゚⊿゚) exports.fav = function(params, callback){ // dataで渡すんじゃなくて、叩くurlで渡すのがいいみたい var favorites_create_target = conf.favorites_create_api + params.id + '.json'; try{ oauth.post( favorites_create_target, conf.access_token, conf.access_token_secret, null, function(err, data){ callback(err,data); } ); }catch(e){ callback(e,e); } }; // これは動かない // data: '{"request":"\\/1\\/favorites\\/create\\/:id.json","error":"Could not authenticate with OAuth."}' } exports.fav_dont_work = function(params, callback){ try{ oauth.post( favorites_create_api, conf.access_token, conf.access_token_secret, params.id + '.json', function(err, data){ callback(err,data); } ); }catch(e){ callback(e,e); } }; // ちなみにこれは動く。https://twitter.com/twit_tap/status/267605921008590849 exports.tweet = function(params, callback){ try{ oauth.post( conf.status_update_api, conf.access_token, conf.access_token_secret, {status: params.message}, function(err, data){ callback(err, data); } ); }catch(e){ callback(e,e); } };
my_conf.js
/** * conf.js **/ exports.conf = { // app request_token : 'https://api.twitter.com/oauth/request_token', access_token_app: 'https://api.twitter.com/oauth/access_token', consumer_key : CONSUMERKEY_OF_YOUR_APP, consumer_secret : CONSUMERSECRET_OF_YOUR_APP, //callback_url : 'http://twittap.com/auth', // const oauth_version : '1.0', encryption : 'HMAC-SHA1', // api end point statuses_update_api : 'https://api.twitter.com/1/statuses/update.json', favorites_create_api : 'https://api.twitter.com/1/favorites/create/', friendships_create_api : 'https://api.twitter.com/1/friendships/create.json', // bot access_token : ACCESSTOKEN_OF_YOUR_BOT_ACCOUNT, access_token_secret : ACCESSTOKENSECRET_OF_YOUR_BOT_ACCOUT, };
test/fav_runner.js
/** * test for fav **/ var twitter_bot = require('../modules/twitter.js'); var params = { id : '267633222240849922', }; twitter_bot.fav(params,function(err,data){ console.log("=ERROR===========================\n",err); console.log("=DATA============================\n",data); });
【参考】
TwitterにPHPでツイートするときのはまりどころ - オレスタ
Could not authenticate with OAuth.|プログラム系の覚書
人生ずっと勉強。 Twitter API でCould not authenticate with OAuthエラーが出ると思ったらアクセストークン設定できてなかった
POST favorites/create/:id | Twitter Developers