文档章节

简单,好玩,有趣的命令行版12306(golang)

l
 liyu4
发布于 2017/01/25 22:21
字数 705
阅读 10
收藏 0

##前言 17年的春节即将临近的时候,跟大多数人一样都需要抢一下回家的票,庆幸我买到了回家的票,因为目的地离家还有一段距离,所以需要知道到达的时间,然后安排下中转回家的行程。就想到如果再terminal中直接可以查就好了,接着就是google了一下,果然网上有很多类似的东西,但是查询火车时刻表的功能好像没有,那就自己写吧。

##环境

  1. chrome
  2. mac

##项目地址 https://github.com/JingDa-open-source-community/go-home

##旅途 从12306官网开始 ###查找火车时刻表api 登陆12306输入出发地和目的地,会出来很多车子,然后选择你已经买到的那趟。见下图。 打开调试工具command+shift+j),查看网络,可以看到请求的url,点击这个url可以看到返回一个json,包含了这趟车的时刻信息和其他的一些状态信息

时刻表url--》https://kyfw.12306.cn/otn/czxx/queryByTrainNo?train_no=5l000G138920&from_station_telecode=AOH&to_station_telecode=NXG&depart_date=2017-01-25,可以看到中间有train_no车次编号from_station_telecode出发站(代号) to_station_telecode到达站(代号) depart_date出发日期,重点看一下车次编号是一个经过了处理的数据,这趟车是G1389后面还带了两个数,出发城市和到达城市也是一个映射关系。google一下发现城市的映射关系保存在https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.8968,这样我们通过一些简单的处理就能得到城市和相对应的代码,很容易想到把他们放在一个map里面是再好不过的。

下面是完整的处理:

func Stations(stationTetx []byte) map[string]string {
	comp, _ := regexp.Compile("([\u4e00-\u9fa5]+)\\|([A-Z]+)")

	datas := comp.FindAll(stationTetx, -1)

	cityMap2Code := make(map[string]string, len(datas))
	for _, v := range datas {
		temp := strings.Split(string(v), "|")
		cityMap2Code[temp[0]] = temp[1]
	}
	return cityMap2Code
}

还有一个问题就是车次编号的代码是如何生成的,好在他们也是可以通过url访问到的。 https://kyfw.12306.cn/otn/resources/js/query/train_list.js?scriptVersion=1.5462 这个文件稍微有些大,我们经过一次处理保存在了本地(最好的方式是保存的mysql中,但是鉴于这是一个简单的项目就没有这样做),大概的形式是:

{
  "2017-01-03": {
    "1095": {
      "Train_no": "270000109500",
      "From": "太原",
      "To": "兰州西"
    }
    // 省略很多
 }
   

可以看到这个结构包含一趟车的时间,编号,出发地和终点。

##渲染数据 terminal中显示表格的包有很多,我用了github上的tablewriter,他的使用是很简单。你也可以加一些自己的序列化控制符,事实上我也是这样干的。

###最终效果 查询火车时刻表: 查询火车余票

© 著作权归作者所有

l
粉丝 0
博文 5
码字总数 1140
作品 0
杭州
私信 提问
astaxie/Go-in-Action

Go实战开发 写这本书主要是灵感来自于: https://github.com/thekarangoel/Projects 然后我就想到了当初做PHP的时候,也有类似的项目,觉得golang也可以实现一个类似的书籍,暂且把书名定为《...

astaxie
2015/04/10
0
0
那些年学C/C++的我做过这些项目,这些年正在学习的你们做过什么

那些年学C/C++的我做过这些项目,这些年正在学习的你们做过什么,纯属装逼娱乐,请勿模仿。 懵懂期 那时还是彩笔一个,终极版菜鸟,倒弄一些自以为很有意思的东西 作品一:(效果稍微久一点)...

这个人很懒什么都没留下
2017/12/19
0
0
Java 8 Nashorn 引擎

Java 8 Nashorn 脚本引擎 java8 终于来了.函数式接口,lambda表达式期待很久了.新的武器在手,应该可以玩出新花样. 前两天无意中发现java8 中还带了另外一个有意思的东西. Nashorn 一个javascr...

架构梦想
2014/03/25
8.2K
33
golang学习笔记(1):安装&helloworld

安装: golang编译器安装过程比较简单,也比较快,不同平台下(win/linux/macos)都比较相似; https://dl.gocn.io/golang/1.9.2/go1.9.2.src.tar.gz 下载对应的系统版本的编译器 go的版本号由...

shangluyi
2017/12/24
0
0
12306 验证码改为划线静态版

  【搜狐IT消息】1月5日,铁路客服中心12306到年底又成了大家关注的热点,与互联网公司抢票软件的口水战受到大众关注。验证码是简单一点 让大家买票体验更好,还是复杂一些防止抢票软件和黄...

oschina
2014/01/06
6.9K
77

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
3K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
5
0
用好项目管理工具,人人都可以成为项目经理

现在市面上的项目管理工具越来越多了,但是大多数都是一些协同工具或轻量项目管理工具。如果是多团队、跨部门使用或者企业级的项目管理,从管理思想到工具运用,需要适应企业的业务流程体系,...

cs平台
昨天
12
0
只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
70
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部