Exemplo n.º 1
0
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()
Exemplo n.º 2
0
 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
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
    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)
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
    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')
Exemplo n.º 7
0
    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')
Exemplo n.º 8
0
 def _to_station_telecode(self):
     code = self.stations.get(self.to_station)
     if not code:
         exit_after_echo(TO_STATION_NOT_FOUND)
     return code
Exemplo n.º 9
0
 def _to_station_telecode(self):
     code = self.stations.get(self.to_station)
     if not code:
         exit_after_echo(TO_STATION_NOT_FOUND)
     return code
Exemplo n.º 10
0
 def _from_station_telecode(self):
     code = self.stations.get(self.from_station)
     if not code:
         exit_after_echo(FROM_STATION_NOT_FOUND)
     return code