実用! Perlでプリンタのメーター確認をする

| 1 Comment | 1 TrackBack | このエントリーをはてなブックマークに追加 このエントリーのはてなブックマーク件数

みなさんの会社では裏紙を使っていますか?

裏紙使うことの是非はともかく [www.itmedia.co.jp]、環境コンサルに相談すると「裏紙使わないのが許されるのは小学生までだよね」、とか言われるようですので、言われてしまったからには素直に裏紙使いましょう。

それで、裏紙を使うだけではなくて、実際に使った量を測定しないと環境活動にならないわけですけれども、プリンタに通した紙の枚数のチェック、いわゆるメーター確認をしないと、効果測定の計算ができず、会議で報告できないですよね。

というわけで、メーター確認をしてくれるPerlスクリプトです。

スクリプトの内容

最近のプリンタは、Webサーバを内蔵しているものが多く、ブラウザからアクセスして、特定のページにアクセスすると、メーター確認ができるようになっています。そこで、そのページをPerlのLWP::Simpleという一番簡単なアクセス手段を使って丸ごと引っ張ってきて、正規表現で、カウンタ数値を取得、表示します。

というわけで、これ作るには、プリンタにブラウザでアクセスし、HTML構造をやフレームの構造を解析して、正規表現を作る必要があります。HTMLソース見て自由気ままに作ってください。

今回は、ゼロックスのDocuPrint用です。プリンタのファームウェアのバージョンによって動かない可能性もあるので注意。

ソース

Filename: check_counter.pl (UTF-8です)

#!/usr/bin/perl
#DocuPrint Counter Check
use strict;
use warnings;
use LWP::Simple;
use utf8;
use Encode;
my $printers = [
                 { 
                   name => 'DocuPrint No.1',
                   ip   => '192.0.2.110',
                 },
                 { 
                   name => 'DocuPrint No.2',
                   ip   => '192.0.2.111',
                 },
               ];
 
foreach my $printer ( @$printers ) {
  print "$printer->{name}\n";
  print "$printer->{ip  }\n";
  print getDocuPrint_count($printer->{ip})."\n\n";
}
 
exit;
 
 
sub getDocuPrint_count {
  my $ip   = shift;
  my $html = decode( 'cp932', get('http://' . $ip . '/prcnt.htm') );
  my $regexp = q(var info=\['総プリントページ数',([\d,]+?)\]);
  my $count;
  if ( $html =~m|$regexp| ) {
    $count = $1;
  }
  return $count;
}
※実際のIPから例示用IPに書き換えていますので注意

実行結果

今回動作確認はWindowsのActivePerl 5.8.8で行っています。

D:\>check_counter.pl
DocuPrint No.1
192.2.0.110
66570

DocuPrint No.2
192.2.0.111
131128


D:\>
※実際の表示から例示用IPに書き換えていますので注意

ポイント

プリンタから出てくるHTML文書のcharsetがShift_JISだったので、LWP::SimpleモジュールのgetメソッドでHTML文書を読み込んだあと、キャラクターエンコーディングがCP932であると見なし、use utf8;でutf8プラグマを有効にしたPerlにおいて扱いやすい、UTF-8 flagが上がったUTF-8文字列に変換しちゃっています(decodeっていうところ)。

UTF-8 flagが上がったUTF-8文字列になってしまえば、正規表現で日本語文字列による検索がしやすくなりますので、キャラクターエンコーディングは意識した方がいいというお話でした。

補足

このプログラムをメールで送信するように改造して、cron(UNIXライクなOS)やらAT(Windows)やらで定時実行させるようにすると、いちいちプリンタまで行ってメーター確認しなくてすみますね!

但し、プリンタの電源が付いていないとダメ。これを実行するために常にプリンタの電源を付けておくなどという本末転倒なことは、くれぐれもなさらぬよう。

1 TrackBack

TrackBack URL: http://perl-mongers.org/MT/mt-tb.cgi/52

実用! Perlでプリンタのメーター確認をする - perl-mongers.org ていうエントリを書いたはいいが、 プリンタメーカーが 裏紙専用増設用紙トレーを安価に設定し販売する 裏紙使用可能プリンタのアピール 裏紙使用時のトレイ入れ間違いの防止 プリンタメーカの環境配慮アピールができる 裏紙専用増設トレーからの仕様枚数をファームウェアで集計 数え間違え・改竄の防止 手作業による枚数カウント集計の手間を省く プリンタメーカの環境配慮アピールができる つうことをやればいいのに、と、裏紙集計を手作... Read More

1 Comment

- my $html = decode( 'cp932', get('http://' . $ip . '/prcnt.htm') );
- my $regexp = q(var info=\['総プリントページ数',([\d,]+?)\]);
+ my $html = decode( 'cp932', get("http://$ip/prcnt.htm") );
+ my $regexp = qr/var info=\['総プリントページ数',([\d,]+?)\]/;

-if ( $html =~m|$regexp| ) {
+if ( $html =~ $regexp ) {

regexpが定数ならqr{}で作っとけば軽い。

Leave a comment

About this Entry

This page contains a single entry by CL published on June 6, 2008 7:31 PM.

perl/Encode - 7bit-jis != iso-2022-jp was the previous entry in this blog.

レンタルサーバーでhello world! is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.

Categories

Pages

Creative Commons License
This blog is licensed under a Creative Commons License.
Powered by Movable Type 4.21-en