监控域名可用性并自动发信
看上一个域名,恰好处于pendingDelete状态,就是别人不要了,但还没放出来 - 估计这域名比较火,一出来很有可能会被大家抢走,于是想写个自动运行的crontab来监控其可用性,并在可用时自动发信通知。
基于目前linux下可用的命令/工具,这可以是一个简单的shell script,但我还是用自己比较熟悉的perl把这些命令粘合起来【1】 - 我的观点是shell script只是用来配置环境的,如export一些变量,设置一些alias之类的,其他一些逻辑,文本操作,perl做的很好了,而且win+linux两个平台下都可用,就不费那个神了。
【用curl获得网页内容】
太简单了:
curl www.sina.com.cn
就能返回整个页面的html代码
要是没有curl,sudo apt-get install一下
【用iconv转码】
很多中文网页的charset都是gb2312, 要在script中正确匹配,或者显示,需要转成unicode:
iconv -f gb2312 -t utf8
【解析内容并用mail发信】
针对每一行,解析需要关注的信息,比如我这里要关注的是这个域名的状态:
my @page = `curl $targetPage | iconv -f gb2312 -t utf8`; chomp @page; my $domainStatus; for my $line (@page) { if($line =~ /Status: (\w+)/) { $domainStatus = $1; } }
然后,如果状态改变,就发mail通知:
if ($domainStatus eq "pendingDelete") { print "The domain is still in pending state\n"; } else # as soon as the status is changed away from "pendingDelete", notify us! { my $message = "Hi, Baiyan:\n The domain: $targetPage is ready, please register ASAP\n"; my $sendmail = "echo '$message' | mail -s 'Urgent: Please register the domain!!!' name\@domain.com"; print $sendmail; print `$sendmail`; }
需要注意的是,为了能从本机通过mail命令发送邮件,你需要配置好你的Mail Transfer Agent,这里用的是postfix:
sudo vi /etc/postfix/main.cf
之前因为我的 myhostname, mydestination的格式不符合要求(name@machine-name), 被网易邮箱给拒了:
From MAILER-DAEMON Sat Dec 1 21:22:58 2012
From baiyanh@baiyanh-VirtualBox
给来改成了:
From MAILER-DAEMON Sat Dec 1 23:10:20 2012
From baiyanh@baiyanh.com
就可以了,但是发给qq邮箱还是有问题:说我的邮件内容像是自动发的。。。
具体发送失败,可以看:(事实上,用mutt格式会更好些)
Mail version 8.1.2 01/15/2001. Type ? for help.
"/var/mail/baiyanh": 11 messages 11 new
>N 1 MAILER-DAEMON@bai Sat Dec 1 21:22 73/2597 Undelivered Mail Returned to Sender
N 2 MAILER-DAEMON@bai Sat Dec 1 21:23 73/2576 Undelivered Mail Returned to Sender
N 3 MAILER-DAEMON@bai Sat Dec 1 21:35 72/2556 Undelivered Mail Returned to Sender
N 4 MAILER-DAEMON@bai Sat Dec 1 22:56 70/2302 Undelivered Mail Returned to Sender
N 5 MAILER-DAEMON@bai Sat Dec 1 22:57 70/2302 Undelivered Mail Returned to Sender
N 6 MAILER-DAEMON@bai Sat Dec 1 22:57 70/2302 Undelivered Mail Returned to Sender
N 7 MAILER-DAEMON@bai Sat Dec 1 22:58 70/2302 Undelivered Mail Returned to Sender
N 8 MAILER-DAEMON@bai Sat Dec 1 22:59 70/2302 Undelivered Mail Returned to Sender
N 9 MAILER-DAEMON@bai Sat Dec 1 23:01 73/2470 Undelivered Mail Returned to Sender
N 10 MAILER-DAEMON@bai Sat Dec 1 23:07 74/2492 Undelivered Mail Returned to Sender
N 11 MAILER-DAEMON@bai Sat Dec 1 23:10 75/2605 Undelivered Mail Returned to Sender
& 1
然后输入数字读取相信邮件,可以看到详细的错误信息,比如163即使告诉你:http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html
【设置cron job每个5分钟监控】
*/5 * * * * ~/tools/monitor
【问题:如何处理ajax】
curl只能拿到刚load时的web页面页面,如果有ajax存在,那些内容是无法拿到的,比如万网的注册信息:
http://www.net.cn/domain/searchresult/?keyword=douban&suffix=.com&domaintype=en#searchAnchor
后来用了朋友的网站上的信息,可以直接拿到:
http://www.kingtoo.com/reg/whois.asp?domain=douban.com
这是个需要解决的问题,如果目标网站只在ajax中披露重要信息,就无法拿到了。
【1】https://gist.github.com/4186334