LoginSignup
4
4

More than 5 years have passed since last update.

はてなブックマークとYammerを連携する

Last updated at Posted at 2016-03-19

Yammerという情報共有ツールがあります。

Pocketで読んでる記事を職場で共有したい場合はPocket上でタグを付けるとYammerに投稿するというIFTTTレシピを使ってました。

ifttt

これはこれで便利だったのですが、IFTTTがYammerの対応をやめるというのと、前から、はてなブックマークと連携させたいと思ってたので、この機会に自作してみました。

事前準備

サーバの用意

Yammer APIにはPythonのSDKがあるので、これを使うことにします。今回は、さくらインターネットの500円プランでPythonを動かすことにしました。setup.pyのときに--userを付けるのがポイントです。

 $  wget https://github.com/yammer/yam-python/archive/master.zip
 $  cd yam-python-master/
 $  python setup.py install --user

Yammerでアプリ登録

ライブラリの動作確認ができたら、こちらのサイトを参考にアプリ名とリダイレクトURLを登録し、client_idとclient_secretを入手します。今回は、さくらインターネットを使うので、redirect_uriにhttp://xxxx.sakura.ne.jp/yammer/redirect.cgiと設定します。

はてなブックマークでWebHook登録

次に、はてなブックマークでWebhookを登録します。下記の手順を参考に「イベント通知を受けとるURL」にhttp://xxxx.sakura.ne.jp/yammer/post.cgiと設定します。

コーディング

最初に、うっかりclient_idとclient_secretを漏洩してしまわないよう、別ファイルにして、htaccessでアクセス制限をかけておきます。

yammer.conf
[Yammer]
client_id = xxxx
client_secret = xxxx
redirect_uri = http://example.com/redirect.cgi
access_token = xxxx
.htaccess
AddHandler cgi-script cgi
<Files ~ ".conf">
deny from all
</Files>

access_tokenの取得

OAuthですので、こんな感じの処理をApplication側に書くことになります。(画像はmashapeのOAuth Bibleから)

Yammerからのリダイレクトはredirect.cgi?code=xxxxという形式で返ってくるので、URLにcode=がない場合は図のGet Request TokenDirect User To Service Providerの処理を、code=がある場合はExchange Request Token for Access Tokenの処理を実行するように書いています。

redirect.cgi
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import yampy
import cgi
import ConfigParser

config = ConfigParser.RawConfigParser()
config.read('yammer.conf')

client_id = config.get('Yammer','client_id')
client_secret = config.get('Yammer','client_secret')
redirect_uri = config.get('Yammer','redirect_uri')

authenticator = yampy.Authenticator(client_id=client_id, client_secret=client_secret)

form = cgi.FieldStorage()
if form.has_key("code"):
    # Yammerから取得したCode(Request Token)からaccess_tokenを生成する
    code = form["code"].value
    access_token = authenticator.fetch_access_token(code)
    print "Content-Type: text/html"
    print ""
    print access_token
else:
    # 認証用URLを生成しYammerの認証画面へリダイレクトする
    auth_url = authenticator.authorization_url(redirect_uri=redirect_uri)
    print "Location: "+auth_url
    print ""

このファイルをサーバに配置してhttp://xxxx.sakura.ne.jp/yammer/redirect.cgiにアクセスすると、Yammerのログイン画面にリダイレクトされます。この画面でYammerにログインして承認ボタンを押すと、access_tokenが表示されます。

このaccess_tokenをコピーしてyammer.confに書けば、下記のpost.cgi経由でyammerに投稿できるようになります。(この部分は自動化しませんでした・・・)

post.cgi
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import cgi
import yampy
import ConfigParser

config = ConfigParser.RawConfigParser()
config.read('yammer.conf')
access_token = config.get('Yammer','access_token')

form = cgi.FieldStorage()
if form.has_key("comment"):
    comment = form["comment"].value
    # コメントにyammerの文字列がある場合、Yammerに投稿する
    if comment.find('yammer') > -1:
        url = form["url"].value
        title = form["title"].value
        body = title + ' ' + url
        yammer = yampy.Yammer(access_token=access_token)
        yammer.messages.create(body)

print "Content-Type: text/html"
print ""
print body

これで、はてなブックマークでyammerというタグを付けると、Yammerへ投稿してくれます。

4
4
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
4
4