源于2004年01月01日在鼓浪听涛图书馆版的这个讨论,好像ganr已经在找人做了,不知道进展如何。今天吃饱了花了几个小时做了一个简约版本,这个版本适合自己有linux的机器,必须有perl和一些必要的module,首先修改最开始的变量,设置自己的用户名,图书证号,密码,电子邮件,把脚本加入crontab,每天4点运行,如果有书快到期了,脚本会自动给你的mail发一封信。如果你有兴趣,可以重新包装我的这个脚本,做成多用户,让用户可以注册可以修改数据,把用户数据保存入mysql,每天4点开始更新一下数据,完了给所有将要过期的人发mail,好像也不是太难咯:)

源代码请点击详细信息查看,本代码只提供一种思路,你可以任意修改,本人概不对使用本程序后造成图书丢失,超期,CPU烧毁,妻离子散等事负责。

#!/usr/bin/perl  

#Written by Haishion @ xmubbs  

#blog: http://dog.xmu.edu.cn  

#email: haishanzheng AT sina DOT com  

use strict 'vars';  

#在这里定义变量,改变成你自己的用户名和密码  

my $v_regname = "RegName";  

my $v_cardno = "";  

my $v_passwd  = "Password";  

my $alarm_day = 7;							#需要几天开始提醒你?  

my $mailprog = "/usr/lib/sendmail";			#email发送程序的位置  

my $youremail = "xxx\@xxx.com";		#发送给的email地址,注意 @ 前面有一个 \  

#==============================除非你知道你在干吗,不要修改下面的语句====================  

use LWP::UserAgent;  

use HTTP::Request;  

use HTTP::Response;  

my ($myurl, $ua, $request, $response);  

my ($content);  

my ($line);  

my ($w_rdrecno, $v_rdrecno);  

my ($book_title, $return_date);  

$ua = new LWP::UserAgent;			  

$myurl = "http://210.34.4.10/cgi-bin/confirmuser?v_newuser=0&v;_cardno=$v_cardno&v;_regname=$v_regname&v;_passwd=$v_passwd";  

$request = new HTTP::Request('GET', $myurl);  

$response = $ua->request($request);			  

foreach $line (split(/\n/, $response->content)) {  

	if ($line =~ m|<INPUT TYPE=hidden name=v_regname value=(.*?)>|) {  

		$v_regname = $1;  

	}  

	if ($line =~ m|<INPUT TYPE=hidden name=w_rdrecno value=(.*?)>|) {  

		$w_rdrecno = $1;  

	}  

	if ($line =~ m|<INPUT TYPE=hidden name=v_cardno value=(.*?)>|) {  

		$v_cardno = $1;  

	}  

	if ($line =~ m|<INPUT TYPE=hidden name=v_rdrecno value=(.*?)>|) {  

		$v_rdrecno = $1;  

	}  

}  

my $alarm_date = time();  

$alarm_date += $alarm_day * 60 * 60 * 24;  

my ($sec, $min, $hour, $mday, $mon, $year, $wday, $ydat, $isdst) = localtime($alarm_date);  

$year += 1900;  

$mon++;  

$alarm_date = sprintf("%04d%02d%02d", $year, $mon, $mday);  

$myurl = "http://210.34.4.10/cgi-bin/SrchLoan?v_regname=$v_regname&w;_rdrecno=$w_rdrecno&v;_cardno=$v_cardno&v;_rdrecno=$v_rdrecno";  

$request->url($myurl);  

$response = $ua->request($request);			  

$content = $response->content;  

$content =~ s/\s+/ /g;  

$content =~ s/<\/tr>/<\/tr>\n/g;  

foreach $line (split(/\n/, $content)) {  

		if ($line =~ m|<tr>\s*<td .*?><font .*?>题名</font></td>\s*<td .*?>(.*?)</td>\s*<td .*?><font .*?>责任者</font></td>\s*<td .*?>(.*?)</td>\s*</tr>|) {  

#			print "\n\n题名$1 责任者$2\n";  

			$book_title = $1;  

			next;  

		}  

		if ($line =~ m|<tr>\s*<td .*?><font .*?>索取号</font></td>\s*<td .*?>(.*?)</td>\s*<td .*?><font .*?>条码号</font></td>\s*<td .*?>(.*?)</td>\s*<td .*?><font .*?>馆藏地点</font></td>\s*<td .*?>(.*?)</td>\s*<td .*?><font .*?>流通类型</font></td>\s*<td .*?>(.*?)</td>\s*</tr>|) {  

#			print "索取号$1 条码号$2\n";  

			next;  

		}  

		if ($line =~ m|<td .*?><font .*?>借出日期</font></td>\s*<td .*?>(.*?)</td><td .*?><font .*?>应还日期</font></td>\s*<td .*?>(.*?)</td>|) {  

			$return_date = $2;  

#			print "借出日期$1 应还日期$2\n\n\n";  

#			print "$alarm_date $return_date\n\n";  

			if ($alarm_date >= $return_date) {  

				print "$book_title 这本书你得还了。。。\n";  

				mailto($youremail, $youremail, "$book_title 这本书你得还了。。。\n", "$book_title 这本书你得还了。。。\n");  

			}  

			next;  

		}  

}  

sub mailto() {  

	my ($fromemail, $toemail, $title, $content) = @_;  

	open(MAIL, "|$mailprog -f $toemail -t") or die;   

	# Create headers   

	print MAIL "From: $fromemail\n";  

	print MAIL "To: $toemail\n";  

	print MAIL "Subject: $title\n";  

	print MAIL "\n\n$content\n";  

	close(MAIL);   

}