おうちゃくん

アクセスカウンタ

zoom RSS FAX受信スクリプトエンジン(Perl)

<<   作成日時 : 2009/04/05 00:23   >>

ブログ気持玉 0 / トラックバック 1 / コメント 9

スクリプト本体で指定するパス(/usr/local/bin/faxget.pl)に以下のスクリプトを配置します。

FAX番号、パスワード、サービスURL、保存先ディレクトリは、スクリプト本体から指定されますが、
エンジンスクリプト内に設定すれば、エンジンスクリプト単体で使用することも出来ます。

-- ここからスクリプト
#!/usr/bin/perl

use Getopt::Long;
use Encode;
#use Image::Magick;

#↓環境に合わせて適当にいじってください
$telno = ""; #-- FAX番号
$passwd = ""; #-- ログインパスワード
$urlbase = ""; #-- 通知サービスURL
$dirbase = $ENV{HOME}."/FAX/"; #-- データ保存先ディレクトリ

#-- 引数取得
GetOptions(
'id=s' => \$telno,
'password=s' => \$passwd,
'url=s' => \$urlbase,
'directory=s' => \$dirbase
);

$dirinf = $dirbase."inf/"; #-- 受信情報保存ディレクトリ
$dirtif = $dirbase."tif/"; #-- 受信画像保存ディレクトリ(TIFF形式)
$dirpdf = $dirbase."pdf/"; #-- 受信画像保存ディレクトリ(PDF形式)
$log = $dirbase."log"; #-- 受信履歴(CSV形式)

#-- コマンド選択
$usecmd;
foreach my $cmd ("curl", "wget") {
foreach my $key (split(/:/, $ENV{PATH})) {
if (-f "$key/$cmd" and -x _) {
$usecmd = $cmd;
last;
}
}
last if length($usecmd);
}
unless (length($usecmd)) {
print STDERR "必要なコマンド(curl or wget)が見つかりません。\n";
exit 1;
}

#-- ディレクトリ作成
unless (-d $dirbase) {
mkdir $dirbase;
chmod 0777, $dirbase;
}

unless (-d $dirinf) {
mkdir $dirinf;
chmod 0777, $dirinf;
}

unless (-d $dirtif) {
mkdir $dirtif;
chmod 0777, $dirtif;
}

#-- サービス選択(着信お知らせ/FAX)
%values = (
'func_id','SelSrv',
'submit_fax','FAXお知らせメール',
);

$html = &gethtml($urlbase."servlet/utils/as_mcas.cgi",%values);

$auth_id = &getprm($html,"auth_id");
$FUNC_ID = &getprm($html,"FUNC_ID");
$stype = &getprm($html,"stype");
$errorcnt = &getprm($html,"errorcnt");
$AGENT = &getprm($html,"AGENT");

unless (length($auth_id)) {
print STDERR "サイトにアクセスできませんでした。\n";
exit 1;
}

#-- ログイン
%values = (
'auth_id' ,$auth_id,
'FUNC_ID' ,$FUNC_ID,
'stype' ,$stype,
'errorcnt' ,$errorcnt,
'AGENT' ,$AGENT,
'tel_no' ,$telno,
'password' ,$passwd,
'next_button','次へ',
);

$html = &gethtml($urlbase."servlet/utils/as_mcas.cgi",%values);

$AUTH_ID = &getprm($html,"AUTH_ID");
$type = &getprm($html,"type");
$SESSION_ID = &getprm($html,"SESSION_ID");
$USER_ID = &getprm($html,"USER_ID");
$AGENT = &getprm($html,"AGENT");
$SERVICE = &getprm($html,"ASERVICEGENT");
$E164NUM = &getprm($html,"E164NUM");
$PAGE_ID = &getprm($html,"PAGE_ID");

unless (length($AUTH_ID)) {
print STDERR "サイトのログインに失敗しました。\n";
exit 1;
}

#-- 受信済FAX一覧取得

%values = (
'AUTH_ID' ,$AUTH_ID,
'type' ,$type,
'faxtomail_view','受信FAXの内容確認',
'SESSION_ID' ,$SESSION_ID,
'USER_ID' ,$USER_ID,
'AGENT' ,$AGENT,
'PAGE_ID' ,$PAGE_ID,
'E164NUM' ,$E164NUM,
);

$html = &gethtml($urlbase."servlet/utils/SendPage",%values);

#-- テーブルを分解して受信FAX一覧を取得

$tbl = $html;
$tbl =~ s/(\<[\/]*table)[^\>]*(\>)/\xff/gi;
$tbl =~ s/^[^\xff]+\xff([^\xff]+)\xff[^\x00]*/$1/;
$tbl =~ s/\<t[rd][^\>]*\>//gi;
$tbl =~ s/[\x20\r\n]//g;
$tbl =~ s/\<\/tr\>/\n/gi;
$tbl =~ s/\<\/t[hd]\>/\t/gi;
$tbl =~ s/\<\/tr\>/\n/gi;

$AUTH_ID = &getprm($html,"AUTH_ID");
$SESSION_ID = &getprm($html,"SESSION_ID");
$USER_ID = &getprm($html,"USER_ID");
$AGENT = &getprm($html,"AGENT");
$page_num = &getprm($html,"page_num");
$total_page_num = &getprm($html,"total_page_num");
$E164NUM = &getprm($html,"E164NUM");

unless (length($AUTH_ID)) {
print STDERR "受信FAX一覧を取得できませんでした。\n";
exit 1;
}

%values = (
'AUTH_ID' ,$AUTH_ID,
'delete_button' ,'削除',
'SESSION_ID' ,$SESSION_ID,
'USER_ID' ,$USER_ID,
'AGENT' ,$AGENT,
'page_num' ,$page_num,
'total_page_num' ,$total_page_num,
'E164NUM' ,$E164NUM,
);

$cnt = 0;

#-- 受信履歴のヘッダを出力
unless (-f $log) {
if (open(LOG,">".$log)) {
$head = "発信電話番号\t受信日時\t受信枚数\t受信サイズ\t受信結果\n";
Encode::from_to($head, 'utf-8', 'shiftjis');
print LOG $head;
close(LOG);
chmod 0666, $log;
}
}

# 受信リストファイルをオープン
open(LIST,">".$dirinf."new.txt");

foreach $lists( split(/\n/,$tbl) ) {
@list = split(/\t/,$lists);
if ( $list[0] =~ /^([0-9]+)/ ) {
#-- 受信情報を抽出
$no = $1;
$list[2] =~ s/[^0-9]//g;
$list[3] =~ s/^([0-9]+).*$/$1/;
$list[4] =~ s/^([0-9]+).*$/$1/;

if ( $list[7] =~ /AHREF=\"([^\"]+)\"/ ) {
$urlimg = $1;
$urlimg =~ s/\.\.\///g;

$pid = $list[2];
$pid =~ s/^(\w{4})(\w{4})(\w{4})(\w{2})/$1-$2-$3-$4/;
$time = $list[2];
$time =~ s/^(\w{4})(\w{2})(\w{2})(\w{2})(\w{2})(\w{2})/$1\/$2\/$3 $4:$5:$6/;

unless (-f $dirtif.$pid.".tiff") {
#-- FAX情報を出力
open(FILE,">".$dirinf.$pid.".txt");
print FILE $list[1]."\n";
print FILE $list[3]."\n";
print FILE $list[4]."\n";
print FILE $list[5]."\n";
close(FILE);

#-- 受信履歴を出力
open(LOG,">>".$log);
print LOG "$list[1]\t$time\t$list[3]P\t$list[4]KB\t$list[5]\n";
close(LOG);

#--- 受信リストを出力
print LIST $dirtif.$pid.".tiff\n";

#-- TIFFファイルの受信
if ($usecmd eq "wget") {
$cmd = "wget -q -O ".$dirtif.$pid.".tiff --no-check-certificate '".$urlbase.$urlimg."'";
}
else {
$cmd = "curl -s -S -o ".$dirtif.$pid.".tiff '".$urlbase.$urlimg."'";
}
$result = "";
close(HTMLWGET);

#-- PDFへ変換
#$img = Image::Magick->new;
#$img->Read($dirtif.$pid.".tiff");
#$img->Negate();
#$img->Write($dirpdf.$pid.".pdf");
#undef $img;

}
}

#-- 削除用パラメータ
$receiveId = &getprm($html,"receiveId".sprintf("%d",$no-1));
$callernotifyno = &getprm($html,"callernotifyno".sprintf("%d",$no-1));
$file_path = &getprm($html,"file_path".sprintf("%d",$no-1));
$del_check = &getprm($html,"del_check".sprintf("%d",$no-1));
$data_size = &getprm($html,"data_size");

if ($no >= 5) {
$values{"receiveId".sprintf("%d",$no-1)} = $receiveId;
$values{"callernotifyno".sprintf("%d",$no-1)} = $callernotifyno;
$values{"file_path".sprintf("%d",$no-1)} = $file_path;
$values{"del_check".sprintf("%d",$no-1)} = $del_check;
$values{"data_size"} = $data_size;
$cnt++;
}
}
}

# 受信リストファイルのクローズ
close(LIST);
chmod 0666, $dirinf."new.txt";

if ( $cnt ) {
#-- 受信済みデータの削除(データがある場合のみ)
$html = &gethtml($urlbase."servlet/fax/FaxtoMailVeiw",%values);
}
exit 0;

sub gethtml {

#-- wgetで指定URLからのHTMLを受信する
#-- POSTデータがある場合は、エンコードして送信

my ( $url , %prm ) = @_ ;
my $prmlist = "" , $key = "" , $value = "" , $cmd = "" , $result = "";
while ( ( $key, $value ) = each ( %prm ) ) {
$value =~ s/([^\w\x20])/'%'.unpack('H2', $1)/eg;
$value =~ tr/\x20/+/;
$prmlist .= "&" if ( $prmlist ne '' );
$prmlist .= $key."=".$value;
}

if ($usecmd eq "wget") {
$cmd = "wget '".$url."' -q -O /dev/stdout --no-check-certificate";
$cmd.= " --post-data '".$prmlist."'" if ( $prmlist ne '' );
}
else {
$cmd = "curl '".$url."'";
$cmd.= " --data '".$prmlist."'" if ( $prmlist ne '' );
}

open(HTMLWGET,$cmd." 2\>\&1 |");
while(<HTMLWGET>) {
$result.=$_;
}
close(HTMLWGET);

return $result;
}

sub getprm {

#-- HTML内のフォームからSUBMIT用データを抽出する

my ( $htmldata , $prmname ) = @_ ;
my $result = "";

$result = $1 if ( $htmldata =~ /name[\x20]*\=[\x20]*[\"\']$prmname[\"\'][\x20\,]+value[\x20]*\=[\x20]*[\"\']([^\"\']+)[\"\']/ );

return $result;
}


月別リンク

ブログ気持玉

クリックして気持ちを伝えよう!
ログインしてクリックすれば、自分のブログへのリンクが付きます。
→ログインへ

トラックバック(1件)

タイトル (本文) ブログ名/日時
「FAXお知らせメール」サービスで受信スクリプトを作成(Mac OSX用)
ひかり電話の「FAXお知らせメール」というサービスに加入しました。 NTT側のサーバでFAXを受信してくれて、受信FAXをブラウザからダウンロードできるサービスなのですが、ログインからFAXをダウンロードするという一連の手順が面倒だったので、受信スクリプトを作成することにしました。 ...続きを見る
おうちゃくん
2009/04/05 00:28

トラックバック用URL help


自分のブログにトラックバック記事作成(会員用) help

タイトル
本 文

コメント(9件)

内 容 ニックネーム/日時
フ璢珸竟 @? ?V瑙韃 ?趺P??@?Liska (ヒ頌?), 鉅?? 趺P??@???粢 Liska (ヒ頌?), ???趺P??@?褥褞 Liska (ヒ頌?), 趺P??@????Liska (ヒ頌?), ?聰鉅Z 趺P??@? @?Liska (ヒ頌?).
liskaere
2012/03/02 09:21
フ璢珸竟 @? @?鉅? 粢?2011 趺P??Liska (ヒ頌?), 趺P??@? 糺???瑣?Liska (ヒ頌?), 趺P??@??肛 B褊G?Liska (ヒ頌?), 趺P??@???韈 Liska (ヒ頌?), ?C瑟 趺P??@?Liska (ヒ頌?).
liskaeru
2012/03/08 20:31
フ??裝?聰褌: xrumer 5.0 palladium, xrumer 5 demo, 璞瑣??B??xrumer, 璞瑣?xrumer 7 elite, xrumer 5.0 palladium. マ胙瑟? XRumer (xrumer 5.0 砒??.
Aruumed
2012/03/18 12:33
フ璢珸竟 @? kenzo 趺P??@?@?Liska (ヒ頌?), 趺P??@? 2010 Liska (ヒ頌?), ecco @?趺P?????Liska (ヒ頌?), 鉅?? @?趺P?? 鞴??Liska (ヒ頌?), 趺P??@?韜B??G鈔C籵 Liska (ヒ頌?). ム琺? http://zimnyayaobuv.ru/
liskaere
2012/03/22 20:37
フ璢珸竟 @? ?聰鉅Z 趺P??@???[??珸褞A Liska (ヒ頌?), 趺P??@???[??珸褞A Liska (ヒ頌?), ecco 趺P??@?Liska (ヒ頌?), ?瑰鞣? 趺P??@?Liska (ヒ頌?), 鉅?? A?@?趺P??Liska (ヒ頌?). ム琺? http://zimnyaya-obuv.ru/
Tuiyaere
2012/03/29 00:57
フ??裝?聰褌: 矜鈞 ??蓁?xrumer, xrumer 4 platinum edition, 琺 xrumer, xrumer ??, ?B??xrumer. マ胙瑟? XRumer (褞 3 璞瑣?. ム琺?http://x-rumer.ru/
Reumed
2012/04/06 09:42
フ璢珸竟 ?裲?Z?鞳瑩? ?裲?Z?鞳瑩褪 ?? ?鞣瑙A? 鈞?珞? 蓁??裲?Z?鞳瑩?pons, ?裲??鞳瑩褪 ?? ??? C粢? ?裲??鞳瑩褪, ?裲?Z?鞳瑩褪 jnpsds.
Raskaery
2012/04/20 14:42
フ璢珸竟 ?裲?Z?鞳瑩? ?? ?裲??鞳瑩褪 C鍄糺 糅璞裨, ?裲??鞳瑩褪 韲?頤, 鈞? 瑰?蓁??裲?Z?鞳瑩? ?裲?Z?鞳瑩褪 碣韈, ?裲??鞳瑩褪 king ego kgo. ム琺?http://elektronnyesigarety.tv/
Raskaery
2012/04/23 20:11
フ??裝?聰褌: 鳰?xrumer, xrumer 2.5, xrumer 5.09, xrumer 7.0 elite 璞瑣? xrumer. マ胙瑟? XRumer (xrumer 7). ???? 琺?
Teumed
2012/05/24 01:06

コメントする help

ニックネーム
本 文
FAX受信スクリプトエンジン(Perl) おうちゃくん/BIGLOBEウェブリブログ
文字サイズ:       閉じる