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;

Add comment

Fill out the form below to add your own comments