LoginSignup
0
0

More than 5 years have passed since last update.

nodejs+passportでYammerで投稿

Last updated at Posted at 2017-04-12

背景

社の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){});
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0