Производственная практика, весенний семестр 2019 г.
Необходимо разработать систему парсинга, трансформации и публикации контента. На данном этапе можно считать, что весь контект представляет собой ленты: лента изображений пользователя в Instagram, лента постов пользователя Вконтакте, лента новостей сайта в формате RSS etc. Ленты состоят из однотипных элементов (постов), содержащих текст, изображения и/или видео. Также у каждого элемента есть дата создания, автор и уникальный URL.
Допустим, имеютя два пользователя Instagram. Мы хотим ретранслировать их посты в твиттер. Для этого нам требуется модуль-парсер ленты Instagram, модуль, преобразующий текст в формат "140 символов + ссылка на полный текст", и модуль, постящий в твиттер используя его API. Также, требуется некоторая управляющая программа, связывающая между собой все описанные модули.
В целом, архитектура системы состоит из
- классов, отвечающих за источники (imports.*)
- классов, отвечающих за экспорт данных (exports.*). Также отвечают за трансформацию контента к виду, требуемому конкретным сервисов.
- классов, хранящих данные и отвечающих за восстановление состояния между запусками программы (storage.*)
- управляющей программы, перебрасывающей данные между тремя пунктами выше (main.py).
Требуемые источники данных (порядок примерно соответствует приоритетности задачи):
- Youtube
- Вконтакте
- Форумы vBulletin (отслеживание новых постов в определенной теме)
В соцсетях требется функционал двух типов: как отслеживание постов определенного пользователя (как будто мы на него подписались в нашем приложении), так и отслеживание постов всех друзей определенного пользователя (настроив на себя, мы получим дубль нашей ленты, над которым сможет выполнять действия).
Требуемые сервисы для экспорта:
- Telegram-канал
- Вконтакте
- RSS-лента (запись N последних записей в статичный файл)
- Динамическая HTML-страница (эталон - страница подписок на Youtube, потребуется встроить в управляющую программу веб-сервер).
Примитивный набор классов, позволяющих импорт-экспорт, реализован в репозитории. Импорт представляет собой генерацию случайного текста, сопровождаемого случайной картинкой. Экспорт генерирует HTML-страницы максимально тупым способом. Хранилище не выполняет никаких действий и является заглушкой.