nodejs
Passport
yammer

nodejs+passportでYammerで投稿

More than 1 year has passed since last update.


背景

社のYammerの方にMicrosoft flowとGoogle alertを使って投稿していたのですが、「毎日ものすごい数 投稿されて見にくい!」という批判が続発したため間にnodejs挟んで1日に数回まとめて投稿するようにかえました。


やり方

スクリーンショット 2017-04-12 15.34.35.png

こんな感じのを1日に1回〜2回やる感じ


読み込み

feedparserとrequestを利用します。

こんな感じでインストール。


install

npm install --save feedparser request


こんな感じで実装。


index.js

var FeedParser = require('feedparser'),

request = require('request');
var req= request(url);
var feedparser = new FeedParser({});
var items=[];//ここに記事が入る。
feedparser.on('meta', function(meta) {});
feedparser.on('readable', function() {
while(item = this.read()) {
items.push(item);
}
});

var out="";
feedparser.on('end', function() {
if(items.length > 0){
            //ここでYammerに出す記事を生成。
items.forEach(function(item) {
out = out + item.title +"\n"+ item.link + "\n\n";
});
out=out+"#"+val.name;
console.log(val.name+">post");
}else{
console.log(val.name+">no post");
}
});



投稿

passportとpassport-yammer3とyammerを使います。

実際はこんな感じ。

スクリーンショット 2017-04-12 16.52.10.png

まずは関係する所をインストール


install

npm install --save passport-yammer3 yammer express express-session fs


access tokenを発行する所はこんな感じ…


yammer_index.js

var express = require('express'),

session = require('express-session'),
passport= require('passport'),
request = require('request'),
fs = require("fs"),
YammerStrategy = require('passport-yammer3').Strategy;
var app = express();
app.use(session({ secret: 'keyboard cat' }));
app.use(passport.initialize());
app.use(passport.session());

passport.use(new YammerStrategy({
clientID:'*****************',
clientSecret:'*****************',
callbackURL:'http://localhost:3000/auth/yammer/callback'
},
function(accessToken, refreshToken, profile, done) {
console.log(accessToken);//ここでtoken発行
fs.writeFileSync("accessToken.txt",accessToken);
return done(null, profile);
}
));
passport.serializeUser(function(user, done) {done(null, user);});
passport.deserializeUser(function(user, done) {done(null, user);});
app.all('/ng',function(req,res){res.send('ng');});
app.all('/ok',function(req,res){res.send('ok');});
app.all('/auth/yammer',passport.authenticate('yammer'));
app.all('/',function(req,res){res.send('<a href="/auth/yammer">ここクリック!</a>');});

app.all('/auth/yammer/callback',
passport.authenticate('yammer', {successRedirect: '/ok', failureRedirect: '/ng' })
);
app.listen(3000, function () {
console.log('Example app listening on port 3000!');
});


上記を動かしてlocalhost:3000にアクセスすれば動くはず。

最後に、投稿はこんな感じで。


yammer_index.js

var Yammer = new require('yammer').Yammer;

var yammer_news_post = function(s){
var accessToken=fs.readFileSync("accessToken.txt",'utf-8');//これがアクセストークン
console.log(accessToken);
var yam = new Yammer({ access_token: accessToken });
var formdata={body:s,group_id:*********};
yam.createMessage(formdata, {},function(r1,r2){});
}