Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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){});
}
hashito
わたしです。 主に個人的なメモです。
https://hashito.biz/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away