Thursday, December 29, 2011
ツイッターボット 電力使用量編
何度何度も言います。Perlなんて書けませんからw
イロイロパクってなんとか動いただけです。
キット余計なモンとか入ってますよw
で。
YahooのAPIでxmlデータとってくるようになってます。
チェックした時刻の10分ぐらい前のデータが最新っぽいので、
最終更新時間は引き算してだしてます。
電力使用率84%以上で投稿を始めます。
95%以上で 電気消そう 的コメントに変更。
そんな感じです。
#!/usr/bin/env perl use strict; use warnings; use utf8; binmode STDIN, ":utf8"; binmode STDOUT, ":utf8"; use Net::Twitter; use XML::Simple; use Jcode; use LWP::Simple; use POSIX qw(ceil); use Time::Local; # Twitter OAuth key and token my $consumer_key = 'my key'; my $consumer_key_secret = 'my key secret'; my $access_token = 'my token'; my $access_token_secret = 'my token secret'; # Twitter OAuth my $nt = Net::Twitter->new( traits => ['API::REST', 'OAuth'], consumer_key => $consumer_key, consumer_secret => $consumer_key_secret, ); $nt->access_token($access_token); $nt->access_token_secret($access_token_secret); # Obtain current power usage from Yahoo! # renew =1 shortest renew (about 5 min). renew = 0 renew in about an hour. my $appid = "app_id"; my $renew = "1"; my $url = "http://setsuden.yahooapis.jp/v1/Setsuden/latestPowerUsage?appid=$appid&latest=$renew"; my $data = get($url) or die("error $!"); # extract content from xml data my ($usage) = $data =~ m{<Usage.*?>(d+)</Usage>}; my ($capacity) = $data =~ m{<Capacity.*?>(d+)</Capacity>}; # calcurate some values # my $rate = sprintf("%.2g", ($usage / $capacity * 100)); my $rate = ($usage / $capacity * 100); my $rate2 = sprintf("%2.2f",$rate); my $usage2 = ceil($usage / 10000); my $capacity2 = ceil($capacity / 10000); # get applox. renewed time(about 10 mits before current time) my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900; $mon += 1; $min -= 11; my $renew_date = sprintf("%04d/%02d/%02d",$year,$mon,$mday); my $renew_time = sprintf("%02d:%02d",$hour,$min); # tweet close to Max if the rate is greater than 95% else standard tweet if ($rate2 >= "84.00" and $rate2 <= "95.00") { my $post='【東電 電力使用状況】 実績値なぁーう:' . $usage2 . '万kW' . ' 最大:' . $capacity2 . '万kW' . ' 使用率:' . $rate2 . '%' . ' 最終更新:' . $renew_date . ' ' . $renew_time . 'ごろ'; my $res = $nt->update($post); } elsif ($rate2 >= "95.01") { my $post='【東電 電力使用状況】 ヤバイ ギリギリ!! ちょっと電気消そうよなう:' . $usage2 . '万kW' . ' 最大:' . $capacity2 . '万kW' . ' 使用率:' . $rate2 . '%' . ' 最終更新:' . $renew_date . ' ' . $renew_time . 'ごろ'; my $res = $nt->update($post); } else { exit; } exit;