Yammerという情報共有ツールがあります。
Pocketで読んでる記事を職場で共有したい場合はPocket上でタグを付けるとYammerに投稿するという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]
client_id = xxxx
client_secret = xxxx
redirect_uri = http://example.com/redirect.cgi
access_token = xxxx
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 Token
とDirect User To Service Provider
の処理を、code=
がある場合はExchange Request Token for Access Token
の処理を実行するように書いています。
#!/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に投稿できるようになります。(この部分は自動化しませんでした・・・)
#!/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へ投稿してくれます。