Асинхронный веб-сервер, получающий от клиента запрос со списком url статей и возвращающий клиенту JSON с информацией о "рейтинге желтушности" каждой из статей. Рейтинг рассчитывается по частоте повторения в статье слов, характерных для "жёлтой" прессы.
Пример запроса клиента:
GET /?urls=https://inosmi.ru/social/20201205/248649230.html,http://example.com HTTP/1.1
Пример ответа сервера:
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 197
Server: Python/3.9 aiohttp/3.7.3
[{"status": "PARSING_ERROR", "url": "http://example.com", "score": null, "words_count": null}, {"status": "OK", "url": "https://inosmi.ru/social/20201205/248649230.html", "score": 0.98, "words_count": 410}]
Пока поддерживается только один новостной сайт - ИНОСМИ.РУ. Для него разработан специальный адаптер, умеющий выделять текст статьи на фоне остальной HTML разметки. Для других новостных сайтов потребуются новые адаптеры, все они будут находиться в каталоге adapters
. Туда же помещен код для сайта ИНОСМИ.РУ: adapters/inosmi_ru.py
.
В перспективе можно создать универсальный адаптер, подходящий для всех сайтов, но его разработка будет сложной и потребует дополнительных времени и сил.
Вам понадобится Python версии 3.7 или старше. Для установки пакетов рекомендуется создать виртуальное окружение.
Первым шагом установите пакеты:
pip install -r requirements.txt
python server.py
Для тестирования используется pytest, тестами покрыты фрагменты кода сложные в отладке: text_tools.py, адаптеры и функция обработки url, полученного от клиента. Команды для запуска тестов:
python -m pytest adapters/inosmi_ru.py
python -m pytest text_tools.py
python -m pytest main.py
Код написан в учебных целях. Это урок из курса по веб-разработке — Девман.
Этот проект распространяется под лицензией MIT.