четверг, 20 ноября 2014 г.

Post-Tracking.py

В сентябре я выкладывал скрипт post-tracking.py на Python2 для проверки статусов трек-номеров почтовых отправлений через терминал в GNU/Linux. Реализация парсинга переданных скрипту аргументов там была, мягко говоря, костыльной.

Сегодня наконец-то дошли руки поправить скрипт, теперь для разбора аргументов-ключей задействован модуль argparse.


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 import getenv
import argparse
import sys

def_file = getenv("HOME") + "/post-tracking.py/tracks"

# Проверка трек-номера
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)

# Парсинг аргументов
def args_parse():
 parser = argparse.ArgumentParser()
 parser.add_argument("-f", "--file", dest="_file", help="File with track-number(s) list")
 return parser.parse_known_args()

def main():
 
 args = args_parse()
 
 # Если ключ -f был использован, проверка треков из заданного файла
 try:
  check_file(args[0]._file)
 except:
  # Если аргументов (треков) передано несколько, проверка каждого по очередеи
  if len(sys.argv) > 1:
   for i in range(1, len(sys.argv)):
    check_track(sys.argv[i])
  # Если аргументов не передано, проверка треков из файла по умолчанию
  else:
   check_file(def_file)

if __name__ == '__main__':
    main()
Обновленный скрипт так же залит в git-репозиторий.

Комментариев нет:

Отправить комментарий