Информационное обеспечение образовательного процесса в учреждении высшего образования подлежит аккредитационной экспертизе, которая подтверждает соответствие образовательных программ вуза требованиям Федеральных государственных образовательных стандартов (далее – ФГОС). Библиотечный фонд, как одна из главных составляющих такого обеспечения, должен быть укомплектован печатными и/или электронными учебными изданиями [1].
Списки литературы рабочих программ дисциплин (далее – РПД) подлежат проверке. Как правило, перед утверждением РПД сотрудники библиотеки проверяют наличие печатных изданий и доступ к электронным изданиям, указанным в качестве основной и дополнительной литературы в РПД. Такая верификация осуществляется перед утверждением РПД и после их актуализации, в том числе внесения изменений в список литературы.
На момент изучения любой дисциплины, входящей в учебный план направления подготовки, вся указанная в ней литература должна быть доступна обучающимся, и в частности издания, находящиеся на сайтах ЭБС. В противном случае происходит нарушение требований ФГОС [2]. По определенным причинам то или иное издание может стать недоступным для студентов и сотрудников вуза в конкретной ЭБС. Это обусловливает необходимость периодических проверок ссылок на их доступность, что, в свою очередь, требует временных затрат со стороны проверяющих, а также не исключает человеческого фактора.
Информатизация общества обусловила проникновение компьютерных технологий во все сферы жизни человека и позволила автоматизировать процессы во многих предметных областях. Сфера образования, как одна из наиболее быстро реагирующих на изменения в обществе, не является исключением и активно внедряет современные информационные технологии, в том числе и в деятельность библиотек.
В настоящее время библиотеки вузов находятся в поиске средств, которые позволили бы автоматизировать процесс мониторинга учебно-методического обеспечения образовательного процесса [3]. Однако в описаниях применяемых библиотеками программных средств не указаны модули, осуществляющие мониторинг доступности изданий в ЭБС.
Следует отметить, что в настоящее время существуют сервисы для проверки работоспособности ссылок. Рассмотрим подробнее особенности двух наиболее известных и распространенных таких сервисов: xseo.in и Ablebits Link Checker for Microsoft Word.
Сервис Xseo.in (рис. 1) предназначен для поиска ссылок в тексте и проверки работоспособности этих ссылок (проверяется код ответа HTTP). Популярность сервиса обусловлена тем, что он бесплатный. В рамках решаемой нами проблемы к недостаткам данного сервиса можно отнести необходимость ручного поиска и ввода списка литературы из РПД, а, главное, отсутствие проверки статуса издания в ЭБС.
Рис. 1. Интерфейс сервиса xseo.in
Рис. 2. Интерфейс Ablebits Link Checker for Microsoft Word
Программный сервис Ablebits Link Checker for Microsoft Word (рис. 2) является дополнением к Microsoft Office Word и позволяет напрямую проверять работоспособность ссылок в документе, особым образом отмечая и отображая список «подозрительных» ссылок. По сути, в РПД, содержащей ссылки на литературу в ЭБС, данный сервис сможет проверить, корректна ли ссылка на издание, то есть осуществится ли переход по ней и откроется ли что-то в браузере.
Сервисы проверки работоспособности ссылок не решают проблемы определения доступности издания в ЭБС, так как в таких сервисах не предусмотрен отбор пользователем особенностей отображаемого по ссылке контента. Это, в свою очередь, актуализировало необходимость разработки программного средства, решающего указанную проблему.
Материалы и методы исследования
В данной статье представлен вариант реализации программного решения, которое позволяет автоматизировать мониторинг доступности издания следующим образом.
В выбранном пользователем файле (РПД) осуществляется поиск списка литературы, в котором идентифицируются ссылки на ЭБС, и происходит проверка их статуса. По результатам работы программного средства пользователь получает сообщение о том, по каким ссылкам издания доступны для чтения или не доступны. У программного средства для входа в ЭБС должны быть соответствующие логины и пароли.
В общем виде жизненный цикл проверки показан на UML-диаграмме последовательности (рис. 3).
Рис. 3. Диаграмма последовательности
Как видно из диаграммы, выбранный пользователем файл сначала преобразуется. Обратим внимание, что РПД, как правило, в библиотеку для верификации попадают в формате текстового файла.
В качестве языка программирования для реализации программного средства был выбран Python 3.7.9.
Для работы Python с документом Microsoft Word необходимо преобразовать его в современный формат docx, это необходимо сделать по требованию работы с библиотекой python-docx [4]. Для этого в программе была предусмотрена функция преобразования (листинг 1).
Листинг 1
Конструктор класса Doc
class Doc:
# получение корневой папки с программой
ProgramInstalDir = "\\".join(os.path.abspath(__file__).split("\\")[:-1])
def __init__(self, FileName, Login1, Password1, load):
# получение расширение файла и копирование файла в корневую папку
Extension = FileName.split(".")[-1]
FileName = shutil.copyfile(
FileName, self.ProgramInstalDir+'\\temp.doc')
if Extension == "docx":
self.FileName = FileName
else:
self.FileName = self.ConvertToDocx(FileName)
Как видно из листинга 1, если файл имеет расширение docx, то конвертация не требуется, иначе - вызывается метод конвертации (листинг 2).
Листинг 2
Метод ConvertToDocx
def ConvertToDocx(self, FileName):
word = win32com.client.Dispatch('Word.Application')
doc = word.Documents.Add(FileName)
Target = self.ProgramInstalDir+'\\temp_converted.docx'
doc.SaveAs(Target, FileFormat=16)
doc.Close()
return Target
В результате получается файл формата docx, с которым можно проводить операции чтения.
Далее в файле необходимо найти список с литературой. Для этого вызывается метод поиска списка (листинг 3), который ищет в документе соответствующие заголовки. Пример того, как выглядит список литературы в РПД, приведен на рис. 4.
Рис. 4. Список литературы в РПД
Листинг 3
Метод SearchLit
def SearchLit(self):
doc = docx.Document(self.FileName)
lit_stop = [0, 0]
self.Main_lit = []
for par in doc.paragraphs:
# чтение строк из документа
if lit_stop[1] == 1:
break
elif par.text == "":
pass
elif re.search(r'Электронные ресурсы', par.text, flags=re.IGNORECASE):
# следующие строки будут с литературой
lit_stop[0] = 1
elif re.search(r'Печатные издания', par.text, flags=re.IGNORECASE):
# список литературы закончился
lit_stop[1] = 1
elif lit_stop[0] == 1 and lit_stop[1] == 0:
self.Main_lit.append(par.text)
На основании строк, содержащихся в списке литературы, проводится их синтаксический анализ при помощи регулярных выражений. Далее все ссылки помещаются в массив для дальнейшей обработки (листинг 4).
Листинг 4
Метод UrlSearch
def UrlSearch(self, lit_arr, load):
url_arr = []
# для отображения прогресса
proggres_hop = int(20/(len(arr)+0.01))
for i in lit_arr:
url = re.search(r'https?://[\S]+', i, flags=re.IGNORECASE)
if not url:
url = re.search(r'www.[\S]+', i, flags=re.IGNORECASE)
if url:
# если последний символ точка, то удалить ее
if url[0][-1] == ".":
url_arr.append(url[0][:-1])
else:
url_arr.append(url[0])
else:
url_arr.append("Ссылка не найдена")
self.Progress += proggres_hop
load.setValue(self.Progress)
return url_arr
Проверку доступности необходимо выполнять индивидуально для каждой ЭБС, так как все они имеют различный подход к авторизации и проверке доступности изданий. В качестве примера рассмотрим модуль для ЭБС "Лань" с использованием открытого API (листинг 5).
Листинг 5
Модуль ebs_lan
import requests
import json
def Authorization(login, password):
# Выполняем вход в ЭБС
url = 'https://e.lanbook.com/api/v2/signin'
user_agent_val = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
# Создаем сессию и указываем наш user-agent
session = requests.Session()
r = session.get(url, headers={
'User-Agent': user_agent_val
})
# Указываем referrer
session.headers.update({'Referrer': url})
session.headers.update({'User-Agent': user_agent_val})
# Осуществляем вход с помощью метода POST с указанием необходимых данных
post_request = session.post(url, {
'login': login,
'password': password,
'type': 'UserCredentials'
})
login1 = json.loads(post_request.text)
if login1["status"] == "ok":
return session
else:
return "Ошибка авторизации в ЭБС Лань"
def Check_available(book_id, session):
user_agent_val = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'
session.headers.update({'User-Agent': user_agent_val})
a = session.get(
'https://e.lanbook.com/api/v2/catalog/book/'+str(book_id)).text
j = json.loads(a)
if j["body"]:
if j["body"]["available"]:
return "Книга доступна"
else:
return "Книга не доступна"
else:
return "Книга не найдена"
Данный модуль возвращает информацию о доступности издания (то есть возможности его открытия и/или скачивания) для аккаунта, а также о наличии самого издания в электронной библиотеке.
Результаты исследования и их обсуждение
Готовая программа выглядит следующим образом (рис. 5). Графический интерфейс программного средства был создан с использованием PyQt [5], так как данная библиотека позволяет довольно просто создавать графический интерфейс для программы.
Рис. 5. Графический интерфейс программного средства
Для осуществления проверки работоспособности ссылок пользователь вводит данные для авторизации в системах ЭБС, затем нажимает соответствующую кнопку и выбирает текстовый файл. После этого проходит авторизация с помощью модуля request [6], затем пользователь получает готовый отчет о проверке (рис. 6).
Рис. 6. Отчет о проверке работоспособности ссылок
Заключение
В результате работы получилось программное средство, которое имеет простой интерфейс и позволяет автоматизировать проверку РПД на наличие недоступных ссылок. Спроектированная структура программы позволяет легко расширять количество проверяемых ЭБС с помощью добавления отдельных модулей.