Skip to content

Instantly share code, notes, and snippets.

@andrewshulgin
Last active January 21, 2017 12:02
Show Gist options
  • Save andrewshulgin/bba50a7ef6a09cb55e6d to your computer and use it in GitHub Desktop.
Save andrewshulgin/bba50a7ef6a09cb55e6d to your computer and use it in GitHub Desktop.
#!/usr/bin/python2
# -*- coding: utf-8 -*-
import sys, signal, httplib, urllib, json
# Ловим ^C
def user_interrupt(signal, frame):
sys.exit(0)
signal.signal(signal.SIGINT,user_interrupt)
kiev = "2200001"
lvov = "2218000"
odessa = "2208001"
departSt = kiev
arriveSt = odessa
departDt = "04.05.2013"
# Запрос
params = urllib.urlencode({
# ID станции отправления
"station_id_from": departSt,
# ID станции прибытия
"station_id_till": arriveSt,
# Дата отправления ЧЧ.ММ.ГГГГ
"date_dep": departDt,
# Время отправления
"time_dep": "00:00"
})
# Обязательные хедеры
headers = {
"Content-type": "application/x-www-form-urlencoded",
"GV-Ajax": "1",
"GV-Referer": "http://booking.uz.gov.ua/ru/"
}
# Хост
conn = httplib.HTTPConnection("booking.uz.gov.ua:80")
# Адрес, куда отправляем запрос
conn.request("POST", "/ru/purchase/search/", params, headers)
response = conn.getresponse()
# Если HTTP ошибка, показываем это
if response.status != 200:
print "Error:", response.status, response.reason
sys.exit(0)
data = response.read()
conn.close()
# Парсим JSON
data = json.loads(data)
# Если ошибка БД (нету поездов итдитп), показываем это
if data['error'] == True:
print "Error:", data['value']
sys.exit(0)
# Считаем поезда
numTrains = len(data['value'])
# Для каждого поезда показываем
for train in xrange(0,numTrains):
# № поезда
# Начальная
# Тире
# Конечная
print data['value'][train]['num'], data['value'][train]['from']['station'], "-", data['value'][train]['till']['station']
# Часы отправления с выбранной станции
departHr = str(data['value'][train]['from']['date_format']['hours']).zfill(2)
# Минуты отправления с выбранной станции
departMn = str(data['value'][train]['from']['date_format']['minutes']).zfill(2)
# Часы прибытия на выбранную станцию
arriveHr = str(data['value'][train]['till']['date_format']['hours']).zfill(2)
# Минуты прибытия на выбранную станцию
arriveMn = str(data['value'][train]['till']['date_format']['minutes']).zfill(2)
print(departHr+":"+departMn)
print(arriveHr+":"+arriveMn)
# Считаем классы
numClasses = len(data['value'][train]['types'])
# Для каждого класса показываем
for carClass in xrange(0,numClasses):
# Шифр класса (Л = Люкс, К = Купе, С1 = 1 Класс в общем вагоне)
# Количество свободных мест
print data['value'][train]['types'][carClass]['letter'], data['value'][train]['types'][carClass]['places']
# Для пущего удобства принтим пустую разделительную линию между поездами
if train < numTrains-1:
print
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment