More
More

CheBus2Mail 实时公交信息(邮件版)踩坑记

  • 前景

    在寒冬,于北京。错过一辆晚高峰的公交就好比全世界从你身边路过。

    需求是第一生产力,公交集团推出了查询实时公交的微信公众号,无奈不准确且不稳定,用户体验差。随后某度地图与其合作将此功能结合到了自己的产品中,公交实时定位基本准确。查询总共分三步:①把冰箱门打开 ①输入公交车次号;②选择公交开往方向;③选择乘坐站点。查询结果会告诉你,离你最近的三辆公交距离你还有几站。

    那么问题来了,我每天就是要从公司坐同一趟车回家,车次、方向、站点、时间基本固定。根据查询结果的距离站点数,决定我出门候车时间。可以极大降低因候车时间,从而减少雾霾吸收量。然而,不愉快的事我每天需要抽出时间打开它那沉重的APP,输入相同的数字,点击重复的操作才能得到我想要的数据。这么一来,需求很明确了,我们需要一个定时推送实时公交信息的功能的喔~

  • 思路

  1. 爬虫:nodejs也好、python也好、java也好。能爬到数据的就是好爬虫;
  2. 解析:抓取后数据处理,提取关键信息;
  3. 推送:微信也好、QQ也好、邮件也好。不需要认证审核、消息数量无限制、开发代价小,那么首选就是邮件了。
  • 难点

    门神:起初由于最近刚自学了nodejs,看到它可以写爬虫,就尝试用它来抓取网页数据。然而公交集团的php网站做了类似cookie校验的措施。ajax请求无情的抛回来“timeout”。也尝试过模仿请求头来请求,也吃了闭门羹。这种防爬虫的措施,让我不得不放弃几行代码就能实现爬虫的nodejs,而改用主要用于自动化测试的java ==selenium==。

    版本:selenium需要浏览器驱动(如:chromedriver.exe)的辅助。新版本的浏览器可能出现不支持的情况!如果你在本机运行selenium启动浏览器没问题,在服务器运行报错。jar包引入等都没问题情况下,查询浏览器版本吧。

    定时:==ScheduledExecutorService==实现定时效果。

    运行:在本机,将java project打成runnable jar。win7下直接双击可直接执行,而放到window server 2008服务器上却执行不了,甚是郁闷。研究jre/jvm配置后无果,变通采用==exe4j==工具,将jar打成exe可执行文件。顺带支持自定义logo。

    image

  • 效果

    每天下班时间邮箱收到抓取后的公交信息邮件。

    image

  • 源码

    保护水表,暂不开源。

打赏
手机扫一扫,支持CHE~