Мои друзья недавно запустили сайт http://open-taxi.com. При помощи него можно заказать такси онлайн, при этом на размещённый заказ поступают предложения от различных служб такси и от частных водителей. В Харькове подключены несколько городских служб такси и я несколько раз заказывал такси именно через этот сайт.
Через некоторое время, я узнал про API, при помощи которого можно размещать заказы. Я подумал, а можно ли сделать заказ из консоли, не запуская браузер?
Сказано - сделано. Потратив немного времени на то чтобы разобраться в API, я написал скрипт, при помощи которого можно заказать такси из обычной командной строки. Так как их API принимает данные о заказе в виде широты и долготы, мне пришлось в этом же скрипте написать код для интеграцией со службой геокодинга Google, к счастью, это не потребовало много времени. Ссылка для скачивания скрипта находится в конце страницы. Поскольку скрипт я писал "на скорую руку" для фана, то я в нём захардкодил логин и пароль от сайта, Вам потребуется их заменить своими.
USER_LOGIN='test.account@gmail.com' USER_PASSWORD='***'Эти строки в самом начале скрипта вам и потребуется изменить. Если вы захотите использовать скрипт передавая логин и пароль через командную строку, я думаю, это будет несложно сделать даже не имея большого опыта программирования.
Итак, давайте посмотрим как же осуществить нашу затею при помощи этого скрипта? Вначале Вам надо зарегистрироваться на их сайте, после этого создаём заказ командой
$ ./taxi.py --create --start 'Харьков, ул. Блюхера, 27' --porch 1 --end 'Харьков, просп. Ленина, 14' Created order ID: 954В результате выполнения последней команды мы получаем номер заказа, по которому можно отслеживать появление предложений от водителей. Делаем это командой
$ ./taxi.py --offers 954 799: Price 42 UAH, driver Боровой , car с ВАЗ-2115, arrives in 15 min 800: Price 44 UAH, driver Вячеслав , car Mazda 323, arrives in 15 min 801: Price 44 UAH, driver Андрей , car ВАЗ 2199, arrives in 15 min 802: Price 44 UAH, driver Вячеслав , car ВАЗ 2109, arrives in 15 min 803: Price 42 UAH, driver Валерий , car Дэу Ланос, arrives in 15 min 804: Price 42 UAH, driver Анна , car Volvo 340, arrives in 15 min 805: Price 42 UAH, driver Ольга , car ВАЗ 2109, arrives in 15 min 806: Price 42 UAH, driver Виктор , car ВАЗ 2107, arrives in 15 min 807: Price 42 UAH, driver Евгений , car Дэу Ланос, arrives in 15 min 808: Price 42 UAH, driver Олег , car ВАЗ 2110, arrives in 15 min Total 10 offersМы получили несколько предложений, и можем выбрать то, которое больше всего нам нравится (например, дешевле или с более комфортной машиной).
Выбрав определённое предложение, мы подтверждаем его командой
$ ./taxi.py --accept 805 Successfully accepted offerздесь мы передаём ID того предложения, которое мы выбрали.
Теперь надо удостовериться, что водитель не передумал, и что он действительно едет к нам. При помощи команды
$ ./taxi.py --status 954 Order status WAIT_FOR_DRIVER_APPROVEмы получаем статус выбранного нами заказа. Когда он поменяется с WAIT_FOR_DRIVER_APPROVE на ACCEPTED, мы можем считать что водитель уже едет к нам. После подтверждения заказа водителем мы можем получить его телефон на тот случай, если он долго не будет появляться или если возникнут другие проблемы. Узнать телефон водителя до того, как мы подтвердили заказ, их API не позволяет - не знаю зачем такие сложности. Для этого выполняем команду
$ ./taxi.py --phone 954 Driver phone 30-40, 093-62-05-007Это всё, написав всего 5 строчек в консоли, мы смогли заказать себе такси, при этом мы могли выбирать среди различных предложений от разных служб такси.
Скрипт, использовавшийся в статье, написан на питоне и занимает чуть более ста строк, так что не думаю, что в нём будет трудно разобраться. Большая часть скрипта состоит в отправке HTTP запросов и парсинге данных из полученного в ответ XML.
Скачать скрипт taxi.py