3arrows - Google Apps アカウントでも使える社内 Twitter
http://www.3arrows.jp/
3arrows は、2-legged OAuth による OpenSocial RPC API を提供しています。2-legged OAuth は mixiアプリなどソーシャルアプリの世界では、標準化されたリクエスト署名方式で、アプリと外部システムの連携に適しています。詳しくは、次のページを参考にしてください。
2-legged OAuth による API アクセス >> mixi Developer Center
http://developer.mixi.co.jp/appli/spec/pc/restful-api-for-pc/2-legged-oauth-api-access
このエントリでは 2-legged OAuth による OpenSocial RPC API を使って、電力使用状況と節電を呼びかける でんこちゃん 社内 bot の作り方を紹介します。
でんこちゃん社内 bot
就業時間中の1時間に1度、でんこちゃん bot がタイムラインに節電を呼びかける投稿をします。このとき、現在の電力使用状況とその日の推移グラフも合わせて投稿します。

①でんこちゃん bot
②東京電力アプリのロゴ
③東京電力アプリのリンク先 http://www.tepco.co.jp/forecast/index-j.html
④電力使用状況
⑤電力使用状況の推移グラフ (クリックすると、次のとおり拡大する)

でんこちゃんユーザの作成
コントロールパネルで、でんこちゃんを表すユーザを作成します。ここでは、メールアドレスを denkochan@lrlab.to とします。
東京電力アプリの作成
コントロールパネルで、東京電力を表すアプリを作成します。

アプリのガジェットXMLは次のとおりです。アプリのタイトルは東京電力とし、アイコンは Twitter 公式アカウント から拝借します。アプリは、コンテンツを持たせず、東京電力サイトにリンクさせます。
<?xml version="1.0" encoding="UTF-8"?> <Module> <ModulePrefs title="東京電力" description="東京電力から節電のお願いです"> <Link rel="icon" href="http://a0.twimg.com/profile_images/1276730827/tepco_normal.JPG" /> </ModulePrefs> <Content type="url" href="http://www.tepco.co.jp/forecast/index-j.html"></Content> </Module>コンシューマキーとシークレットの入手
2-legged OAuth のコンシューマキーとシークレットは、コントロールパネルから入手できます。OpenSocial RPC API のエンドポイント (URL) も同様です。

バッチの作成
東京電力 から LWP::Simple を使って、電力の使用状況データ (CSV) をダウンロードします。そして、最新の電力使用状況を集計し、Google Chart API を使って、当日の推移グラフを作成します。
use strict;
use warnings;
use LWP::Simple;
use Encode 'decode_utf8';
my $url = 'http://www.tepco.co.jp/forecast/html/images/juyo-j.csv';
my @rows = split(/\r\n/, get($url));
shift @rows;
shift @rows;
# ピーク時供給力(万kW)
my ($cap) = split(/,/, shift @rows);
shift @rows;
shift @rows;
# 24時間分の当日実績(万kW)
my @hours = map {
my @cols = split(/,/, $_); $cols[2];
} @rows;
my $latest;
# 最新の当日実績(万kW)
for (reverse(@hours)) {
last if $latest = $_;
}
# 電力使用率
my $per = sprintf('%.1f', $latest / $cap * 100);
# 当日実績(万kW)の推移グラフ
my $chart = 'http://chart.googleapis.com/chart' .
'?chs=400x240' .
'&cht=bvo' .
"&chxr=0,0,$cap|1,0,23" .
'&chxt=y,x' .
'&chbh=10' .
'&chd=t:' . join(',', map { int($_ / $cap * 100) } @hours);
続けて、Activities API を使って、電力使用状況を 3arrows に投稿します。アクティビティの作成を JSON RPC で組み立て、OAuth::Lite::Consumer を使って、リクエストを署名して発行します。API の Endpoint、Consumer Key、Consumer Secret には、前述のコントロールパネルから入手した値を指定します。また、xoauth_requestor_id には、でんこちゃん(投稿者) を表す denkochan@lrlab.to を指定しています。
アクティビティの作成に成功すると、アクティビティID がレスポンスされます。万が一失敗したときは、JSON RPC のエラーか HTTP ステータスのエラーがレスポンスされます。
use Data::Dumper;
use JSON::XS;
use OAuth::Lite::Consumer;
# アクティビティのタイトル
my $title = <<EOB;
じゃん! 電気を大切にね。
> 電力使用状況 $cap 万kW 中 $latest 万kW ($per%)
> $chart
EOB
# アクティビティの作成を表す JSON RPC
my $content = JSON::XS::encode_json({
jsonrpc => '2.0',
method => 'activities.create',
params => {
userId => '@viewer',
group => '@self',
activity => { title => decode_utf8($title) } # UTF-8 フラグ
},
id => 1
});
# API の Endpoint, Consumer Key, Consumer Secret, Viewer
my %options = (
endpoint => 'http://nakajiman.3arrows.jp/api/rpc/a',
consumer_key => '{consumer key}',
consumer_secret => '{consumer secret}',
requester_id => 'denkochan@lrlab.to',
);
my $consumer = OAuth::Lite::Consumer->new(
consumer_key => $options{consumer_key},
consumer_secret => $options{consumer_secret}
);
# リクエストの署名と発行
my $response = $consumer->request(
method => 'POST',
url => $options{endpoint},
headers => [ 'Content-Type' => 'application/json' ],
content => $content,
params => {
xoauth_requestor_id => $options{requester_id},
});
# リクエストの成否
if ($response->is_success) {
print Dumper(JSON::XS::decode_json($response->decoded_content));
} else {
warn $response->status_line;
}
1;
バッチの実行就業時間の 9:00 から 18:00 の間で、1時間に一度、バッチを実行するように cron を登録します。
ダウンロード
でんこちゃん社内 bot のソースコードは、次のページからダウンロードできます。
ダウンロード - 3arrows.jp
https://sites.google.com/a/socialprise.jp/3arrows-jp/downloads
0 件のコメント:
コメントを投稿