def test(): """Various information query via command line. Usage: query [-dgktz] <from> <to> <date> Arguments: from 出发站 to 到达站 date 查询日期 Options: -h, --help 显示该帮助菜单. -dgktz 动车,高铁,快速,特快,直达 Go to https://github.com/protream/tickets for usage examples. """ if args.is_asking_for_help: exit_after_echo(cli.__doc__, color=None) elif args.is_querying_train: result = query(args.as_train_query_params) else: exit_after_echo(show_usage.__doc__, color=None) result.pretty_print()
def _from_station_telecode(self): # import chardet # print chardet.detect(self.from_station) # 检查输入编码--调试用 code = self.stations.get(self.from_station) if not code: exit_after_echo(FROM_STATION_NOT_FOUND) return code
def cli(): """train tickets query via command line. Usage: ttk -h ttk --help ttk [-dgktz] <from> <to> <date> Arguments: from 出发站 to 到达站 date 查询日期 Options: -h, --help 显示该帮助菜单. -dgktz 动车,高铁,快速,特快,直达 Note: 在输入日期参数的时候注意避免歧义,比如日期2016111将会被 解析成2016-11-01,而不是2016-01-11.要输入2016-1-11请输 入20160111,注意解析出来就是2016-1-11,其他歧义类似处理. """ if args.is_asking_for_help: exit_after_echo(cli.__doc__, color=None) elif args.is_querying_train: from train import query result = query(args.as_train_query_params) result.pretty_print() else: exit_after_echo(show_usage.__doc__, color=None)
def query(self): params = self._build_params() r = requests_get(QUERY_URL, params=params, verify=False) rows = [] try: rows = r.json()['data']['datas'] # 得到json查询结果 except KeyError: rows = [] except TypeError: exit_after_echo(NO_RESPONSE) except ValueError: rows = [] query_date = self._valid_date return TrainsCollection(rows, self.opts, query_date, self.from_station, self.to_station)
def query(self): params = self._build_params() try: r = requests.get(QUERY_URL, params=params, verify=False) except ConnectionError: exit_after_echo(NETWORK_CONNECTION_FAIL) try: rows = r.json()['data']['datas'] except KeyError: rows = [] except TypeError: exit_after_echo(NO_RESPONSE) return TrainsCollection(rows, self.opts)
def _valid_date(self): """Check and return a valid query date.""" date = self._parse_date(self.date) if not date: exit_after_echo(INVALID_DATE) try: date = datetime.datetime.strptime(date, '%Y%m%d') except ValueError: exit_after_echo(INVALID_DATE) # A valid query date should within 50 days. offset = date - datetime.datetime.today() if offset.days not in range(-1, 50): exit_after_echo(INVALID_DATE) return date.strftime('%Y-%m-%d')
def _valid_date(self): """Check and return a valid query date.""" date = self._parse_date(self.date) if not date: exit_after_echo(INVALID_DATE) try: date = datetime.strptime(date, '%Y%m%d') except ValueError: exit_after_echo(INVALID_DATE) # A valid query date should within 50 days. offset = date - datetime.today() if offset.days not in range(-1, 50): exit_after_echo(INVALID_DATE) return datetime.strftime(date, '%Y-%m-%d')
def _to_station_telecode(self): code = self.stations.get(self.to_station) if not code: exit_after_echo(TO_STATION_NOT_FOUND) return code
def _from_station_telecode(self): code = self.stations.get(self.from_station) if not code: exit_after_echo(FROM_STATION_NOT_FOUND) return code