前一篇博客中说到我买票失败的经历,也充分表达了我想买一张二手座票的意愿。怎么办呢?只好到网上各二手火车票信息平台去找了。心肠不好的人肯定幸灾了祸地在想:“哈哈,这个倒霉的小伙儿该对着浏览器不停地按 F5 了!” 你才 F5 呢,你们全家都 F5。那是典型的 Windows 用户的想法,不要以为 Linux User 跟你一样傻。
前面都是玩笑话 :),本文只是想介绍一下在 Linux 下有什么更方便的方法来追踪网页发布的信息,以展示 Linux 的命令行工具有多强大(也响应一下 Eric 师兄的文章:完全用键盘工作-3:常用的命令行工具)。
我们就拿火车网为例,通常情况下 Windows 用户为了在火车网上找一张二手火车票信息,会不断地到查询页面刷新,看有没有自己需要的车票。而一个 Linux 用户的做法会有何不同呢?一般来讲他会用工具来做这件事情,而不是在那傻刷,浪费时间。
怎么做呢?有很多种方法,我这里来介绍一种比较好玩的方法,用脚本自动跟踪信息,如果有结果就发送一个 Gtalk 消息给自己。
首先,写一个命令行发送 Gtalk 消息的 Python 脚本。其实我本打算用 freetalk 来做这件事的,奈何咱学识浅薄,不懂 freetalk 脚本该怎么写,也不知道 scheme 语言为何物。没办法,只好用 Python 来做了。下面内容就是用 Python 发送 gtalk 消息的脚本(需要 Linux 上装有 python-xmpp):
#!/usr/bin/env python # -*- encoding: utf-8 -*- # Usage: gtsent.py "SOMEBODY@gmail.com" "Message" import xmpp import sys login = 'USERNAME' # without @gmail.com pwd = 'PASSWORD' cnx = xmpp.Client('gmail.com', debug=[]) cnx.connect( server=('talk.google.com', 5223) ) cnx.auth(login, pwd, 'python') cnx.send(xmpp.Message(sys.argv[1], sys.argv[2]))
将以上内容保存为 gtsend.py 文件,chmod u+x gtsend.py,修改 USERNAME 和 PASSWORD 为你的另一个非[常用] gmail 帐户名和密码。这样执行 ./gtsend.py SOMEBODY@gmail.com "Message" 就可以给 SOMEBODY@gmail.com 发送消息了(当然了,前提是 SOMEBODY@gmail.com 好友列表中有 USERNAME@gmail.com,请注意这里大写只是为了方便阅读)。
其次,写一个 Shell 脚本,用来追踪网页,过滤信息并发送 gtalk 消息。这个就更简单了,使用火车网提供的查询表单接口,用 wget 抓下来,再 grep 一下即可,bash 脚本如下:
#!/bin/bash URL="http://www.huoche.com.cn/piao/2piaoserach.asp?ICheci=T65&type=0" RESULT=`wget -O - $URL | iconv -f gbk -t utf8 | grep -i -e "t65.*南京.*硬座\ .*2008-9-28"` if [ $(echo $RESULT | wc -c) -ge 5 ] then /home/solrex/gtsend.py "YOURSELF@gmail.com" "$RESULT $URL" fi
将该脚本保存为 get_tickt.sh,chmod u+x get_tickt.sh。这个脚本的工作流程是:wget 以 GET 方式提交对 T65 转让车票的查询,得到的结果输出到标准输出,然后将 GBK 编码转换为 UTF8 编码,再 grep 看是否含有“T65 南京 硬座 2008-9-28“关键词。如果有的话,用 gtsend.py 发送一个提醒消息给自己 gtalk 帐户;如果没有结果,什么都不做。
最后,将上面脚本加入 cron 列表每 10 分钟定时执行一次。 执行 crontab -e,添加下面一行即可(注意需要修改到该脚本的路径):
*/10 * * * * /home/solrex/get_ticket.sh
然后呢,你就可以高枕无忧,开着 Gtalk 等消息吧。当然,不一定能等得到 :(,唉,对我们来说, No news is BAD news!
当然,根据不同情况,你可以把追踪的信息换成别的东西。比如追女孩子的时候,可以用上面方法来实时跟踪她的最新博客,实时跟踪她在 BBS 上的留言,永远保持自己沙发的地位,说不定人家就感受到了你的关心,然后...具体方法我就不教了哈...
哈哈,我也做过类似的
提个参考意见,可以加上短信提醒,
有2种方式可以实现:
1,通过google calendar的sms提醒。每查到一个新信息就在calendar上加个事件,提醒方式设置成sms
2,通过移动的139邮箱push功能,我现在是gmail每来个email就forward给139邮箱,然后移动发短信通知到手机上
最近2年春节买火车票时,这个短信提醒帮了我和几个朋友的大忙儿了:)
来新票了,sms上就有卖家电话,直接在手机上就拨过去了
哈,没想到读我博客的还更有高手呀!
这个思路蛮不错,只是 Google Calendar 的短信功能和 139 信箱我都没用过,也不知道接口该怎么做。
Anyway,就是提供一个思路嘛,其实用 Libfetion 的库也可以直接用飞信发送 sms,只是那样要写的东西就多了...
呃,这篇blog让我想起了曾经的一件郁闷的事情……
当初心血来潮,做了个定时POP3自动读取邮箱新邮件,然后通过当时有个可以每天免费发50条短信的网站,一旦有新邮件,邮件头就发到我手机上。
刚还是还为自己的主意小高兴了一下……直到那年的除夕,我彻底后悔了,我的手机被一下子拥来的信春祝福邮件给搞得内存撑暴了>_<
"你才 F5 呢,你们全家都 F5。"
这话有气势,哈哈!
我觉得还是继续教一下吧,下一步最难了
不错啊
有一个问题,要是涉及的cookies的有什么好办法?比如需要登录的论坛之类的
很好很强大!
文博兄果然是高人,学以致用!
[Comment ID #273880 Will Be Quoted Here]
涉及 Cookies 的话,wget 有 Cookies 的参数:
--load-cookies file
--save-cookies file
--keep-session-cookies
相信这几个参数够用了,如果不够好用的话,你也可以用 python 写
python 有 httplib,也非常好用
[Comment ID #273883 Will Be Quoted Here]
受教了,谢谢啊!
"你才 F5 呢,你们全家都 F5。"
似乎激进了点,而且语气中带有点歧视嫌疑……不过,打破了solrex兄的一向传统风格,堪称强调句中的经典。
我倒是把你的xmpp的脚本写成了从 sys.stdin 读的。这样的话,就可以管道了。
我一般要存档的程序的运行结果,都是
some_command | gpipe
这样,就直接扔到gmail 聊天记录里面去了
文本文件就cat 一下也就进去了 这样, 重要的信息在gmail 里面就有备份 也非常好查找
这个相当牛,十分受教。
哇 好用 实在太赞啦
既然都要动用python了,那后面用wget的地方用python不也一样吗?
觉得Windows用户的用户都比他傻,这是典型的linux宗教狂热者的想法。可是你居然连scheme都不知道是何物,也只能算个盲目的狂热者了。
[Comment ID #275039 Will Be Quoted Here]
后面 wget 的地方之所以不用 Python 是有考虑的,因为那个发送 Gtalk 消息的可以作为一个模块单独使用,而且 Python 的 httplib 用起来也不见得比 shell 方便。
文章中的激进语句完全是噱头而已,看官可以不必在意。至于批评我不懂 Scheme,实在是本人才疏学浅,自觉汗颜 :)
我很不明白的一个问题是:为什么留言批评我的人,从来就没有一个留下过真实的 email 和网址?难道用一个真实 email 的勇气都没有吗?
一个评论者的名字只是个称呼而已,你可以不必在意。我没网址,电子邮件只做公用,见谅。
好东西的说,有点意思。
前一篇博客中说到我买票失败的经历,也充分表达了我想买一张二手座票的意愿。怎么办呢?只好到网上各二手火车票信息平台去找了。心肠不好的人肯定幸灾了祸地在想:“哈哈,这个倒霉的小伙儿该对着浏览器不停地按 F5 了!” 你才 F5 呢,你们全家都 F5。那是典型的 Windows 用户的想法,不要以为 Linux User 跟你一样傻。
-----------------------
我觉得也是个盲目的狂热者,windows用户基本都是不懂计算机,是外行人,嘲笑外行人有意思吗?当你被一个物理学家嘲笑的时候你会觉得羞耻嘛?
在windows用js或者vbs脚本也是可以的,用XMLHttprequest请求网页,然后用DOM分析,分析结果后,可以再发送给QQ,或者干别的事。。也用不着按f5啊~~更用不着在电脑面前蹲点,而且也在后台工作,不会妨碍你玩游戏。只能说那位仁兄只看到了windows就是窗口而已。。
现在这个方法还好用吗?可不可以针对现在的订票网调整一下文章?
现在的火车票已经是实名制了,所以二手票的情况没有了,也就是说不会有转让的方式了,火车网也关闭了这个。
比如说针对“http://www.12306.cn/mormhweb/kyfw/ypcx/” 这个地址中的余票查询链接进行一个类似本文的脚本处理,例如查询北京到南京的火车票。期待你的文章更新。
不行,输验证码那块过不了。
验证码?? 日了,这玩意儿关键时刻还是真烦人呀 那能不能找个别的贴近生活的例子呢? 比如携程网的飞机票 我记得它们的网站好像没有验证码。再说——如何看一个网站是否提供查询接口呢?