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