読者です 読者をやめる 読者になる 読者になる

Plagger でAWS の課金情報を取得

Web::ScraperでCustomFeed-Script/amazon_s3.plに期待→Plaggerで料金レポートを取得する


はてなブックマーク - (otsune) ポール・マッカートニー取調室 - 2008年8月6日


Notify-IRC 向け。

#!/usr/bin/perl
use strict;
use warnings;
use DateTime;
use DateTime::Format::W3CDTF;
use WWW::Mechanize;
use Web::Scraper;
use YAML;

my $url = "https://aws-portal.amazon.com/gp/aws/developer/account/index.html";
my $mail = '';
my $pass = '';

my $mech = WWW::Mechanize->new();
my $response = $mech->get($url);

$mech->form_number(1);
$mech->set_fields('email' => $mail, 'password' => $pass);
$response = $mech->submit;

my $aws = scraper {
    process '//td[@class="bordgreybot txtxsm"]', 'descriptions[]' => 'TEXT';
    process '//td[@class="bordgreybot txtxsm alignrt"]', 'prices[]' => 'TEXT';
    result qw/descriptions prices/
}->scrape($response->decoded_content);

my $output = {
    title => 'Summary of This Month\'s Activity',
    entry => []
};

my $date = DateTime->now(time_zone => 'Asia/Tokyo');

for (my $i = 0; $i <= $#{$aws->{'prices'}}; $i++) {
    push @{$output->{entry}}, {
        title => $aws->{'descriptions'}[$i*2]." ".$aws->{'descriptions'}[$i*2+1]." => ".$aws->{'prices'}[$i],
        date  => DateTime::Format::W3CDTF->format_datetime($date->add(seconds => $i)), # 時間ずらさないとダメぽい
    };
}

binmode STDOUT, ":utf8";
print YAML::Dump $output;


使い方。

 - module: Subscription::Config
   config:
     feed:
       - script:///path/to/assets/plugins/CustomFeed-Script/aws.pl
 - module: CustomFeed::Script


CustomFeed::Script の場合は無理にPerl で書く必要が無いのね……。
誰かかっこよく添削してください。