пятница, 26 сентября 2014 г.

Проверка статусов трек-номеров через терминал

Для проверки статусов трек-номеров почтовых отправлений существует много готовых решений - веб-сервисов, мобильных и десктопных приложений с большим количеством функций. А мне хотелось иметь под рукой простое решение без дополнительных наворотов, позволяющее быстро просмотреть статус трека. По этому я написал скрипт на Python 2, позволяющий просматривать статусы трек-номеров посылок через терминал в GNU/Linux. Для определения статуса трек-номера используется API postabot.ru.

post-tracking.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

#####################################################
#                 Post-Tracking.py                  #
#            Проверка статусов трек-номеров         #
# с использованием Python2 и http://postabot.ru/api #
#                                                   #
#    https://bitbucket.org/xxblx/post-tracking.py   #
#####################################################

from urllib2 import urlopen
from xml.dom.minidom import parse
from os.path import isfile
from os import getenv
import sys

# Проверка трек-номера
def check_track(t):
    dom = parse(urlopen("http://postabot.ru/tr/tracker2.php?track-number=" + t +"&carrier=ems"))

    print "Трек-номер: ", t
    for node in dom.getElementsByTagName("track"):
        print "- - - - -"
        print "%s - %s - %s - %s" % (node.getAttribute("date"), node.getAttribute("time"), node.getAttribute("geo"), node.getAttribute("event"))

# Проверка всех треков из файла
def check_file(f):
    track_lst = open(f).readlines()
        
    for line in track_lst:
        if line[-1:] == "\n":
            check_track(line[:-1])
        else:
            check_track(line)

try:
    # С опцией -f брать треки из файла
    if sys.argv[1] == "-f":
        check_file(sys.argv[2])
    # Можно указать конкретный трек, ./post-tracking.py EA338712012RU
    else:
        check_track(sys.argv[1])
except:
    # Если файл ~/.post-tracking.py/tracks существует, брать треки оттуда
    tf = getenv("HOME") + "/.post-tracking.py/tracks"

    if isfile(tf):
        check_file(tf)
    # Если файла нет, ничего не передано в скрипт, предложить ввести вручную трек
    else:
        print "Введите трек-номер вида EA338712012RU"
        check_track(raw_input())
Также данный скрипт доступен в git-репозитории на bitbucket.org.

Для использования сохраните скрипт себе, например, под названием post-tracking.py.

./post-tracking.py трек-номер - посмотреть информацию по конкретному трек-номеру
[xxblx@localhost ~]$ ./post-tracking.py EA338712012RU
Трек-номер:  EA338712012RU
- - - - -
12/08/2014 - 17:00 - Видное EMS ППС-5, 142705 - Приём. Единичный
- - - - -
12/08/2014 - 21:55 - Видное EMS ППС-5, 142705 - Обработка. Покинуло сортировочный центр
- - - - -
13/08/2014 - 16:55 - Москва EMS СЦ цех Магистральной Сортировки Уо, 130214 - Обработка. Сортировка
- - - - -
14/08/2014 - 13:35 - Москва EMS СЦ цех Магистральной Сортировки Уо, 130214 - Обработка. Покинуло сортировочный центр
- - - - -
16/08/2014 - 10:15 - Урюпинск 3, 403113 - Обработка. Прибыло в место вручения
- - - - -
16/08/2014 - 13:30 - Урюпинск 3, 403113 - Неудачная попытка вручения. Временное отсутствие адресата
- - - - -
20/08/2014 - 09:50 - Волгоград МСЦ УОСП, 400964 - Обработка. Покинуло сортировочный центр
- - - - -
18/08/2014 - 13:40 - Урюпинск 3, 403113 - Вручение. Вручение адресату

Для удобства можно поместить список трек-номеров в отдельный файл (каждый трек-номер с новой строки) и указать скрипту проверить все треки из файла по очереди
./post-tracking.py -f /путь/до/файла
[xxblx@localhost ~]$ cat ~/file
EA338712012RU
RA419695844RU[xxblx@localhost ~]$ ./post-tracking.py -f ~/file
Трек-номер:  EA338712012RU
- - - - -
12/08/2014 - 17:00 - Видное EMS ППС-5, 142705 - Приём. Единичный
- - - - -
12/08/2014 - 21:55 - Видное EMS ППС-5, 142705 - Обработка. Покинуло сортировочный центр
- - - - -
13/08/2014 - 16:55 - Москва EMS СЦ цех Магистральной Сортировки Уо, 130214 - Обработка. Сортировка
- - - - -
14/08/2014 - 13:35 - Москва EMS СЦ цех Магистральной Сортировки Уо, 130214 - Обработка. Покинуло сортировочный центр
- - - - -
16/08/2014 - 10:15 - Урюпинск 3, 403113 - Обработка. Прибыло в место вручения
- - - - -
16/08/2014 - 13:30 - Урюпинск 3, 403113 - Неудачная попытка вручения. Временное отсутствие адресата
- - - - -
20/08/2014 - 09:50 - Волгоград МСЦ УОСП, 400964 - Обработка. Покинуло сортировочный центр
- - - - -
18/08/2014 - 13:40 - Урюпинск 3, 403113 - Вручение. Вручение адресату
Трек-номер:  RA419695844RU
- - - - -
16/08/2014 - 11:34 - Саратов 78, 410078 - Приём. Единичный
- - - - -
19/08/2014 - 10:50 - Саратов МСЦ УОПо, 410962 - Обработка. Покинуло сортировочный центр
- - - - -
27/08/2014 - 14:19 - Москва PCI-2, 104002 - Обработка. Прибыло в место международного обмена
- - - - -
27/08/2014 - 21:57 - Москва PCI-2, 104002 - Приём на таможню.
- - - - -
27/08/2014 - 21:59 - Москва PCI-2, 104002 - Таможенное оформление. Выпуск таможни
- - - - -
03/09/2014 - 17:07 - Москва PCI-6, 104006 - Обработка. Покинуло сортировочный центр
- - - - -
03/09/2014 - 17:09 - Москва PCI-6, 104006 - Экспорт.

Чтобы каждый раз не вводить -f /путь/к/файлу, создайте текстовый файл tracks, абсолютный путь которого будет ~/.post-tracking.py/tracks. Туда добавляйте трек-номера, каждый с новой строки. При наличии данного файла можно запускать скрипт без опций.
./post-tracking.py
[xxblx@localhost ~]$ cat ~/.post-tracking.py/tracks
EA338712012RU
RA419695844RU[xxblx@localhost ~]$ ./post-tracking.py
Трек-номер:  EA338712012RU
- - - - -
12/08/2014 - 17:00 - Видное EMS ППС-5, 142705 - Приём. Единичный
- - - - -
12/08/2014 - 21:55 - Видное EMS ППС-5, 142705 - Обработка. Покинуло сортировочный центр
- - - - -
13/08/2014 - 16:55 - Москва EMS СЦ цех Магистральной Сортировки Уо, 130214 - Обработка. Сортировка
- - - - -
14/08/2014 - 13:35 - Москва EMS СЦ цех Магистральной Сортировки Уо, 130214 - Обработка. Покинуло сортировочный центр
- - - - -
16/08/2014 - 10:15 - Урюпинск 3, 403113 - Обработка. Прибыло в место вручения
- - - - -
16/08/2014 - 13:30 - Урюпинск 3, 403113 - Неудачная попытка вручения. Временное отсутствие адресата
- - - - -
20/08/2014 - 09:50 - Волгоград МСЦ УОСП, 400964 - Обработка. Покинуло сортировочный центр
- - - - -
18/08/2014 - 13:40 - Урюпинск 3, 403113 - Вручение. Вручение адресату
Трек-номер:  RA419695844RU
- - - - -
16/08/2014 - 11:34 - Саратов 78, 410078 - Приём. Единичный
- - - - -
19/08/2014 - 10:50 - Саратов МСЦ УОПо, 410962 - Обработка. Покинуло сортировочный центр
- - - - -
27/08/2014 - 14:19 - Москва PCI-2, 104002 - Обработка. Прибыло в место международного обмена
- - - - -
27/08/2014 - 21:57 - Москва PCI-2, 104002 - Приём на таможню.
- - - - -
27/08/2014 - 21:59 - Москва PCI-2, 104002 - Таможенное оформление. Выпуск таможни
- - - - -
03/09/2014 - 17:07 - Москва PCI-6, 104006 - Обработка. Покинуло сортировочный центр
- - - - -
03/09/2014 - 17:09 - Москва PCI-6, 104006 - Экспорт.

А если файла ~/.post-tracking.py/tracks нет, а скрипт запущен без опций и без указания трек-номера, вам будет предложено вручную ввести трек-номер.
[xxblx@localhost ~]$ find ~/.post-tracking.py/tracks
find: ‘/home/xxblx/.post-tracking.py/tracks’: Нет такого файла или каталога
[xxblx@localhost ~]$ ./post-tracking.py
Введите трек-номер вида EA338712012RU
RA419695844RU
Трек-номер:  RA419695844RU
- - - - -
16/08/2014 - 11:34 - Саратов 78, 410078 - Приём. Единичный
- - - - -
19/08/2014 - 10:50 - Саратов МСЦ УОПо, 410962 - Обработка. Покинуло сортировочный центр
- - - - -
27/08/2014 - 14:19 - Москва PCI-2, 104002 - Обработка. Прибыло в место международного обмена
- - - - -
27/08/2014 - 21:57 - Москва PCI-2, 104002 - Приём на таможню.
- - - - -
27/08/2014 - 21:59 - Москва PCI-2, 104002 - Таможенное оформление. Выпуск таможни
- - - - -
03/09/2014 - 17:07 - Москва PCI-6, 104006 - Обработка. Покинуло сортировочный центр
- - - - -
03/09/2014 - 17:09 - Москва PCI-6, 104006 - Экспорт.

Для работы скрипта требуется только Python 2.  Все использованные модули есть в стандартной поставке.

Чтобы каждый раз не писать полный путь до скрипта / не переходить в каталог со скриптом,  можете добавить
alias post-tracking="/путь/до/скрипта/post-tracking.py"
в ~/.bashrc (после добавления нужно перезапустить сессию) можно будет обращать к скрипту так:
[xxblx@localhost ~]$ post-tracking
Трек-номер:  EA338712012RU
- - - - -
12/08/2014 - 17:00 - Видное EMS ППС-5, 142705 - Приём. Единичный
- - - - -
12/08/2014 - 21:55 - Видное EMS ППС-5, 142705 - Обработка. Покинуло сортировочный центр
- - - - -
13/08/2014 - 16:55 - Москва EMS СЦ цех Магистральной Сортировки Уо, 130214 - Обработка. Сортировка
- - - - -
14/08/2014 - 13:35 - Москва EMS СЦ цех Магистральной Сортировки Уо, 130214 - Обработка. Покинуло сортировочный центр
- - - - -
16/08/2014 - 10:15 - Урюпинск 3, 403113 - Обработка. Прибыло в место вручения
- - - - -
16/08/2014 - 13:30 - Урюпинск 3, 403113 - Неудачная попытка вручения. Временное отсутствие адресата
- - - - -
20/08/2014 - 09:50 - Волгоград МСЦ УОСП, 400964 - Обработка. Покинуло сортировочный центр
- - - - -
18/08/2014 - 13:40 - Урюпинск 3, 403113 - Вручение. Вручение адресату
Трек-номер:  RA419695844RU
- - - - -
16/08/2014 - 11:34 - Саратов 78, 410078 - Приём. Единичный
- - - - -
19/08/2014 - 10:50 - Саратов МСЦ УОПо, 410962 - Обработка. Покинуло сортировочный центр
- - - - -
27/08/2014 - 14:19 - Москва PCI-2, 104002 - Обработка. Прибыло в место международного обмена
- - - - -
27/08/2014 - 21:57 - Москва PCI-2, 104002 - Приём на таможню.
- - - - -
27/08/2014 - 21:59 - Москва PCI-2, 104002 - Таможенное оформление. Выпуск таможни
- - - - -
03/09/2014 - 17:07 - Москва PCI-6, 104006 - Обработка. Покинуло сортировочный центр
- - - - -
03/09/2014 - 17:09 - Москва PCI-6, 104006 - Экспорт.
 
Update (20.11.2014):
Скрипт был обновлен.

1 комментарий:

  1. Спасибо. Написали бы Вы ТрэкЧекер для Ubuntu с функцией экспорта в csv по аналогии с вышеупомянутой программой - было бы отлично!)

    ОтветитьУдалить