{"id":14279,"url":"\/distributions\/14279\/click?bit=1&hash=4408d97a995353c62a7353088166cda4ded361bf29df096e086ea0bbb9c1b2fc","title":"\u0427\u0442\u043e \u0432\u044b\u0431\u0435\u0440\u0435\u0442\u0435: \u0432\u044b\u0435\u0445\u0430\u0442\u044c \u043f\u043e\u0437\u0436\u0435 \u0438\u043b\u0438 \u0437\u0430\u0435\u0445\u0430\u0442\u044c \u0440\u0430\u043d\u044c\u0448\u0435?","buttonText":"","imageUuid":""}

Я сделал StackOverflow из IT-чатов Telegram

Столько данных лежат и ждут, чтобы их спарсили. Не удержался

Всем привет. Я бэкенд разработчик, и по роду деятельности активно использую разные чаты в Телеге – по Go, Кубернетес, базам данных. Задаю свои вопросы, иногда отвечаю на чужие.

В какой-то момент этих чатов стало так много, что личные сообщения искать было совсем трудно.

Как и многих бумеров, меня тоже FoMO не обходит стороной. Продуктивность падает, хочется читать чатики, участвовать в холиварах (кто не в курсе, в айтишных чатах баталии многочисленные, например в чате по Куберу 6к юзеров. Во фронтовых чатах по JS или фреймворкам еще больше). Каждый день обсуждают что-то действительно интересное.

АааААааАААаАААААА

Было бы здорово получить дайджест популярных обсуждений за день — какое-то время вынашивал эту идею, но по итогу трансформировал в форму базы знаний в формате вопрос-ответ (начальная идея перекочевала в виде дефолтной сортировки вопросов по дням+популярности).

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

Первые проблемы

Очевидно что для реализации такого сайта потребуется как-то кодом читать сообщения из телеги. У телеграма есть API для ботов (не подходит, боты не могут самостоятельно вступать в чаты), а также клиентский API который предоставляет все возможности пользователя Telegram — TDLib или кастомные реализации MTProto. Это называется юзер-бот, к слову спам в телеге рассылают именно так.

Я люблю Go, хорошие люди посоветовали этот Telegram клиент. Окей, почитав доку библиотеки, за пару часов сделал прототип который выводит новые сообщения из чатов в лог.

«Ураа, видно несколько новых сообщений из телеграма в консоли! Думаю дальше дело пойдет быстрее»

Но я рано обрадовался. Через несколько секунд вижу вывод ошибок. Пытаюсь проверить аккаунт через мобильное приложение, меня тут же разлогинивает. Ввожу номер, и вижу что мой аккаунт заблокирован.

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

Однако через несколько дней возникла другая проблема: после пары минут работы Телеграм разлогинивал всех сессии аккаунта. Решилось так же через письмо в поддержку, в котором описал что использую API как и планировал и в readonly режиме. Сейчас работает стабильно.

Архитектура проекта

Отдельный Телеграм аккаунт

Вступил в ~250 чатов нужных тематик руками через мобильное приложение.

Scanner сервис

Сервис на Go, который держит коннект с телегой, получает новые сообщения которые приходят в аккаунт, фильтрует только те что содержат «?» — значит это вопрос и нам это интересно. Далее сервис обогащает данные объектом юзера, доп. информацией по чату через Telegram API, сохраняет аватарки пользователя и чата в S3, и отправляет сообщение с метаданными в очередь NATS JetStream.

Также сервис листает вверх чаты по очереди, чтобы скачать исторические данные. Состояние синхронизации старых сообщений сохраняет в MongoDB, чтобы не ходить по кругу при перезапуске сервиса.

Telegram API имеет жесткие лимиты, поэтому приходится держать очень слабый поток запросов. Сейчас на сайте синхронизировано 100к вопросов за 1 месяц работы сканнера, но обработана совсем малая часть исторических данных. Когда будет обработано все — вопросов будет около 1.5млн.

Stateless сервис, но всегда в единственном экземпляре так как в телеге открыта так же 1 сессия клиента.

Scanner сканирует)

Backend сервис

Сервис на Go, который читает очередь с сообщениями и сохраняет в MongoDB. Также выполняет роль фронтенда с помощью Go template (шаблонизация).

Я не стал использовать фронтенд фреймворки, хотя Vue мне нравится. Главная причина — очень ресурсоемкий SSR (чтобы страничка генерировалась на сервере, и роботы поисковых систем без проблем ее проиндексировали). Go шаблоны очень быстрые и легковесные, плюс как любая шаблонизация они не требуют JS на клиенте. UI библиотеку взял Bootstrap — да, многим надоел он уже, но мне нравится + позволяет быстро сделать приличный интерфейс.

Stateless сервис, масштабируется без проблем (но пока нагрузки нет, и это не требуется).

Архитектура проекта

Качество данных

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

Конечно, встречаются приколы и странные вопросы:

Или случаи когда кто-то один ответил вне треда, и кто-то ответил уже ему — получили новый тред, который по факту «хвост» другого обсуждения:

Монетизация

Сейчас проект не монетизируется никак. Когда посещаемость будет хотя-бы 10к визитов в день, имеет смысл поставить рекламный баннер. Но сейчас посещалка около нуля. Судя из панели вебмастера Яндекс и Google пока проиндексировано очень мало страниц сайта, возможно причина в этом.

Если проект вырастет до 50-100к посещалки в день имеет смысл добавить платное размещение вакансий (один из векторов монетизации StackOverflow, да и VC тоже).

UPD 21.09.21 19:06: Проект поддержало агентство idaproject за что им большое спасибо, я разместил баннер с вакансиями.

Планы по развитию

  • Сборка и выгрузка карты сайта раз в неделю, для поисковых систем;
  • Добавить больше статистических данных. Например, самые активные юзеры среди всех чатов;
  • Улучшить поисковое окно. Сейчас поиск идет только по вопросом, думаю имеет смысл добавить и ответы и имена пользователей, названия чатов;
  • Полировка UI: кнопки шаринга, статические ссылки на конкретный ответ, придумать какой полезный блок поставить в правой колонке — сейчас там пустовато;
  • Микроразметка;
  • Для мгновенной загрузки с мобилок возможно имеет смысл добавить Google AMP, Яндекс Turbo;
  • API. Чтобы те кто захотел спарсить мой сайт для своих нужд, не страдали разбирая HTML;

Спасибо что дочитали до конца. Как считаете, полезный проект я запилил? Покликать можно тут:

0
256 комментариев
Написать комментарий...
Andrew Krew

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

Ответить
Развернуть ветку
Denis
Автор

Согласен, но @username пользователей на сайте нет (специально не стал добавлять). Но "имя" и "фамилия" и аватарка есть.

Думаю имеет смысл сделать бота через которого можно скрыть имя-фамилия-аватар с сайта. Но удалять сообщения пользователя по запросу наверное не оч корректно, ведь другие не смогут найти твой ответ на вопрос например "как сделать N". А так ответ твой увидят, но он будет от имени анонима

Ответить
Развернуть ветку
Masha Kovalyova

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

Ответить
Развернуть ветку
Vezel

Вот, кстати,  интересный вопрос. А имущественные права на сообщения в публичном чате принадлежат Телеграмму, владельцу чата или автору сообщения? Если первое - то с телеграммом можно договориться (да просто продать этот стратап за вменяемые суммы). Если второе, то тут сложнее - знаю несколько "владельцев" комьюнити, которые глотку порвут за такое отношение к их "собственности". А с третьим - вообще беда, так как реально можно срок схлопотать. 

Ответить
Развернуть ветку
Vladimir Vorobyev

Что насчёт просто использовать здравый смысл? Обезличенного ответа более чем достаточно, чтобы решить вопрос авторства. И потом, вы представляете себе структуру этого "авторства"? По сути, копипаста из книжек и из однотипных случаев в работе, актуализированная под конкретный запрос, где там авторство как таковое? Автор проекта спёр продуктовые идеи из чата топ-менеджмента Эпла?

Ответить
Развернуть ветку
Smart Diplomat

Так пусть автор проекта читает книжки, где написаны ответы на интересные ему вопросы. И публикует инфу из книг. А не из чатов. 
Ах да, там же авторство...
Как и в чатах. 

Вот такой вам пример, Владимир, если вы завтра пойдете парсить чаты  фанов музыки, где половина комментов содержит цитаты из песен, и начнёте их публиковать - право ИС будет нарушено. 
А вторая половина комментариев будет новой ИС в виде пародийной/альтернативной  импровизации по мотивам. 

Здравый смысл - уважать труд сделанный не тобой. 

Ответить
Развернуть ветку
Vladimir Vorobyev
Здравый смысл - уважать труд сделанный не тобой.

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

Так пусть автор проекта читает книжки, где написаны ответы на интересные ему вопросы.

Он её как раз наполняет, чтобы прочитать потом самое интересное) и ещё делится этим с сообществом. Выглядит как претензия, честное слово.

 >Вот такой вам пример, Владимир, если вы завтра пойдете парсить чаты фанов музыки, где половина комментов содержит цитаты из песен, и начнёте их публиковать - право ИС будет нарушено.

Оторвано от жизни, Смарт Дипломат (какое у вас настоящее имя, кстати?). Песнями работе не поможешь, а анализ ответов из чатов - может. Обсуждаем именно сбор комментариев из публичных чатов телеграма, а не сферическую музыку Линкин Парка и фанатов в чате с кусками lyrics.

Ответить
Развернуть ветку
Smart Diplomat

Сделать труд по комбинации полезных знаний = хорошо. Уважаю. 
Не спросить разрешения на использование чужого труда = подло. Рекомендую исправить ситуацию. 

Он не делится этим с другими. А продает. Через показы им рекламы на сайте. 

Нет, не оторвано от жизни. За написание и исполнение песен (прикиньте за буквы..) платят деньги. Как и айтишникам за написание кода, решающего проблему. (А какое у вас настоящее фото?) 

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

Автор парсинга не получал разрешений на обработку ПД и использования техноинфы из комментариев. 
Точка. 

Ответить
Развернуть ветку
Vladimir Vorobyev
Автор парсинга не получал разрешений на обработку ПД

какие там ПД? одни Дэвиды Копперфильды да Львы Толстые, примерно как с твоим ником пишут (не говорю, что это плохо, это просто не ПД).
Что такое теxноинфа, будьте добры определение в студию?

Нет, не оторвано от жизни. За написание и исполнение песен (прикиньте за буквы..) платят деньги.

За комментарии с техноинфой никогда деньги не платили, в этом и оторванность вашего примера. Вот просто на ровном месте взяли и появились защитники прав авторов комментариев в чатах ТГ. Может, ещё Российскую Ассоциацию организуете? Обяжете плашку вешать к каждому комментарию? Павел Дуров смеется с вас.

Не спросить разрешения на использование чужого труда = подло.

Так подло или незаконно? Позвольте уж программистам самим разобраться (я если что из этой сферы, а вы?).

Ответить
Развернуть ветку
Yury Y

Владимер, вы очень инфантильно всё воспринимаете, если что-то не удобно лично вам, значит так не может быть! Ну и это ж интернет, тут испокон веков всё воровалось! Для этого есть такая вещь как регистрация на форуме, можно почитать, но наверняка там как раз есть пунктик про тему обсуждения. Да и Телеграм как раз по этому ограничивает апи и тратит деньги на хостинг, он то имеет определённое право на то, что вы написали.
Вы может пропустили, но лет 10 назад Твиттер ввёл жёсткие правила копипасты твита на любой сайт, казалось бы 140 символов, вам что, жалко? но нет, должен быть только айфрейм твиттера. И без разницы что вам так не удобно, что он вам по дизайну не подходит, что вы можете в знак благодарности ссылку сделать на твит. И ограничение на количество запросов кстати там смехотворное было, что-то вроде 150 в час по айпи.

Ответить
Развернуть ветку

Комментарий удален модератором

Развернуть ветку
253 комментария
Раскрывать всегда