私はたくさんのグーグルをしました、そして私が見つけることができた最高のものは: https://github.com/ciaranj/node-oauth
これに加えて、Twitter、Facebook、Google、LinkedInなどにAPI呼び出しを行って、ツイートを投稿したり、DM誰かを取得したり、友達リストを取得したり、投稿したりするためのラッパーを提供するライブラリはありますか? Facebook/G +他へのリンク?
私はPassport.jsを知っていますが、その使用法はこれらのソーシャルサイトからの認証と承認の取得に限定されています。それを超えて、現在、上記のアクティビティを実行するには、node-oauthを介してAPI呼び出しを個別化する必要があります。
私は何かを逃したことがありますか?そのようなライブラリを知っていますか?
Passport.js を使用してアクセストークンを取得したら、 request を使用してサードパーティサービスへのすべてのAPI呼び出しを行うことをお勧めします(そして個人的に使用します)。
私の意見では、プロバイダー固有のラッパーは不必要な複雑さを追加するだけです。ほとんどのRESTfulAPIは、非常に単純なHTTPリクエストです。余分なレイヤーは邪魔になり、バグを追加して追跡するだけです。さらに、request
に固執することで、同じ使い慣れたモジュールを使用してanyサードパーティと統合できます。
CloudRail は良い選択肢かもしれません。ほとんどのソーシャルネットワークに抽象化されたAPIを提供し、認証を非常にうまく処理します。次に例を示します。
const services = require("cloudrail-si").services;
// let profile = new services.GooglePlus(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");
// let profile = new services.GitHub(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");
// let profile = new services.Slack(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");
// let profile = new services.Instagram(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");
// ...
let profile = new services.Facebook(redirectReceiver, "[clientIdentifier]", "[clientSecret]", "[redirectUri]", "[state]");
profile.getFullName((err, fullName) => {
if (err) throw err;
console.log("User's full name is " + fullName);
});
profile.getEmail((err, email) => {
if (err) throw err;
console.log("User's email address is " + email);
});
Passport.js もデプロイしており、認証以外の追加のリクエストをプルする必要があります。 Jared Hansonの「リクエスト」の提案を受け取り、README at 'request' github の下部にあるTwitterの例を使用しました。最初のvar request = require('request');
とvar qs = require('querystring');
は、Twitterパスポートの認証とfollowers_countの取得の例です。2次リクエストは認証コールバック関数内にネストされています。
passport.use(new TwitterStrategy({
// var configAuth = require('./auth');
consumerKey : configAuth.twitterAuth.consumerKey,
consumerSecret : configAuth.twitterAuth.consumerSecret,
callbackURL : configAuth.twitterAuth.callbackURL,
passReqToCallback : true
},
function(req, token, tokenSecret, profile, done) {
process.nextTick(function() {
if (!req.user) {
User.findOne({ 'Twitter.id' : profile.id }, function(err, user) {
if (err)
return done(err);
if (user) {
if (!user.Twitter.token) {
user.Twitter.token = token;
user.Twitter.tokenSecret = tokenSecret;
user.Twitter.username = profile.username;
user.Twitter.displayName = profile.displayName;
// [ADDED] Twitter extended API calls using 'request' and 'querystring'
var oauth = {
consumer_key : configAuth.twitterAuth.consumerKey,
consumer_secret : configAuth.twitterAuth.consumerSecret,
token : token,
token_secret : tokenSecret
}
var url = 'https://api.Twitter.com/1.1/users/show.json?';
var params = {
user_id: profile.id
}
url += qs.stringify(params)
request.get({url:url, oauth:oauth, json:true}, function (e, r, result) {
// Get followers_count here
user.Twitter.followers = result.followers_count;
// [MOVED] db.save moved into second callback function
user.save(function(err) {
if (err)
throw err;
return done(null, user);
});
});
// [END ADD]
}
return done(null, user);
} else {
var newUser = new User();
newUser.Twitter.id = profile.id;
newUser.Twitter.token = token;
newUser.Twitter.tokenSecret = tokenSecret;
newUser.Twitter.username = profile.username;
newUser.Twitter.displayName = profile.displayName;
// [ADDED] Twitter extended API calls using 'request' and 'querystring'
var oauth = {
consumer_key : configAuth.twitterAuth.consumerKey,
consumer_secret : configAuth.twitterAuth.consumerSecret,
token : token,
token_secret : tokenSecret
}
var url = 'https://api.Twitter.com/1.1/users/show.json?';
var params = {
user_id: profile.id
}
url += qs.stringify(params)
request.get({url:url, oauth:oauth, json:true}, function (e, r, result) {
// Get followers_count here
newUser.Twitter.followers = result.followers_count;
// [MOVED] db.save moved into second callback function
newUser.save(function(err) {
if (err)
throw err;
return done(null, newUser);
});
});
// [END ADD]
}
});
} else {
var user = req.user;
user.Twitter.id = profile.id;
user.Twitter.token = token;
user.Twitter.tokenSecret = tokenSecret;
user.Twitter.username = profile.username;
user.Twitter.displayName = profile.displayName;
// [ADDED] Twitter extended API calls using 'request' and 'querystring'
var oauth = {
consumer_key : configAuth.twitterAuth.consumerKey,
consumer_secret : configAuth.twitterAuth.consumerSecret,
token : token,
token_secret : tokenSecret
}
var url = 'https://api.Twitter.com/1.1/users/show.json?';
var params = {
user_id: profile.id
}
url += qs.stringify(params)
request.get({url:url, oauth:oauth, json:true}, function (e, r, result) {
// Get followers_count here
user.Twitter.followers = result.followers_count;
// [MOVED] db.save moved into second callback function
user.save(function(err) {
if (err)
throw err;
return done(null, user);
});
});
// [END ADD]
}
});
}));
Jaredの助けに非常に寛大であり、Passport.jsを作成してくれたことに感謝します!