ブログが続かないわけ

この日記のはてなブックマーク数
Webエンジニアが思うこと by junichiro on Facebook

ECCUBE の売上集計をメールで通知する

このエントリーを含むはてなブックマーク hateb

ECCUBE で売上集計、毎日見ていますか?

ネットショップをメインで運用する方は、そりゃあ毎日のように管理画面にアクセスすると思うのです。ところが、売上集計のような数値は、運用担当の方よりもっと上層の方々が知りたい数字だったりします。そういう人たちは管理画面にログインして数字を見るのが億劫だということも、ままあります。それを解消するために、メールで売上集計を自動通知するスクリプトを作りました。

飽きもせず、またスクレイピングです。

しかも、ECCUBE というPHP を使う人たちを前提としているツールを前にして、Perl での実装です。ニーズもへったくれもありませんが、やったことだけでも記しておこうと思います。

---
cookie: lwpcookies.txt
from_email: test@en.yummy.stripper.jp
to_email: mymail@en.yummy.stripper.jp
subject: テストショップレポート
uri: https://www.example.com/admin/index.php
id: eccube_login_id
password: eccube_login_password
設定のyaml はこんな感じです。
use strict;
use warnings;
use WWW::Mechanize;
use Web::Scraper;
use HTTP::Cookies;
use Email::Sender::Simple 'sendmail';
use Email::MIME;
use Email::MIME::Creator;
use Encode qw/encode decode from_to/;
use Time::Piece;
use YAML;
use utf8;

my $config_file = $ARGV[0] || 'config/shop.yaml';
my $config = YAML::LoadFile($config_file);

my $cookie = HTTP::Cookies->new( file => $config->{cookie}, autosave => 1 );
my $mech = WWW::Mechanize->new();
$mech->cookie_jar($cookie);
$mech->agent_alias('Mac Safari');

# login
$mech->get( $config->{uri} );
$mech->form_number(1);
$mech->field( login_id => $config->{id} );
$mech->field( password => $config->{password} );
$mech->click();

$mech->follow_link( url_regex => qr/admin¥/total/ );
$mech->form_name('search_form1');

$mech->field( mode                => 'search' );
$mech->field( form                => '1' );
$mech->field( search_startyear_m  => 2011 );
$mech->field( search_startmonth_m => 6 );
$mech->click_button( name => 'subm' );

my $items = scraper {
    process 'td', 'data[]' => 'TEXT';
};
my $scraper = scraper {
    process 'tr.fs12', 'result[]' => $items;
};
my $res = $scraper->scrape( $mech->content, $mech->uri );
my ( $formatted_res, $body );
for ( @{ $res->{result} } ) {
    $formatted_res .= sprintf( "%s%s% 5s%s% 8s¥n",
        $_->{data}[0], "¥t", $_->{data}[1], "¥t", $_->{data}[8] );
}
for ( @{ $res->{result} } ) {
    $_->{data}[1] =~ s/件//msgx;
    $_->{data}[8] =~ s/[円¥,]//msgx;
}

$body .= $formatted_res;

my $mail = Email::MIME->create(
    header => [
        From    => $config->{from_email},
        To      => $config->{to_email},
        Subject => encode( 'MIME-Header-ISO_2022_JP' => $config->{subject} ),
    ],
    attributes => {
        content_type => 'text/plain',
        charset      => 'ISO-2022-JP',
        encoding     => '7bit',
    },
    body => encode( 'iso-2022-jp' => $body ),
);
sendmail($mail);

読み返してみると、何月分のレポートを取得するかとかがハードコードされててひどいですね。でもまあ、このくらいはいい感じに書きかえるなりして、参考にして頂ければ幸いです。基本は、「Amazon アフィリエイトのレポートをメールで自動で受けとる 2011年版」と同じで、Mech で売上集計を表示するところまでたどって、そこのHTML を丸ごとWeb::Scraper に渡すというだけです。

参考にした書籍はもちろん「Perl CPANモジュールガイド 」。

繰り返しになりますが、この1冊があれば、Perl でやりたいことのほとんどは実現できるのではないでしょうか。本当におすすめです。

この記事のトラックバックURL
http://en.yummy.stripper.jp/trackback/1418090
トラックバック
コメント









関連情報