Pull to refresh

Comments 50

UFO just landed and posted this here
Заддосить можно все, что угодно. Но это же не повод не реализовывать программы, выполняющие полезную функцию, правда?
А шильдик «тестовая эксплуатация» там висит с момента запуска сервиса. Лет 5 уже как.
UFO just landed and posted this here

Кроме того, запуском бота с множеством пользователей возникнет проблема с обычным нормальным пользованием сервисом, так как бот будет постоянно резервировать места и совсем не факт что с последующей покупкой.

Автор, отличная работа. Вы материализовали мысль многих, кто пользуется этим сервисом
Спасибо. Рад, что кому-то кроме меня это может быть пригодиться.
Отличная идея! Спасибо, прочитал доку по боту, там есть следующее: /scan Firstname Lastname 2016-01-01 Kyiv Lviv 743K C2
Что такое C2 — Как я понял, с помощью этого можно указать тип места (плацкарт/купе и т.д.) Какие типы кроме C2 могут быть тогда, можно более развернуто?

Все верно, С2 — это тип вагона. /trains возвращает список поездов в таком виде:


Train: 013Ш
Departure time: 2016-07-01 01:08:00
Travel time: 8:52
~~~~~~~~~~
Л: 2 (Suite / first-class sleeper)
К: 10 (Coupe / coach with compartments)
П: 16 (Berth / third-class sleeper)
==========

Train: 744Л
Departure time: 2016-07-01 06:20:00
Travel time: 4:59
~~~~~~~~~~
С1: 164 (Seating first class)
С2: 403 (Seating second class)
==========

Здесь видно, что типы вагонов бывают С1, С2, Л, К, П

У Укрзализныци наверняка есть такой же неочевидный лайфхак, как и у РЖД, суть его в следующем: если очень-очень нужно уехать на конкретном поезде, а билетов на него в продаже нет, то можно поискать билеты с «фиктивными» пересадками. Для тех, кто знаком с понятием split ticketing все уже понятно, для остальных поясню на актуальных на момент написания комментария данных.

Допустим, есть поезд 062А, который едет из Москвы в Питер, проезжая при этом несколько промежуточных станций. Билетов на этот поезд на сегодня уже в продаже нет, но если очень хочется уехать, то можно купить два билета на одно и то же место, на два последовательных сегмента маршрута. Например, можно купить на 37 место 5 вагона из Москвы до Бологое, и на это же место от Бологое до Питера. Полного билета, из Москвы в Питер, на это место в продаже нет. Я не уверен, почему это так, скорее всего это как-то связано с квотами станций.

А еще этот милый лайфхак иногда позволяет сэкономить приличную сумму денег. Например, прямо сейчас билет на сегодня из Москвы в Питер, в купе поезда 082А стоит 4326 рублей. Но вместо одного билета можно купить два, от Москвы до Окуловки за 1451 рублей и от Окуловки до Питера, за 947. В сумме это обойдется Вам в 2398 рублей, экономия равна 1928 рублям или 45%, при этом качественно разницы никакой нет совершенно.

Вероятно, такая штука есть. Однако, в Украине помимо обычных поездов запустили быстрые электропоезда "интерсити". Зачастую они следуют без остановок по всему маршруту. Лично я чаще всего пользуюсь именно такими поездами, потому ваш вариант здесь вряд ли сработает.

Да, фиктивные «пересадки» не раз выручали. Однозначно стоит добавить в реализацию бота.
Правда у нас в украинских поездах цена билетов наоборот получается дороже процентов на 30%, вероятно из-за двойной оплаты страховки и дополнительных сборов.
Еще есть прикол, когда за неделю уже билетов на поезд нет, а в день отправления «магическим» образом появляется куча свободных мест в разных вагонах. Но это уже другая история, о куче посредников, их бизнесе и времени бронирования.
UFO just landed and posted this here
бронь снимается дважды.
первый раз ровно за 12 часов до отправления поезда.
второй раз по разному — для некоторых маршрутов за 3 часа для некоторых за полтора. Так и не понял в каких случаях выбирается какое время. (возможно проходящий или прямой)
Этот алгоритм работает даже в сезон на курортных маршрутах. Ни раз так брал билеты.
Да не на 30% а вдвое. Пример? Интерсити Днепр-Харьков, промежуточная Лозовая.
Днепр-Харьков =133 грн, Днепр-Лозовая=113грн, Лозовая-Харьков 112 грн, итого 225 против 133,
грабеж чистой воды.
В УЗ на каждую станцию выделяется определенный пул билетов, и часто такое бывает, что на больших станцииях билеты расходятся быстрее чем на мелких. Например если из Запорожья в Киев нет билетов ни на один поезд, то почти всегда из соседнего Мелитополя чуть ли не десяток в каждом вагоне. Выходит чуть дороже, но зато точно доедешь куда нужно и без нервотрепок по поводу наличия или отсутсвия снятой брони в последний день перед отправкой. Ну или если в обратную сторону — взять билет с посадкой из соседнего городка и добраться туда автобусом или машиной.
У Укрзализныци с этим как раз наоборот. Они при ажиотаже предпочитают продавать билеты от конечной до конечной, видимо зарабатывая при этом больше денег (билет стоит дороже, а на оставшуюся часть пути найти пассажира сложнее). Потому иногда система не позволяет купить билет с промежуточной станции, при этом позволяя купить с начальной до конечной. Но тут есть другая проблема — если пассажир не сел в поезд, то на одной из следующих станций они могут как-то подать эту информацию и билет снова поступает в продажу. Я не знаю как оно технически работает, это мне рассказывали в справочной. Потому чтобы не попасть в неприятную ситуацию, если вы садитесь на промежуточной станции, нужно посылать телеграмму начальнику поезда о том, что посадка будет производиться на такой-то станции.
Как-то одноразово понадобилось отловить билет на УЗ, в итоге «на коленке» родился такой tcl скрипт с проверкой билетов на направление/дату (через альтернативный api) и отправкой sms (через сервис twilio) — http://paste.tclers.tk/3842 Билет был успешно пойман и скрипт отправился в архив.
А что за баннер у вас при входе на сайт открывается?
Телеграм бот не работает. (
Он не отвечает на команды, даже на /help никакой реакции.

UPD УЗ заблокировала IP бота. Бот временно отключён.

Когда-то тоже писал бот на Python. Поработал пару недель, и они добавили этот токен. Побороть его тогда не смог (.
Вещь отличная, особенно когда пользуется ей сравнительно немного людей.
На каком-то из сайтов — посредников (а билетами УЗ торгует не только booking, но и многие другие, сайты дирекций например, Приват-банк тот же) уже реализованы функции ожидания нужных билетов. В системе резервирования УЗ есть еще такая особенность, что в продажу выставляется не весь поезд одновременно, а сначала несколько вагонов, потом по их заполнению до определенного процента — добавляется еще вагон и т.д. Поэтому имеем ситуацию, что вчера например в поезде нет рядом 4х мест для семейной поездки, а сегодня они уже есть… И да, квоты между железными дорогами… Это просто пир духа… С моей станции ЮЖД например нет билета на нужный поезд, но с соседней станции ПриднЖД — есть… Приходится брать, благо разница в цене копеечная, но его надо обязательно предварительно за день регистрировать у дежурного по вокзалу, чтобы изменить место посадки, иначе билет аннулируется…
Десятки раз брал билет от соседнего города и никогда не регистрировал свой билет у дежурного по вокзалу — без проблем садился на своей станции(правда всегда брал в пределах одной ЖД)
Интересно, а внутренняя система, которой пользуются кассиры, смотрит на ту же БД\сервер? Я к тому, что вы только что открыли ящик Пандоры — оказывается легкое шаманство и можно тупо «положить» сервер, а если он еще и один с тем что кассиры используют…
Есть, давненько уже, запущенный и работающий бот
https://telegram.me/railwaybot
На днях там запустилась еще и продажа билетов, к сожалению не на прямую через букинг, но тоже интересный вариант.

Благодарю за данный экземпляр!

Вопрос по авторской реализации. Для чего реализовано добавление в корзину, ведь корзина не привязывается к аккаунту и не получится просто зайти и купить, ожидающий билет. Это сделано просто для резервирования?

Корзина привязана к session id. Подменив этот id в браузере, можно произвести оплату билета. Это не идеальное решение, но первое, что пришло в голову.

Конечно, такие вещи давно многими реализованы «для себя». Просто не афишируются, ибо приведет к появлению captcha, как и у РЖД. Но использование telegramm безусловно интересный вариант, спасибо!
Запустил с Docker. Телеграм бот работает, отвечает на команду /help, но при вводе /trains или /scan возвращает 403 страницу с УЗ.

Очевидно, немного забомбили запросами и УЗ оперативно добавили еще одну проверку.

Попробуйте еще раз. Добавлена поддержка браузерных юзер агентов.

Спасибо, работает. А можно добавить бронь 2-3х мест рядом с исключением туалетов?

Не думаю, что у меня будет возможность сделать это в ближайшее время. Но я с удовольствием просмотрю ваш PR.

В целом не плохо, тоже в голову приходили мысли, а как же это автоматизировать. Но смущает только один момент: «вручную прописать в cookie браузера и завершить покупку билета.» — как-то не юзер френдли получается, я понимаю, что тут ограничения среды вступают в силу,, но все же.

Это решается простеньким js кодом упакованным в URL и запускаемым на странице УЗ. Достаточно туда впихнуть промпт который будет спрашивать sessionID и записывать его в LS.

Done. Немного коряво вышло из-за ограничения гитхаба на публикацию букмарклетов в .md, так что нужно смерджить в бранч gh-pages где будет открываться html с линкой букмарклета.

Конечно, это только полуавтоматическое решение, и не для всех подходит, но самое простое. К сожалению, сделать это ссылкой из бота не выйдет, как могло показаться из моего первого комментария, речь шла именно о букмарклете.

Увы, но данный способ не подходит, так как куки будет записана для домена github.io и не будет работать для booking.uz.gov.ua.

Так запускать-то его надо именно на странице booking.uz.gov.ua. Я в ридми описал. Нужно не просто линку нажать на странице, а добавить её как закладку. Оттого оно и зовётся букмарклетом.

Бот сейчас лежит судя по-всему. Не отзывается ни на единую команду…

Все верно. Там по этому поводу есть UPD в конце статьи.

Интересный подход, сыроват пока что, но тем немение для УЗ будет новым витком развития
SCAN_DELAY_SEC лучше ставить минимум 60 секунд.
Информация на сервере все равно обновляется только каждые 20 минут.
Поэтому лишний раз DDoS-ить сервер не надо.
Sign up to leave a comment.

Articles