Трекинг почтовых отправлений

Анализ сервисов отслеживания почты. Технология построения интерактивного интерфейса пользователя. Определение стран отправителя и назначения. Распознавание CAPTCHA трекингов почты России и Китая. Добавление и удаление трек-кода в список пользователя.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 10.06.2013
Размер файла 5,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

На основе вышеперечисленного, дипломный проект отвечает требованиям безопасности и экологичности.

ЗАКЛЮЧЕНИЕ

Реализованное программное средство позволяет отслеживать местонахождение посылки по её почтовому идентификатору.

В данной работе было выполнено: распознавание CAPTCHA для почты России, Китая; разработано средство для взаимодействия с официальными трекингами стран России, Украины, Беларуси, Сингапура, США, Китая, Гонконга; разработан модуль взаимодействия с пользователем.

В связи с этим программное средство «ПО трекинга почтовых отправлений» может быть рекомендовано пользователям интернета для быстрого получения информации об интересующей их посылке, так как сам процесс довольно прост и не требует особых знаний.

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1. Регулярные выражения, пособие для новичков. [Электронный ресурс] - URL: http://habrahabr.ru/post/115825/ (дата обращения: 14.02.2013 ).

2. CAPTCHA. [Электронный ресурс] - URL: http://ru.wikipedia.org/wiki/CAPTCHA (дата обращения: 15.02.2013).

3. OpenCV шаг за шагом. Преобразование Хафа. [Электронный ресурс] - URL: http://robocraft.ru/blog/computervision/502.html (дата обращения: 14.04.2013).

4. Распознавание некоторых современных CAPTCHA. [Электронный ресурс] - URL: http://habrahabr.ru/post/116222 (дата обращения: 21.04.2013).

5. Декодирование капчи на Python. [Электронный ресурс] - URL: http://www.pvsm.ru/python/12663 (дата обращения: 15.02.2013).

6. Python. [Электронный ресурс] - URL: http://ru.wikipedia.org/wiki/Python (дата обращения: 13.02.2013).

7. Марк Лутц. Изучаем Python, 4-е издание. - Перевод с английского. - СПб.: Символ-Плюс, 2011. - 1280 с - ISBN 978-5-93286-159-2

8. Нужин С. Глава 4. Использование CGI при создании интерактивных интерфейсов. [Электронный ресурс] - URL: http://citforum.ru/database/cnit/4.shtml (дата обращения: 20.02.2013).

9. И. А. Хахаев. Практикум по алгоритмизации и программированию на Python. Учебник. - М.: Альт Линукс, 2010. - 126 с. - (Библиотека ALT Linux). ISBN 978-5-905167-02-7

ПРИЛОЖЕНИЕ А

ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА ПРОГРАММНОЕ СРЕДСТВО

П.А.1 Введение

Наименование программы: "ПО трекинга почтовых отправлений".

Область применения: Сфера обслуживания.

Объект внедрения: Предназначено к внедрению в рабочий процесс ООО "Зеленая планета"

П.А.2 Основания для разработки

Разработка ведется на основании документа «Учебный план для студентов ВУЗа», факультета «Информатика и вычислительная техника», обучающихся по специальности 010503 - «Математическое обеспечение и администрирование информационных систем», в соответствии с которым студенты, заканчивающие ВУЗ, должны предоставить к защите выпускную квалификационную работу, подтверждающую присвоение им квалификации «математик-программист». Предметным основанием является задание на дипломную работу.

П.А.3 Назначение разработки

Функциональное назначение программного средства заключается в предоставлении пользователю данных о местоположении и прохождении регистрируемых почтовых отправлений по её почтовому идентификатору.

Эксплуатационное назначение: данное программное средство предназначено для применения в составе серверного ПО web-серверов.

П.А.4 Требования к программе

П.А.4.1 Требования к функциональным характеристикам

Программа должна обеспечивать возможность выполнения перечисленных ниже функций:

• Распознавание почтового идентификатора;

• определение стран отправителя и назначения;

• распознавание CAPTCHA трекингов почты России и Китая;

• получение данных с серверов почтовых служб и вывод в общую сводную таблицу;

• экспорт полученной информации в форматы *.xls и *.ods;

• регистрация и авторизация пользователя;

• добавление и удаление трек-кода в список пользователя.

П.А.4.2 Требования к надежности

Надежное функционирование программы должно быть обеспечено выполнением пользователем совокупности организационно-технических мероприятий, перечень которых приведен ниже:

• организацией бесперебойного питания технических средств;

• использованием лицензионного программного обеспечения.

Отказы программы возможны вследствие некорректных действий оператора при взаимодействии с операционной системой.

П.А.4.3 Условия эксплуатации

Для функционирования программного продукта необходимо соблюдение всех требований и правил эксплуатации компьютерной техники и программного обеспечения. Такими требованиями могут выступать: диапазон температур, запыленность и загазованность помещения. Дополнительных требований и ограничений не вводится.

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

П.А.4.4 Требования к составу и параметрам технических средств

Требования к составу аппаратных средств компьютера-сервера :

• процессор Intel Core i5 и выше;

• 16 Гб оперативной памяти;

• клавиатура и мышь;

• жесткий диск;

• доступ к сети Интернет.

Требования к составу аппаратных средств компьютера-клиента :

• процессор Intel Pentium 4 и выше;

• 1 Гб оперативной памяти;

• клавиатура и мышь;

• жесткий диск;

• доступ к сети Интернет.

Требования к составу программных средств компьютера- сервера:

• OC Windows (XP SP3, Vista, 7), Linux;

• Apache 2.x.x;

• Python 2.x;

• Sqlite 3.

Требования к составу программных средств компьютера-клиента:

• ОС Windows (XP SP3, Vista, 7), Linux, MacOS, iOS;

• интернет-браузер.

П.А.4.5 Требования к информационной и программной совместимости

Требования к исходным кодам и языкам программирования:

• базовый язык программирования - python;

• среда программирования - текстовой редактор Geany 1.22.

Требования к программным средствам: программа должна работать под управлением ОС Windows (XP/Vista/7), Linux, MacOS,iOS.

П.А.5 Требования к программной документации

Данное программное средство должно поставляться со следующей документацией:

• Техническое задание ГОСТ 19.201-78 ЕСПД;

• руководство системного программиста ГОСТ 19.503-79 ЕСПД;

• руководство программиста 19.504-79 ЕСПД;

• руководство оператора 19.505-79 ЕСПД.

П.А.6 Стадии и этапы разработки

Стадии и этапы разработки программного средства:

• сформулирована постановка задачи (с 02.02.2013 по 5.02.2013);

• проведено изучение предметной области (с 5.02.2013 по 10.04.2013);

• разработка технического задания (с 10.04.2013 по 18.04.2013);

• создание функциональной модели (с 19.04.2013 по 9.05.2013);

• разработка интерфейса программы (с 10.05.2013 по 22.05.2013);

• испытания программы (с 22.05.2013 по 27.05.2013);

• согласование и утверждения технического задания (с 28.05.2013 по 1.06.2013);

• разработка пояснительной записки к данному программному продукту (с 1.06.2013 по 10.06.2013).

П.А.7 Порядок контроля и приемки

Порядок и контроль приемки определяются заведующим кафедрой «ПОВТ и АС» и основаны на демонстрации знаний технологии и умении создавать программные средства для различных предметных областей. Главным требованием к приемке является наличие правильно работающей программы иллюстрируемой тестовым примером и отчета, представленного в печатном виде.

Разработал

студент гр. ВМО - 51 « 18 » апреля 2013 год

Трофименко Ю.В. _________________

ПРИЛОЖЕНИЕ Б

РУКОВОДСТВО СИСТЕМНОГО ПРОГРАММИСТА

П.Б.1 Общие сведения о программе

Областью применения данного программного продукта является сфера обслуживания. Программное средство предназначено к внедрению в рабочий процесс ООО «Зеленая планета».

Разработанное программное средство выполняет перечисленные ниже функции:

• Распознавание почтового идентификатора;

• определение стран отправителя и назначения;

• распознавание CAPTCHA трекингов почты России и Китая;

• получение данных с серверов почтовых служб и вывод в общую сводную таблицу;

• экспорт полученной информации в форматы *.xls и *.ods;

• регистрация и авторизация пользователя;

• добавление и удаление трек-кода в список пользователя.

Для достижения оптимальной производительности необходима конфигурация аппаратных средств клиента: процессор Intel Pentium 4 и выше, объём ОЗУ 1Гб и выше, жесткий диск 120Гб, DirectX совместимый видеоадаптер, любой совместимый источник бесперебойного питания, клавиатура и мышь, доступ к сети Интернет, и для сервера: процессор Intel Core i5 и выше, объём ОЗУ 8Гб и выше, жесткий диск 120Гб, клавиатура и мышь, доступ к сети Интернет.

Для функционирования программного средства на стороне сервера должно быть установлено следующее программное обеспечение:

• OC Windows (XP SP3, Vista, 7), Linux;

• Apache 2.x.x;

• Python 2.x.;

• Sqlite 3.

Для функционирования программного средства на стороне клиента должно быть установлено следующее программное обеспечение:

• ОС Windows (XP SP3, Vista, 7), Linux, MacOS, iOS;

• интернет-браузер.

П.Б.2 Структура программы

Программный комплекс состоит из следующих файлов:

• answer.py -- модуль, отвечающий за распознавание почтового идентификатора и вызов соответствующих функций;

• posts.py -- модуль, в котором содержаться функции отслеживания почтовых отправлений ;

• captcha.py -- модуль, содержащий основные функции для распознавания CAPTCHA;

• brain.py -- модуль, в котором находится словарь опорных точек для распознавания CAPTCHA почты России ;

• savetrack.py -- модуль с функциям сохранения в удобочитаемый формат, а именно в *.xls, *.ods;

• dictcountry.py -- модуль, содержащий словарь с информацией о возможных странах почтовых отправлений.

П.Б.3 Настройка программы

Для настройки программного средства необходимо провести следующие операции:

• убедиться, что все ПО приведённое в П.Б.1 установлено и настроено в соответствии с поставляемой с ним документацией;

• запустить интернет-бразуер и зайти на сайт, разработанного программного средства.

П.Б.4 Проверка программы

Проверка программного средства осуществлялась в процессе разработки при помощи тестов. Тестирование было пройдено успешно.

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

П.Б.5 Дополнительные возможности

Программное средство помимо основных функций содержит следующие возможности для удобства использования:

• вывод информации о почтовом отправлении без перезагрузки страницы

• вывод сообщений о некорректном вводе данных без перезагрузки страницы

ПРИЛОЖЕНИЕ В

РУКОВОДСТВО ПРОГРАММИСТА

П.В.1 Общие сведения о программе

Областью применения данного программного продукта является сфера обслуживания. Программное средство предназначено к внедрению в рабочий процесс ООО «Зеленая планета».

Разработанное программное средство выполняет перечисленные ниже функции:

• Распознавание почтового идентификатора;

• определение стран отправителя и назначения;

• распознавание CAPTCHA трекингов почты России и Китая;

• получение данных с серверов почтовых служб и вывод в общую сводную таблицу;

• экспорт полученной информации в форматы *.xls и *.ods;

• регистрация и авторизация пользователя;

• добавление и удаление трек-кода в список пользователя.

Для достижения оптимальной производительности необходима конфигурация аппаратных средств клиента: процессор Intel Pentium 4 и выше, объём ОЗУ 1Гб и выше, жесткий диск 120Гб, DirectX совместимый видеоадаптер, любой совместимый источник бесперебойного питания, клавиатура и мышь, доступ к сети Интернет, и для сервера: процессор Intel Core i5 и выше, объём ОЗУ 8Гб и выше, жесткий диск 120Гб, клавиатура и мышь, доступ к сети Интернет.

Для функционирования программного средства на стороне сервера должно быть установлено следующее программное обеспечение:

• OC Windows (XP SP3, Vista, 7), Linux;

• Apache 2.x.x;

• Python 2.x.;

• Sqlite 3.

Для функционирования программного средства на стороне клиента должно быть установлено следующее программное обеспечение:

• ОС Windows (XP SP3, Vista, 7), Linux, MacOS, iOS;

• интернет-браузер.

П.В.2 Характеристика программы

Время ожидания получения информации зависит от времени ответа серверов почтовых служб и распознавания CAPTCHA. Благодаря дружелюбному интерфейсу оно пролетает быстро и незаметно для пользователя.

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

П.В.3 Обращение к программе

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

П.В.4 Входные и выходные данные

Входные данные: почтовый идентификатор, который вводится пользователем.

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

П.В.5 Сообщения программисту

В результате работы программы могут возникнуть ошибки или системные сообщения, о которых будет выведено информационное сообщение.

ПРИЛОЖЕНИЕ Г

РУКОВОДСТВО ОПЕРАТОРА

П.Г.1 Назначение программы

П.Г.1.1 Функциональное назначение

Функциональное назначение программного средства заключается в предоставлении пользователю данных о местоположении и прохождении регистрируемых почтовых отправлений по её почтовому идентификатору.

П.Г.1.2 Эксплуатационное назначение

Эксплуатационное назначение: данное программное средство предназначено для применения в составе серверного ПО web-серверов.

П.Г.1.3 Состав функций

Разработанное программное средство выполняет перечисленные ниже функции:

• Распознавание почтового идентификатора;

• определение стран отправителя и назначения;

• распознавание CAPTCHA трекингов почты России и Китая;

• получение данных с серверов почтовых служб и вывод в общую сводную таблицу;

• экспорт полученной информации в форматы *.xls и *.ods;

• регистрация и авторизация пользователя;

• добавление и удаление трек-кода в список пользователя.

П.Г.2 Условия выполнения программы

П.Г.2.1 Минимальный состав аппаратных средств

Для достижения оптимальной производительности необходима конфигурация аппаратных средств клиента: процессор Intel Pentium 4 и выше, объём ОЗУ 1Гб и выше, жесткий диск 120Гб, DirectX совместимый видеоадаптер, любой совместимый источник бесперебойного питания, клавиатура и мышь, доступ к сети Интернет, и для сервера: процессор Intel Core i5 и выше, объём ОЗУ 8Гб и выше, жесткий диск 120Гб, клавиатура и мышь, доступ к сети Интернет.

П.Г.2.2 Минимальный состав программных средств

Для функционирования программного средства на стороне сервера должно быть установлено следующее программное обеспечение:

• OC Windows (XP SP3, Vista, 7), Linux;

• Apache 2.x.x;

• Python 2.x.;

• Sqlite 3.

Для функционирования программного средства на стороне клиента должно быть установлено следующее программное обеспечение:

• ОС Windows (XP SP3, Vista, 7), Linux, MacOS, iOS;

• интернет-браузер.

П.Г.2.3 Требования к персоналу

Конечный пользователь программы (оператор) должен обладать практическими навыками работы с интерфейсом интернет-бразуера.

П.Г.3 Выполнение программы

Сначала пользователь должен убедиться, что все ПО приведённое в П.Г.2.2 установлено и настроено в соответствии с поставляемой с ним документацией. Затем запустить интернет - браузер и перейти на сайт разработанного программного средства. На рисунке П.Г.1 изображено, что увидит пользователь, зайдя на страничку.

Рисунок П.Г.1 - Интерфейс ПО трекинга почтовых отправлений

В поле ввода почтового идентификатора надо ввести свой трек-код и нажать кнопку «Найти», после чего начнётся процесс получения информации с серверов почтовых служб, об этом нам даст знать сообщение «Загрузка...» (рис. П.Г.2).

Рисунок П.Г.2 - Ожидание получения информации о интересующей посылке

Потом перед пользователем выведется желанная информация в общей сводной табличке, что очень удобно для восприятия (рис. П.Г.3).

Рисунок П.Г.3 - Вывод информации пользователю

На рисунке П.Г.3 также можно заметить возможность сохранения информации в удобочитаемый формат, для этого надо кликнуть ПКМ по одной из ссылок «Сохранить в *.xls» или «Сохранить *.ods».

После регистрации и авторизации у пользователя появится возможность создать свой список трек-кодов, с которым отслеживание нужных посылок станет еще легче и быстрее (рис. П.Г.4).

Рисунок П.Г.4 - Список трек-кодов пользователя

П.Г.4 Сообщения оператору

В зависимости от действий пользователя могут возникать ошибки или информационные сообщения, о которых будет выведено соответствующее уведомление.

Рассмотрим возможные сообщения:

• Не удалось распознать почтовый идентификатор (рис. П.Г.5);

Рисунок П.Г.5 - Распознавание почтового идентификатора 123456789CN

• на сервере почтовой службы еще нет информации о данной посылке(рис. П.Г.6);

Рисунок П.Г.6 - Попытка получить информацию о посылке с почтовым идентфикатором 39400939691448

• Если сервер какой-либо почтовой службы временно перестал работать об этом будет оповещено пользователя(рис. П.Г.7);

Рисунок П.Г.7 - Сервер почты Сингапура временно не доступен

• проверка корректности ввода данных при регистрации пользователя(рис. П.Г.8);

Рисунок П.Г.8 - Вывод сообщений о вводе некорректных данных

• проверка корректности ввода данных при авторизации пользователя(рис. П.Г.9);

Рисунок П.Г.9 - Вывод сообщений о вводе некорректных данных

• проверка ввода данных при добавлении нового трек-кода в список пользователя(рис. П.Г.10);

Рисунок П.Г.10 - Вывод сообщений о вводе некорректных данных

• если пользователь не введет ничего и нажмёт «Найти»(рис. П.Г.11);

Рисунок П.Г.11 - Попытка поиска без ввода трек-кода

ПРИЛОЖЕНИЕ Д

АКТ ВНЕДРЕНИЯ

Акт внедрения результатов дипломной работы

«Программное обеспечение трекинга почтовых отправлений», разработанной студентом группы ВМО51

Трофименко Ю.В.

Мы, нижеподписавшиеся, составили настоящий акт о том, что разработанное студентом группы ВМО51 Трофименко Юрием Вадимовичем «Программное обеспечение трекинга почтовых отправлений» прошло испытания, в результате которых показало свою работоспособность и эффективность. После испытаний данная система была внедрена в рабочий процесс ООО "Зеленая планета".

Председатель комиссии:

Должность

ФИО

Члены комиссии:

Должность

ФИО

Должность

ФИО

«___» ___________ 2013г.

ПРИЛОЖЕНИЕ E

ИСХОДНЫЙ КОД МОДУЛЕЙ

П.E.1 Модуль answer.py

#!/usr/bin/python2

# -*- coding: utf8 -*-

import cgi

import cgitb; cgitb.enable()

from dictcountry import country

from posts import Russia,Usa,Singapore

print "Content-Type: text/html" # Определение типа HTML

print # Пустая строка означает окончание передачи заголовков теперь выводим основной текст в формате HTML

print"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">"

print "<html>"

print "<head>"

print" <meta http-equiv=\"Content-Type\" content=\"text/html\"; charset=\"UTF-8\">"

print" <meta http-equiv=\"cache-control\" content=\"no-cache\">"

print" <meta http-equiv=\"pragma\" content=\"no-cache\">"

print" <title>Traking</title>"

print"</head>"

print"<body>"

def is_int(s):

try:

int(s)

return True

except ValueError:

return False

def switch(case,idpost):

if case=="RU":

Russia(idpost)

elif case=="SG":

Singapore(idpost)

print"<br><br>Предполагаемая страна получатель: Russia<br>"

Russia(idpost)

elif case=="US":

Usa(idpost)

print"<br><br>Предполагаемая страна получатель: Russia<br>"

Russia(idpost)

else:

print"пока не поддреживается!<br>"

form = cgi.FieldStorage()

if not form.has_key("id"): #А есть ли такие поля?

print "<H1>Ошибка!</H1>"

print "Введите почтовый идентификатор!"

else:

idpost = form["id"].value.replace(" ","")

if (len(idpost)==13 and is_int(idpost)==False):

#print"Международный идентификатор!<br>"

print"Почтовый международный идентификатор: "+idpost+"<br>"

print"Страна отправитель: " + country[idpost[-2:13]]

switch(idpost[-2:13],idpost)

else:

print"Почтовый внутренний идентификатор: "+idpost+"<br>"

if (len(idpost)==20 or len(idpost)==10) and is_int(idpost)==True:

print"Страна: USA<br>"

Usa(idpost)

elif len(idpost)==14 and is_int(idpost)==True:

print"Страна: Russia<br>"

Russia(idpost)

elif len(idpost)==21 and is_int(idpost)==False:

print"Страна: Singapore<br>"

Singapore(idpost)

else:

print"Ошибка! Проверьте правильность введенного Вами почтового идентификатора!"

print"</body>"

print"</html>"

П.E.2 Модуль posts.py

#!/usr/bin/python2

# -*- coding: UTF-8 -*-

from dictcountry import country

import urllib,urllib2,re,time,threading,socket

import cgitb; cgitb.enable()

from brain import maska

from PIL import Image

from captcha import *

socket.setdefaulttimeout(5)

temp_path = "/srv/http/temp/"

################################ РОССИЯ ###################################

def search (x,y,colors):

for i in range(len(maska)/3):

truenumber = '*'

for j in range(len(maska[i,'y'])):

if (x+maska[i,'x'][j]>69 or y+maska[i,'y'][j]>22):

truenumber = '*'

break

if (colors[(x+(maska[i,'x'][j])),(y+maska[i,'y'][j])] == 1):

truenumber = maska[i,'number']

else:

truenumber = '*'

break

if (truenumber != '*'):

return int(truenumber),x

break

def GetCaptchaCodeRussia():

try:

f = urllib2.urlopen("http://www.russianpost.ru/rp/servise/ru/home/postuslug/trackingo").read()

if (len(f)<500 and f.count("onload")>0):

key =re.compile("<input id=\"key\" name=\"key\" value=\"(.*?)\"/>",re.DOTALL).findall(f)

headers = {"User-Agent" : "Mozilla/5.0 (X11; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0"}

req = urllib2.Request('http://www.russianpost.ru/rp/servise/ru/home/postuslug/trackingpo',urllib.urlencode({'key': key[0]}),headers)

urllib2.urlopen(req)

f = urllib2.urlopen("http://www.russianpost.ru/rp/servise/ru/home/postuslug/trackingpo").read()

CaptchaKey = re.compile("id='CaptchaId' value='(.*?)'>",re.DOTALL).findall(f)[0]

#print CaptchaKey

urllib.URLopener().retrieve("http://www.russianpost.ru/CaptchaService/CaptchaImage.ashx?Id="+CaptchaKey, temp_path+"captchaRussia.png")

except urllib2.HTTPError, error:

print"<p style=\"color:#FF0000\">Сайт почты России временно не доступен! Попробуйте позднее.</p>"

return False

except urllib2.URLError, error:

print"<p style=\"color:#FF0000\">Сайт почты России временно не доступен! Попробуйте позднее.</p>"

return False

im = Image.open(temp_path+"captchaRussia.png")

color = {}

for x in range(im.size[0]):

for y in range(im.size[1]):

pix = im.getpixel((x,y))

#print pix,"<br>"

if pix == (255, 255, 255, 255):

color[x,y] = 0

else:

color[x,y] = 1

captcha={}

# Определяем что написано на капче

for y in range(im.size[1]):

for x in range(im.size[0]):

if (color[x,y] == 1):

answer = search(x,y,color)

if answer:

captcha[answer[1]] = answer[0]

CaptchaCode = ''.join([str(x[1]) for x in sorted(captcha.items(),key=lambda(x): x[0])])

return CaptchaKey,CaptchaCode

def Russia(ItemRussia):

Captcha = GetCaptchaCodeRussia()

if Captcha == False:

return False

headers = {"User-Agent" : "Mozilla/5.0 (X11; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0"}

paramsRussia = urllib.urlencode({'searchsign': 1,'BarCode': ItemRussia, 'CaptchaId': Captcha[0], 'InputedCaptchaCode': Captcha[1]})

try:

req = urllib2.Request('http://www.russianpost.ru/resp_engine.aspx?Path=rp/servise/ru/home/postuslug/trackingpo', paramsRussia,headers)

u = urllib2.urlopen(req).read()

except urllib2.HTTPError, error:

print"<p style=\"color:#FF0000\">Сайт почты России временно не доступен! Попробуйте позднее.</p>"

return False

except urllib2.URLError, error:

print"<p style=\"color:#FF0000\">Сайт почты России временно не доступен! Попробуйте позднее.</p>"

return False

data = re.compile("<tr align=\".*?\">.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?<td>(.*?)</td>.*?</tr>",re.DOTALL).findall(u)

if len(data)==0:

print"<p style=\"color:#FF0000\">О данной посылке на почте России пока нет иформации, убедитесь в правильности введеного почтового идентификатора или попробуйте позже!</p>"

return True

infoRussia = []

row = 0

for track in data:

infoRussia.append([])

print" <tr align=\"center\">"

print"<td><img src=\"/images/country/ru.png\" width=\"20\" height=\"20\"/></td>"

infoRussia[row].append("Russia")

print"<td>"+track[1]+"</td>"

infoRussia[row].append(track[1])

if track[0] != "Обработка":

print"<td align=\"left\">"+track[0]+"</td>"

infoRussia[row].append(track[0])

else:

print"<td align=\"left\">"+track[4]+"</td>"

infoRussia[row].append(track[4])

print"<td>"+track[3]+"</td>"

infoRussia[row].append(track[3])

print"<td>"+track[5]+"</td>"

infoRussia[row].append(track[5])

print"<td>"+track[6]+"</td>"

infoRussia[row].append(track[6])

print"</tr>"

row+=1

return infoRussia

################################# США ########################################

def Usa(ItemUSA):

paramsUSA = urllib.urlencode({'tLabels': ItemUSA})

headers = {"User-Agent" : "Mozilla/5.0 (X11; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0"}

try:

req = urllib2.Request('https://tools.usps.com/go/TrackConfirmAction.action', paramsUSA,headers)

u = urllib2.urlopen(req,paramsUSA).read()

except urllib2.HTTPError, error:

print"<p style=\"color:#FF0000\">Сайт почты США временно не доступен! Попробуйте позднее.</p>"

return False

except urllib2.URLError, error:

print"<p style=\"color:#FF0000\">Сайт почты США временно не доступен! Попробуйте позднее.</p>"

return False

data = re.compile("<div class=\"td-status\">.*?<p>(.*?)</p>.*?</div>.*?<div class=\"td-date-time\">.*?<p.*?>(.*?)</p>.*?</div>.*?<div class=\"td-location\">.*?<p.*?>(.*?)</p>.*?</div>",re.DOTALL).findall(u)

#~ r = re.compile("<div class=\"td-service\">(.*?)</div>.*?<div class=\"td-status\">(.*?)</div>.*?<div class=\"td-date-time\">(.*?)</div>.*?<div class=\"td-location\">(.*?)</div>.*?<div class=\"features-p\">(.*?)</div>",re.DOTALL)

if len(data)==0:

print"<p style=\"color:#FF0000\">О данной посылке на почте США пока нет иформации, убедитесь в правильности введеного почтового идентификатора или попробуйте позже!</p>"

return True

infoUSA = []

row = 0

for track in data:

infoUSA.append([])

print" <tr align=\"center\">"

print"<td><img src=\"/images/country/us.png\" width=\"20\" height=\"20\"/></td>"

infoUSA[row].append("Usa")

print"<td>"+track[1]+"</td>"

infoUSA[row].append(track[1])

print"<td align=\"left\">"+track[0]+"</td>"

infoUSA[row].append(track[0])

print"<td>"+track[2]+"</td>"

infoUSA[row].append(track[2])

print"<td>-</td>"

infoUSA[row].append("-")

print"<td>-</td>"

infoUSA[row].append("-")

print"</tr>"

row+=1

return infoUSA

П.E.3 Модуль captcha.py

#!/usr/bin/python2

# -*- coding: UTF-8 -*-

from cv import *

import os,time,cap

from PIL import Image

from operator import itemgetter

from pyfann import libfann

def timeit(f):

def timed(*args, **kw):

ts = time.time()

result = f(*args, **kw)

te = time.time()

print '%r: %2.4f sec' % \

(f.__name__, te-ts)

return result

return timed

ann_file = "/srv/http/temp/ann/china.net"

train_file = "/srv/http/temp/ann/china.train"

segment_dir = "/srv/http/temp/trainsegments/"

segnow_dir = "/srv/http/temp/segments/"

charset = "2345678abcdefgmnpwxy"

segW = 18

segH = 18

num_input = segW*segH

num_output = len(charset)

num_neurons_hidden = num_input/3

desired_error = 0.00001

max_iterations = 10000

iterations_between_reports = 20

connection_rate = 1.0

learning_rate = 0.3

#создания файла для обучения нейронной сети

@timeit

def Create_train_file(segments_dir,train_file,num_input,num_output):

segments = os.listdir(segments_dir)

f = open(train_file, "w")

f.write("%d %d %d\n" % (len(segments), num_input, num_output))

for name in segments:

image = Image.open(segments_dir + name).convert("P")

for x in range(image.size[0]):

for y in range(image.size[1]):

f.write("%d " % int(image.getpixel((x,y))/159.375 - 2))

f.write("\n")

n = charset.index(os.path.splitext(name)[0][0])

f.write("-1 " * n + "1" + " -1" * (num_output - n - 1) + "\n")

f.close()

print "Samples: %d" % len(segments)

print "Input: %d" % num_input

print "Output: %d" % num_output

#процесс создания и обучения нейронной сети

ann = libfann.neural_net()

ann.create_sparse_array(connection_rate, (num_input, num_neurons_hidden, num_output))

ann.set_learning_rate(learning_rate)

ann.set_activation_function_hidden(libfann.SIGMOID_SYMMETRIC_STEPWISE)

ann.set_activation_function_output(libfann.SIGMOID_SYMMETRIC_STEPWISE)

ann.train_on_file(train_file, max_iterations, iterations_between_reports, desired_error)

ann.save(ann_file)

#~ Create_train_file(segment_dir,train_file,num_input,num_output)

#использование обученной сети для распознавания сегментов капчи

#~ @timeit

def Magic(segments,ann_file,charset):

answer = []

ann = libfann.neural_net()

ann.create_from_file(ann_file)

for segment in segments:

lst = []

for x in range(segment.size[0]):

for y in range(segment.size[1]):

lst.append(int(segment.getpixel((x,y))/159.375 - 2))

res = ann.run(lst)

answer.append(charset[res.index(max(res))])

return "".join(answer)

#~ print Magic(segnow_dir,ann_file,charset)

#разделение на сегменты и распознавание

#~ @timeit

def segment(path):

image = Image.open(path).convert("P")

temp = Image.new("P",image.size,0)

for x in range(image.size[0]):

for y in range(image.size[1]):

if image.getpixel((x,y)) == 0:

temp.putpixel((x,y),255)

temp = temp.crop((2,2,83,33))

imgcv = CreateImageHeader(temp.size, IPL_DEPTH_8U, 1)

SetData(imgcv, temp.tostring())

dilate = CloneImage(imgcv)

element = CreateStructuringElementEx( 2, 2, 1, 1, CV_SHAPE_RECT )

Dilate(imgcv, dilate,element,1)

temp = CloneImage(dilate)

components = cap.findCCs(dilate, 0, lambda col: col <= 125, lambda comp: comp[0] <= 25)

components = cap.joinCCs(components, cap.rectsIntersectH)

parts = cap.partsFromnSegs5(components)

components = cap.spltCCs(components, parts, projRadius=4, thresh=1)

SaveImage(segnow_dir+"comsz2.png",cap.drawComponents(temp, components))

segments = map(lambda comp: comp[3], components)

pisegments = []

#~ for i in range(len(segments)):

for segment in segments:

pi = Image.fromstring("P", GetSize(segment), segment.tostring())

pisegments.append(pi.resize((segW,segH)))

return Magic(pisegments,ann_file,charset)

#~ print segment("/home/invictus/Desktop/newCaptchaChina/2g65w.jpg")

#тестирование кол-ва распознаваемых каптча

@timeit

def Testing(path_examples):

goods=0

bad=0

captchas = os.listdir(path_examples)

for name in captchas:

res = segment(os.path.join(path_examples, name))

print "\nres: "+res+"\nreal: " + name[:-4]

print os.path.join(path_examples, name)

if (res == name[:-4]):

goods +=1

else:

bad +=1

print "----------------------"

print "Goods: %d --> %f" % (goods, (goods*100/(bad+goods)))+"%"

print "Bad: %d" % bad

print "All: %d" % (bad+goods)

П.E.4 Модуль brain.py

#!/usr/bin/python2

maska={}

maska[0,'number']='0'

maska[0,'x']=5,6,7,8,7,8,7,8,6,5,2,1,-1,-1,-2,-2,-3,-2,-1,-2,4,1,4,1,4,1

maska[0,'y']=0,1,2,3,5,7,10,12,13,15,15,14,14,12,12,10,8,5,3,2,4,4,11,11,7,7

maska[1,'number']='1'

maska[1,'x']=3,6,6,6,6,6,8,8,8,5,2,-1,-1,-1,1,1,1,1,0,0

maska[1,'y']=0,0,3,6,9,11,11,14,16,16,16,16,14,11,11,9,7,4,4,2

maska[2,'number']='1'

maska[2,'x']=3,6,6,6,6,7,7,4,2,-1,-1,-1,1,1,1,1,0

maska[2,'y']=0,0,3,6,10,10,14,14,14,14,12,10,10,8,6,3,2

maska[3,'number']='3'

maska[3,'x']=3,6,9,9,8,7,7,9,9,10,9,10,8,7,5,3,1,-1,-1,0,0,2,4,5,4,2,1,1,2,3,0,-1,0

maska[3,'y']=0,0,0,1,3,4,6,6,8,10,12,13,14,16,15,16,16,16,14,13,11,12,12,10,9,8,9,7,5,4,4,3,2

maska[4,'number']='5'

maska[4,'x']=3,7,7,5,5,2,3,6,7,6,7,6,7,7,5,4,3,1,0,-1,1,-2,-2,2,3,0,-2,-1,-1,-1

maska[4,'y']=0,0,1,2,4,3,5,5,6,7,9,10,11,12,13,14,13,14,14,10,10,9,8,8,9,8,6,5,3,1

maska[5,'number']='2'

maska[5,'x']=3,6,8,7,8,8,7,7,5,4,6,9,8,7,8,5,2,-1,-3,-2,-1,-1,1,0,2,1,3,3,0,-2,-2,-1

maska[5,'y']=0,0,1,2,3,5,6,7,8,10,10,10,11,12,14,14,14,14,14,12,11,10,9,8,7,6,5,3,5,6,4,2

maska[6,'number']='9'

maska[6,'x']=3,6,5,8,9,8,8,8,7,7,5,5,3,1,-1,0,1,2,1,-1,-1,-3,-2,-3,-2,-3,-1,-1,2,4,4,2,2,4

maska[6,'y']=0,0,1,2,4,5,7,9,11,14,15,17,17,17,17,15,13,12,11,12,10,10,8,6,4,3,2,1,5,5,8,8,6,7

maska[7,'number']='4'

maska[7,'x']=2,5,5,5,5,5,6,6,5,5,5,3,0,0,0,-2,-4,-2,-1,0,0,0,0,-2,-1,-1

maska[7,'y']=0,0,2,4,6,8,9,11,10,13,14,14,14,12,11,11,11,8,6,4,5,7,8,3,2,1

maska[8,'number']='2'

maska[8,'x']=2,4,6,6,6,6,5,8,9,8,9,7,4,1,-1,-3,-2,0,-1,1,0,2,1,3,4,4,2,3,1,-1,-2,-2,-1,1

maska[8,'y']=0,0,0,1,5,7,11,13,14,15,16,16,16,16,16,16,14,13,12,11,10,9,8,7,5,3,3,4,6,5,6,3,2,1

maska[9,'number']='8'

maska[9,'x']=1,3,5,6,7,6,7,5,7,8,8,8,6,7,6,4,3,1,1,-1,-1,0,0,-2,-1,2,4,2,3

maska[9,'y']=1,0,0,2,3,5,6,7,8,9,11,13,13,14,15,14,15,15,14,13,11,9,5,2,1,4,5,6,5

maska[10,'number']='6'

maska[10,'x']=2,5,4,4,3,4,5,6,6,7,7,7,6,5,4,3,0,-1,-2,-2,-4,-3,-4,-3,-3,-1,-2,-1,1,3,2,3,2,1,0

П.E.5 Модуль savetrack.py

#!/usr/bin/python2

# -*- coding: UTF-8 -*-

import xlwt,ooolib

#from datetime import datetime

def save_to_xls(nametrack,info):

font0 = xlwt.Font()

font0.name = 'Times New Roman'

font0.colour_index = 0

font0.bold = True

style0 = xlwt.XFStyle()

style0.font = font0

wb = xlwt.Workbook(encoding='UTF-8')

ws = wb.add_sheet(nametrack)

ws.write(0, 0, 'Страна', style0)

ws.write(0, 1, 'Дата', style0)

ws.write(0, 2, 'Операция', style0)

ws.write(0, 3, 'Название ОПС', style0)

ws.write(0, 4, 'Вес(кг.)', style0)

ws.write(0, 5, 'Объявл. ценность (руб.)', style0)

for row in xrange(0,len(info)):

for col in xrange(0,len(info[row])):

ws.write(row+1,col,info[row][col])

wb.save("/srv/http/temp/"+nametrack+".xls")

def save_to_ods(nametrack,info):

doc = ooolib.Calc(nametrack)

doc.set_cell_property('bold', True)

doc.set_cell_value(1, 1,"string","Страна".decode("UTF-8"))

doc.set_cell_value(2, 1,"string","Дата".decode("UTF-8"))

doc.set_cell_value(3, 1,"string","Операция".decode("UTF-8"))

doc.set_cell_value(4, 1,"string","Название ОПС".decode("UTF-8"))

doc.set_cell_value(5, 1,"string","Вес(кг.)".decode("UTF-8"))

doc.set_cell_value(6, 1,"string","Объявл. ценность (руб.)".decode("UTF-8"))

doc.set_cell_property('bold', False)

for row in xrange(0,len(info)):

for col in xrange(0,len(info[row])):

doc.set_cell_value(col+1, row+2, "string", info[row][col].decode("UTF-8"))

doc.save("/srv/http/temp/"+nametrack+".ods")

П.E.6 Модуль dictcountry.py

#!/usr/bin/python2

# -*- coding: UTF-8 -*-

country={}

country['AC']="Azores"

country['AD']="Andorra"

country['AE']="Utd.Arab.Emir."

country['AF']="Afghanistan"

country['AG']="Antigua/Barbads"

country['AI']="Anguilla"

country['AL']="Albania"

country['AM']="Armenia"

country['AN']="Netherland Antilles"

country['AO']="Angola"

country['AP']="Asia Pacific Ctries"

country['AQ']="Antarctica"

country['AR']="Argentina"

country['AS']="Samoa,American"

country['AT']="Austria"

country['AU']="Australia"

country['AW']="Aruba"

country['AZ']="Azerbaijan"

country['BA']="Bosnia-Herz."

country['BB']="Barbados"

country['BD']="Bangladesh"

country['BE']="Belgium"

country['BF']="Burkina-Faso"

country['BG']="Bulgaria"

country['BH']="Bahrain"

country['BI']="Burundi"

country['BJ']="Benin"

country['BM']="Bermuda"

country['BN']="Brunei Darussalam"

country['BO']="Bolivia"

country['BR']="Brazil"

country['BS']="Bahamas"

country['BT']="Bhutan"

country['BV']="Bouvet Island"

country['BW']="Botswana"

country['BY']="Belarus"

country['BZ']="Belize"

country['CA']="Canada"

country['CC']="Cocos Islands"

country['CD']="Congo Dem.Rep."

country['CF']="Central Afr.Rep"

country['CG']="Congo"

country['CH']="Switzerland"

country['CI']="Ivory Coast"

country['CK']="Cook Islands"

country['CL']="Chile"

country['CM']="Cameroon"

country['CN']="China"

country['CO']="Colombia"

country['CR']="Costa Rica"

country['CU']="Cuba"

country['CV']="Cape Verde"

country['CX']="Christmas Island"

country['CY']="Cyprus"

country['CZ']="Czech Republic"

country['DE']="Germany"

country['DG']="Diego Garcia"

country['DJ']="Djibouti"

country['DK']="Denmark"

country['DM']="Dominica"

country['DO']="Dominican Rep."

country['DZ']="Algeria"

country['EC']="Ecuador"

country['EE']="Estonia"

country['EG']="Egypt"

country['ER']="Eritrea"

country['ES']="Spain"

country['ET']="Ethiopia"

country['FI']="Finland"

country['FJ']="Fiji"

country['FK']="Falkland Islnds"

country['FM']="Micronesia"

country['FO']="Faroe Island"

country['FR']="France"

country['GA']="Gabon"

country['GB']="United Kingdom"

country['GD']="Grenada"

country['GE']="Georgia"

country['GF']="French Guinea"

Размещено на Allbest.ru


Подобные документы

  • Общие характеристики и стандарты электронной почты. Почтовые программы, регистрация почтовых ящиков, этикет, безопасность и технология функционирования электронной почты. Получение и отправка сообщений, адресная книга и процедура работы с вложениями.

    курсовая работа [704,1 K], добавлен 26.08.2010

  • История появления электронной почты как технологии и сервиса по пересылке электронных сообщений между пользователями компьютерной сети. Система организации почтовых адресов. Принцип работы электронной почты, ее основные преимущества и недостатки.

    презентация [842,6 K], добавлен 03.10.2016

  • Понятие электронной почты. Сравнительная характеристика почтовых систем и оценка эффективности. Обучение персонала использованию электронной почты. Защита персональных данных. Преступления в сфере компьютерной деятельности. Дистанционное обучение.

    дипломная работа [77,6 K], добавлен 23.06.2012

  • Основные и дополнительные функции почтовых клиентов. Специальные функции средств и сравнительная оценка почтовых программ. Почтовый клиент Becky, Mozilla. Технология функционирования электронной почты, средства управления и возможности почтового ящика.

    курсовая работа [440,7 K], добавлен 07.12.2010

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

    курсовая работа [47,4 K], добавлен 20.12.2010

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

    курсовая работа [423,2 K], добавлен 20.12.2015

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

    дипломная работа [1,5 M], добавлен 10.06.2013

  • Сущность понятия электронной почты, ее возможности в современной сети Интернет. Основные угрозы, мешающие работе этой формы электронной коммуникации. Особенности способов информационной защиты, принципы корректного использования электронной почты.

    контрольная работа [20,0 K], добавлен 28.12.2012

  • Общее понятие о DHCP (протоколе динамического конфигурирования адресов). Порядок настройки сервера и доставки почты. Описание конфигурации в специальном файле. Особенности процесса отправки и приема сообщений. Режимы работы программного интерфейса.

    презентация [138,5 K], добавлен 25.10.2013

  • Базовые понятия систем электронной почты. Протокол обмена электронной почтой. Релеи, маршрутизация почты. Основные угрозы почтовой службы. Безопасность почтового сервера. Защита от вредоносного программного обеспечения. Средства динамического скрининга.

    курсовая работа [2,3 M], добавлен 28.01.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.