Мы постоянно используем почтовые сервисы для обмена сообщениями, документами, файлами. Выполнение курсовой работы чаще всего затрагивает использование таких сервисов, но их использование не несет упорядоченности. У каждого наверняка уже есть множество аккаунтов электронной почты, социальных сетей, которые переполнены разного рода информацией, в которых легко упустить что-то важное. В том числе, на кафедре осуществляется хранение работ до некоторого срока, но какой либо специальной информационной базы для этого, как правило, не существует, необходимые документы легко могут быть утеряны.
Все это говорит о том, что образовательный процесс нуждается в своих специализированных программных инструментах. Так наличие соответствующего прикладного решения могло бы не только решить данные проблемы, но также предоставить новые функциональные возможности, упрощающие деятельность преподавателей и студентов. Именно разработке такого программного средства посвящена данная работа.
Благодаря широкой структуре объекта документа «Курсовая работа» в созданном программном средстве доступна вся необходимая функциональность по учету и мониторингу работ, а также проверке и хранению данных о них.
В работе предусматривается свой собственный механизм обмена сообщениями в разрезе курсовых работ прямо из используемых программ, что упрощает коммуникацию между студентом и преподавателем в процессе выполнения работы.
В больших потоках информации возникает необходимость обеспечить хранение отдельной информации с удобным доступом к ней. Программное средство реализует хранение и обмен файлами различных форматов, которые связаны с курсовыми работами. Файлы могут открываться непосредственно из приложений. Для проверки на плагиат используются текстовые документы в формате Microsoft Word.
Если для реферата уникальность не имеет принципиального значения, то курсовой проект это уже работа с претензией на научную значимость, и она должна иметь определенный процент уникальности. В работе реализована автоматизация проверки курсовых работ прямо с используемого приложения. В соответствии с логикой программного средства работы на проверку отправляет преподаватель, а результаты проверки доступны как преподавателю, так и студенту.
Накопленная информация не редко должна быть обработана и проанализирована, поэтому в программе представлены некоторые механизмы отчетности. В программном средстве присутствуют отчеты, которые могут быть использованы в интересах кафедры, такие как: отчет по задолженностям, отчет по состоянию курсовых работ в заданном периоде на кафедре, отчет по группе.
В моей разработке подразумевается, что преподаватель использует приложение на персональном компьютере, имеющее расширенный функционал, заключающийся в том, что преподаватель может создать (как объект системы) и назначить курсовую работу любому студенту, а также имеет доступ ко всем справочникам и документам, может их редактировать. Студент, в свою очередь, имеет преднамеренно ограниченный функционал на своем мобильном устройстве. Студент может отвечать на сообщения, прикреплять и получать файлы, смотреть за статусом своей работы, получать уведомления.
Основным объектом конфигураций данных приложений является документ «Курсовая работа», который использует справочники для заполнения своих реквизитов и предоставляет все необходимые команды с ним связанные. Именно в объекте конфигурации «Курсовая работа» реализована автоматизация проверки на плагиат.
Форма объекта «Курсовая работа» имеет три вкладки, первая из них «Документ», содержащая основные реквизиты. Вторая вкладка «Файлы» содержит список файлов, прикрепленных к курсовой работе, в том числе сам текстовый файл, который подвергается проверке на плагиат. По кнопке «Антиплагиат» отправляем текст работы на проверку, а по кнопке «Результат проверки» получаем результаты проверки, на основании которых автоматически формируется содержимое вкладки «Уникальность».
Для проверки на плагиат используется API сайта text.ru, который предоставляет услуги по созданию и соблюдению уникального контента. Взаимодействие с API происходит в два этапа. На первом этапе отправляем текст и пользовательский ключ посредством POST запроса на сервер сайта, на что в ответ получаем уникальный идентификатор проверки UID. В это время наш текст становится в очередь на проверку. Получение результатов проверки происходит на втором этапе: по запросу, который включает пользовательский ключ и уникальный идентификатор проверки UID получаем развернутый ответ. Ответ содержит процент уникальности работы, дату проверки на сервере сайта и массив ссылок в интернете с соответствующим процентом заимствований.
Так как текстовый файл хранится в сжатом виде двоичных данных, то чтобы его открыть в дальнейшем, мы записываем файл во временном хранилище операционной системы. Для работы с текстовым файлом формата Microsoft Word создаем COM-объект "Word.Application" с отключением отображения и открываем наш временный файл. Весь текст документа копируем по предложениям в отдельную переменную, после чего закрываем документ Microsoft Word и удаляем временный файл.
&НаСервере
Процедура АнтиплагиатНаСервере(Файл)
ФайлСсылка = Файл;
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("docx");
ДвоичныеДанные = ФайлСсылка.Файл.Получить();
ДвоичныеДанные.Записать(ИмяВременногоФайла);
Ворд = Новый COMОбъект("Word.Application");
Ворд.Visible = Ложь;
Ворд.Documents.Open(ИмяВременногоФайла);
Документ = Ворд.ActiveDocument();
Для н = 1 по Документ.Sentences.Count Цикл
Текст = "" + Текст + Документ.Sentences(н).Text;
КонецЦикла;
Документ.Close();
Ворд.Quit();
УдалитьФайлы(ИмяВременногоФайла);
Попытка
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2,"utf-8");
WinHttp.Open("POST","http://api.text.ru/post",0);
WinHttp.SetRequestHeader("Accept-Language", "ru");
WinHttp.SetRequestHeader("Accept-Charset","utf-8");
WinHttp.setRequestHeader("Content-Language", "ru");
WinHttp.setRequestHeader("Content-Charset", "utf-8");
WinHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
ПараметрыПОСТ = "text=" + Текст + "&userkey=" + Константы.userkey.Получить();
WinHttp.Send(ПараметрыПОСТ);
Если WinHttp.Status = 200 Тогда
ТекстОтвета = WinHttp.ResponseText();
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТекстОтвета);
СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON, Ложь);
Для Каждого Элемент Из СтруктураОтвета Цикл
Если Элемент.Ключ = "error_code" Тогда
Сообщить("Код ошибки: " + Элемент.Значение);
КонецЕсли;
Если Элемент.Ключ = "error_desc" Тогда
Сообщить("Описание ошибки: " + Элемент.Значение);
КонецЕсли;
Если Элемент.Ключ = "text_uid" Тогда
Объект.UID = Элемент.Значение;
Сообщить("Работа успешно отправлена на проверку!");
КонецЕсли;
КонецЦикла;
Иначе
Сообщить("HTTP " + WinHttp.Status + " " + WinHttp.StatusText);
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура Антиплагиат(Команда)
СтрокаТЧ = Элементы.СписокДокументов.ТекущиеДанные;
АнтиплагиатНаСервере(СтрокаТЧ.Файл);
КонецПроцедуры
Чтобы отправить POST запрос создаем COM-объект WinHttp, задаем заголовки запроса, указываем адрес, параметры, в том числе ранее скопированный текст и отправляем запрос на веб-сервер.
При успешном выполнении читаем ответ в формате JSON, сохраняем UID, в ином случае выводим текст ошибки.
После выполнения этих действий текст курсовой работы находится в очереди на проверку на веб-сервере. Чтобы получить результат нажимаем кнопку «Результат проверки». Процедура, соответствующая кнопке, создает аналогичный по структуре POST запрос, только в параметрах вместо текста указываем UID. Текст ответа читаем в формате JSON, в процессе чего заполняем реквизиты объекта «Курсовая работа»: дату проверки, процент уникальности и табличную часть, содержащую ссылки в интернете с соответствующим процентом заимствований.
&НаСервере
Процедура РезультатПроверкиНаСервере()
Попытка
WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
WinHttp.Option(2,"utf-8");
WinHttp.Open("POST","http://api.text.ru/post",0);
WinHttp.SetRequestHeader("Accept-Language", "ru");
WinHttp.SetRequestHeader("Accept-Charset","utf-8");
WinHttp.setRequestHeader("Content-Language", "ru");
WinHttp.setRequestHeader("Content-Charset", "utf-8");
WinHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=utf-8");
ПараметрыПОСТ = "uid=" + Объект.UID + "&userkey=" + Константы.userkey.Получить();
WinHttp.Send(ПараметрыПОСТ);
Если WinHttp.Status = 200 Тогда
ТекстОтвета = WinHttp.ResponseText();
Иначе
Сообщить("HTTP " + WinHttp.Status + " " + WinHttp.StatusText);
КонецЕсли;
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(ТекстОтвета);
СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON, Ложь);
Для Каждого Элемент Из СтруктураОтвета Цикл
Если Элемент.Ключ = "error_code" Тогда
Сообщить("Код ошибки: " + Элемент.Значение);
КонецЕсли;
Если Элемент.Ключ = "error_desc" Тогда
Сообщить("Описание ошибки: " + Элемент.Значение);
КонецЕсли;
Если Элемент.Ключ = "text_unique" Тогда
ЭтаФорма.Модифицированность = Истина;
Объект.УникальностьТекста = Элемент.Значение;
Сообщить("Уникальность работы: " + Элемент.Значение + "%");
Сообщить("Проверьте страницу 'Уникальность'");
КонецЕсли;
Если Элемент.Ключ = "result_json" Тогда
ЧтениеResult = Новый ЧтениеJSON;
ЧтениеResult.УстановитьСтроку(Элемент.Значение);
СтруктураResult = ПрочитатьJSON(ЧтениеResult, Ложь);
Для Каждого Значение Из СтруктураResult Цикл
Если Значение.Ключ = "urls" Тогда
ЭтаФорма.Объект.Ссылки.Очистить();
Для Каждого ЭлементМассива Из Значение.Значение Цикл
НоваяСтрока = Объект.Ссылки.Добавить();
НоваяСтрока.Url = ЭлементМассива.url;
НоваяСтрока.Процент = ЭлементМассива.plagiat;
КонецЦикла;
Продолжить;
КонецЕсли;
Если Значение.Ключ = "date_check" Тогда
Объект.ДатаПроверки = Значение.Значение;
КонецЕсли;
КонецЦикла;
Продолжить;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура РезультатПроверки(Команда)
РезультатПроверкиНаСервере();
КонецПроцедуры
Проверка работ через API привязана к определенной учетной записи. Под своей учетной записью на сайте text.ru можно получить пользовательский ключ, либо заменить его. По пользовательскому ключу выполняются все запросы по взаимодействию с API text.ru, а также в форме «Пользовательский ключ» можно не только задать ключ, но и проверить баланс остатка символов в учетной записи.
Проверка баланса осуществляется POST запросом с параметрами method = get_packages_info и пользовательским ключом. В ответе по значению ключа size сообщаем пользователю остаток символов в учетной записи.
Данное решение не является полностью завершенным и протестированным, а представляет наработки по теме.