Я сделал 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 сессия клиента.
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;
Спасибо что дочитали до конца. Как считаете, полезный проект я запилил? Покликать можно тут:
Технически сделано круто!
P.S не удержался
Все так)) Видимо какой-то закон природы, так всегда(
Сообщение удалено
Технически красиво. Практически проект вызывает отторжение, потому что одно дело обсуждение в чате, другое дело эти же сообщения, но нагло распарщеные и выставленные на всеобщее обозрение. Не хотелось бы например мне увидеть свою переписку за пределами чата.
Согласен, но @username пользователей на сайте нет (специально не стал добавлять). Но "имя" и "фамилия" и аватарка есть.
Думаю имеет смысл сделать бота через которого можно скрыть имя-фамилия-аватар с сайта. Но удалять сообщения пользователя по запросу наверное не оч корректно, ведь другие не смогут найти твой ответ на вопрос например "как сделать N". А так ответ твой увидят, но он будет от имени анонима
Так все публичные чаты и так выставлены не всеобщее обозрение
Комментарий недоступен
Комментарий удален модератором
Классная работа!
Аххаха матерные слова тоже спарсил не до разработчик!
Подскажи плиз, какое разрешение экрана? На самом деле внимательно чекал адаптивность на большинстве популярных разрешений, мб что-то упустил
Комментарий недоступен
Автору секс не нужен, он использует Go и MongoDB.
Главный плюс Stackoverlow это голосование за рабочие ответы. У многих вопросов есть 5-10 ответов, причем сразу ясно какие не работают.
Ну скорее нормально форматирование и другой временной лаг. Если в чате предполагается ответ через 1-5-10 минут, то на SO можно хоть сутки сидеть и разложить по полочкам вообще все аспекты. И на SO чаще всего более формализованные вопросы. Человек уже пришел с формулированной проблемой, он знает приблизительно что делать. В чатике большая часть вопросов вида "а что у меня тут это говно не работает". Трейсы из strace или bt из gdb в чате будут выглядеть странно. Их надо будет оставлять где-то на пастебине. В общем это решение несуществующей проблемы. История чатов никому не нужна. Если бы она была нужно, то вопрос бы задали на SO.
В бэклог добавил) Голосование скоро будет. Но конечно релевантно заполнено оно будет только когда посещаемость будет приличной, тут согласен
Лол, комментаторы в экстазе от дорвея. Ебануться.
Дорвей это вообще другое, вы чего )
Вы придумали отличный способ наполнения дорвея на IT-тематику - поздравляю.
Рекомендую не останавливаться на этом и пилить сетку, монетизируя агрессивной контекстной рекламой. ;)
Добавить бы навигацию по тегам, темам, языкам и тп.
И наверное будет удобно сделать двухстороннюю связь, через бота, который будет добавлятсья в сообщества. И например с его помощью помечать ответы, голосовать за ответы, может еще что-то. Или вообще сделать перекрестный поиск по чатам когда юзер вопрос задает. Тогда и качество вырастет и обратная польза людям в чате будет.
Да, сейчас получается единственный тэг — чат в котором вопросы +- схожей тематики. Чатов не так много, идея хорошая, логичное развитие сервиса, я вручную 250 чатов протегирую фронтенд/бжкенд/девопс/ЯП и так далее. Тогда получится красиво — на теге вопросы одной тематики, но из разных чатов )
Про бота идея крутая. Нужно попробовать. Вопрос в том чтобы договориться с админами, думаю не всем понравится что данные из их чата кто-то монетизирует
Кто ж на русском гуглит инфу по программированию?
Не вижу логики зачем нужен ваш сайт. Зашел в тг посмотрел вышел нафига тут вы не понятно.
Тг не индексируется. А тут пишешь вопрос в гугл или яндекс — попадаешь на сайт на конкретное обсуждение
Хорошая задумка, красивое исполнение
Есть дальнейшие планы по развитию сервиса? Хотелось бы видеть какой-то рейтинг на сайте и возможность добавлять вопросы в избранное
Спасибо большое) Кроме планов из статьи эти идеи мне тоже нравятся, добавлю в бэклог )
Рейтинг имеешь в виду глобальный? "Юзер А ответил на 1000 вопросов, он самый активный в таких-то чатах"
На уровне чата рейтинг юзеров уже есть, правда без пагинации
Идея на самом деле крутая, можно не ограничиваться только темой разработки, но и расширять на другие темы, и даже другие языки.
Конечно такое продвигать можно только через поисковики, поэтому надо сделать так, чтобы выполнялись рекомендации поисковых систем, сейчас даже банального h1 заголовка нет на странице вопроса
Спасибо)
Переводы пока обдумываю, все-таки ни один онлайн-переводчик не сравнится по качеству с нейтив вопросом. Как бы не потерять так общее качество сайта
По h1 делал некоторые тесты. Попробовал либу на Go которая делает из текста вопроса "summary" (для вывода в h1), качество результата меня не устроило. А обрезать первые N символов для h1 вариант не очень. Без нейронки видимо не обойтись, пока отложил
НАКОНЕЦ-ТО! Молодец, круто, просто отлично, хоть кто-то додумался сделать из сраных мессенджеров форум обратно!
только это не форум. форум таки подразумевает интерактив.
Моё почтение, практичное решение)
Еще бы изображения в рамках сайта отображать, а не скачивать)
Тут согласен. Упростил для mvp, скоро будет превьюшкой как на норм сайтах )
Больше всего в твоём посте меня удивляет это:
После недолгой переписки, аккаунт разблокировали.Это просто невероятно. Поддержка телеграма действительно существует?
Да, и реагирует довольно быстро, в течении суток. Я писал на [email protected] — это по вопросам блокировок и тд (емейл по кнопке "Помощь" когда залогиниться не можешь)
ага, потом или засудят или разденут через тарифы)
как исключить свой чат из вашей базы?
Найти акк, который состоит во всех чатах и забанить его у себя.
Довольно не сложно делается.
Можно еще с пересечением, что этот акк ничего не постит.
Никак ((
Маил ответы) полезно, т.к. много вопросов получившие ответы могут возникнуть у других, которые никогда в тот чат не зайдут, ещё перевести это на разные языки и Вики в этой сфере готова)
Не читал все коменты, но было бы прикольно ещё получить ссылку на сообщение в ТГ. Так можно прийти спросить автора что-то, ну и в более нативном формате почитать ответы
Идея прикольная, возьму на вооружение. Такого пока никто не предлагал))
То что вы сделали раньше называли спамом. Дорвей чистой воды. Но может что-то изменилось и теперь это "сервис"
Там же куб, значит микросервис
Комментарий удален модератором
Комментарий недоступен
Весь сайт — имеешь в виду всю телегу? Я не стал так делать, потому что получится помойка с данными, такое не оч интересно. Решил категоризировать как база знаний вопрос-ответ. В этом похоже на StackOverflow / Q&A habr
Если имеешь в виду весь сайт StackOverflow — я его и не паршу, источник данных это чаты телеграм. Сайты-парсеры-переводчики StackOverflow знаю что есть, много таких )
1. Это проблемы русских разрабочиков что не знают Английский язык и не могу вести тот же запрос в StackOverflow.
2. А то что ТГ не индексируется это уже проблемы создателя данного продукта!
Не всегда на StackOverflow 100% твой кейс. Да, почти всегда, но не всегда. В телеге обсуждают разное, и это уникальный контент, который может быть более релевантен твоему вопросу чем StackOverflow
Stackoverflow и рядом не валялся. Будущее за.
- Ваще это как ?
- Для того, чтобы событие всплыло вверх по иерархии необходимо в конструкторе ... установить флажок ...
Вау! Хорошая идея.
У меня есть сайт wbforum .ru как на него вывести ленту сообщений из чата?
https://core.telegram.org/widgets/discussion
Спасибо) Интересный у вас сайт, его дизайн что-то напоминает)
Вывести никак не получится, виджета нет. Только парсить мой сайт если
Сколько стоит S3 и вообще сколько времени ушло и какие были затраты? Спасибо за интересный проект и статью
Спасибо)) Я базируюсь в DigitalOcean. Там S3 называется Spaces и стоит 5$ в месяц за 250gb хранилища, пока хватает, занял только треть разными проектами (но там и больше может быть, просто мин. прайс 5/250)
За все 85$ в месяц примерно:
Мастера кубера (managed кубер облака, бесплатно);
1 воркер кубера (4 vCPU, 8 RAM);
1 MongoDB вне кубера (2 vCPU, 2 RAM);
1 NATS вне кубера (1 vCPU, 1 RAM) - можно было меньше, но это минимальный тариф сервачка;
Балансер в облаке;
S3;
Но проект из статьи кушает очень мало. Помимо него в Кубере у меня много всего, другие проекты, опенсорс.
По времени я работаю фултайм, поэтому свои проекты делаю по вечерам и выходным. Примерно 3 недели от идеи до релиза
Денис, труд вы сделали. И польза с него может быть.
Но с авторскими вы ай.
Не ваше.
Нельзя.
Без письменного разрешения нельзя.
Идите к ребятам за стол и договаривайтесь корректно.
А покамесь сделайте вход на сайт платным. Или закройте его на х время.
Российская душа любит только п..... чужие идеи!
В основном, на такие сервисы основной источник трафика: из поисковых систем. Вопрос, насколько текущая структура будет эффективной для SEO-оптимизации.
I am loving it
Полезный проект, для того чтобы баннер повесить)
Автору большой респект. Советую не читать идиотские комментарии. Ещё ни разу не видел, чтобы здесь человека реально хвалили за хорошо проделанную работу в комментариях. Везде одно завистники и "критики".
У, например, меня была идея сделать для себя парсер выбранных каналов (по сути feed), но тоже столкнулся с проблемой блокировки.
P.S. Присоединяюсь со своим скриншотом к локальному флешмобу :)
А если не секрет, какие критерии использовали для определения, что сообщение является вопросом/ответом?
Вопрос - наличие знака вопроса в сообщении. Ответы - через API телеграма, там возвращается информация о треде (как в приложении)
Какие расходы по хостингу? Учитывая балансеры и кибернетексы
там Го используется, да и нагрузка маленькая сейчас, думаю расходы сейчас символические.
За все 85$ в месяц примерно:
Мастера кубера (managed кубер облака, бесплатно);
1 воркер кубера (4 vCPU, 8 RAM);
1 MongoDB вне кубера (2 vCPU, 2 RAM);
1 NATS вне кубера (1 vCPU, 1 RAM) - можно было меньше, но это минимальный тариф сервачка;
Балансер в облаке;
Но проект из статьи кушает очень мало. Помимо него в Кубере у меня много всего, другие проекты, опенсорс. Основную нагрузку на сервер дает https://leaq.ru — опять парсинг)))
Интересный проект, и действительно полезный!
Да, как и указано в статье, надо причёсывать на наличие дичи и накатить какой-нибудь предиктор к чему относятся хвосты без явного reply. Или не догадываться, а прикладывать некоторое количество сообщений, что было до него. Иначе артефакты как на скрине, пусть и не являются дичью, но и смысла никакого не несут.
В принципе цепочка, на мой взгляд, была бы интересным функционалом, т.е. выводить вопрос-ответ, но при желании можно посмотреть 20 сообщений до / после.
Так же с точки зрения продукта, в начале статьи дана интересная мысль "Было бы здорово получить дайджест популярных обсуждений за день", но реализации нет. Есть статы по самым активным, но можно было бы сделать статистику по ключевым словам.
На главной странице все обсуждения отсортированы по дням + кол-во ответов по убыванию. То есть заходя каждый день, в топе видишь самое популярное за сегодня
Кстати подумал можно сделать возможность подписаться типа на рассылку, и получать дайджест 5-10 обсуждений самых популярных за неделю (как на VC)
Главная часть StackOverflow - это поисковик Google. Ведь на интересующий ответ в 99% случаев вы попадаете из гугла. Поэтому оптимизируйте данные сайта именно под работу поисковика и NLP-запросы.
Не очень понял на счёт проблем с API. Разве вы не можете модифицировать десктопный клиент Telegram и парсить данные прямо из него?
Молодец, @Denis Averyanov !
Спасибо)) Оф приложения Телеграма тоже работают по API, лимиты стоят у них на бэкенде и одному пользователю просто не дадут отправлять 100 запросов в секунду. Даже если представить что я использую оф приложение и каким то кликером буду очень быстро листать чат вверх, например, быстрее определенного порога это сделать не удастся
Комментарий недоступен
Была мысль если на какое-то сообщение в рамках треда есть ответ содержащий "спасибо" от автора треда — помечать данный ответ галочкой и выводить сверху. Нужно подумать в эту сторону
Читать треды стало проще. Только что добавил "ответы на ответы", как в телеге. Для новых тредов оно теперь парсится https://telq.org/question/6158a5bd535ed8596d55b468
Комментарий недоступен
Теги однозначно да. По поводу лучшее — сейчас на главной по умолчанию сортировка "по дням + кол-во ответов по убыванию". Получается свежее+обсуждаемое
Не могу найти сообщества\группу по firebase и GCP, как будто наши не юзают эти сервисы ( может кто подскажет тусовку по теме ?
GCP https://telq.org/community/61018fde535ed8596d2a171b
Firebase на сайте нет пока, скоро появится. В телеге уже нашел несколько, самый живой https://t.me/firebase_ru
Очень круто! Планируете ли проект open source-ом делать? Был бы только рад парочку PR подкинуть :)
Спасибо) пока не планирую, но может мнение изменится)
Писал и не раз — в ответ тишина.
А что писали? Почему аккаунт был забанен. Может быть причина в этом?
Комментарий недоступен
Красава!! Я заметил это еще когда скринил превью, ты первый кто подметил))
Комментарий недоступен
Большое спасибо, Валерий)) Ага, можно в личку скинуть)
Нравица ))
Хочу такое же, только на узбекском. Что делать? Чувствую фомо уже в протяжении часа(
задедосим:
кек?
пук?
пак?
чек?
тек?
сек?
пек?
мек?
Не приляжет. Поиск по индексу по любому запросу за одинаковое время. $regexp было бы тяжело, да
даже если это рекламный ход - все равно полезно, хотя проект стоит еще доработать. Круто, что такое делают ребята
Комментарий недоступен
Спасибо Дима)) Рад что полезно)
Комментарий недоступен
Восхищаюсь твоей каждой идеей)
Спасибо ))
Всё, что вы хотели знать о Julia. :D
(На самом деле баг в отображении статистики на сайте)
Комментарий удален модератором
Думаете сделать аналог для англоязычной аудитории?
Неплохая задумка, понравилось минималистичное оформление, как в ботах.
А сколько еще Q&A можно вытащит из технологических slack и discord чатов. В добавок еще и reddit попарсить, ух
Надо было с другой стороны зайти – сразу сделать платным сервис по поиску запросов на услуги в чатах. Такие лиды под подписке.
Идея хорошая. Доработать надо. Много флуда, матов, бесполезной информации.
отличная идея, качественная реализация! буду использовать 💪
Вау, поюзал как пользователь, все работает быстро и сам интерфейс интуитивно понятный! Идея топ! Надеюсь проект будет развиваться и там регулярно будут появляться те вопросы, которых нету в других сервисах!
А можно сделать так, чтобы я сам выбрал группу, и он ее так просканировал?
Можете отправить группу мне, если она +- связана с IT, я добавлю на сервис
Вообще идея чатов как раз в том что ты можешь в режиме риалтайма получить ответ наьсаойн вопрос с уточнениями. А так.то стековерфлоу есть уже
больше интересуют исходники этого проекта
Исходники закрыты пока)) Может быть позже заопенсорсю, не знаю)
Почему-то всопмнился ранний TJournal. Если найти людей, то можно из платиновых тредов собирать статьи.
Ещё следующим шагом можно сделать бота и договариваться с организаторами чатиков о его добавлении. Ешё идея — собирать рейтинг обсуждений, типа после вопроса пошло бурное обсуждение — значит вопрос интересный.
Проект классный!
Меня больше всего интересует как продукт сама система сбора: она может быть как раз полезна многим корпоративным командам, сообществам или организаторам онлайн курсов, чтобы собирать базу знаний из обсуждений с минимальным ручным трудом.
К примеру, в сообществе на 1000+ человек, даже с практикой писать исключительно по делу, за неделю накапливается с десяток ценных тредов, которые не очень удобно искать внутри чата.
На работе в слэке, если действует ограничение в 10к сообщений, потом не найдёшь уже концов. А тут можно собрать в кучку.
Крутой сайт, но неплохо было и infinite scroll сделать))
Каталог it чатов https://t.me/it_chats
Скрипт парсит даже случайные диалоги, не несущие смысловой нагрузки. Надо определить процент такого контента. Я случайно ткнул в первое что попалось, а там много "грязных" данных. Надо в будущем что-то типа AI прикрутить для анализа полезности поста.
Хз, выглядит как помойка :(
Единственная надежда на случайных посетителей с гугла, которые не нашли ответ на стаке (что вряд ли)
В случае ненайденного ответа на вопрос на stackoverflow - его там надо задавать. Если задан правильно - за это не бьют, и скорее всего даже ответят. И польза будет всем. И тем кто задаст этот вопрос в следующий раз, и тем кто с ответов репутацию получит.
Комментарий удален модератором
Комментарий удален модератором
Ссылка не работает
Комментарий удален модератором
Комментарий удален модератором
Комментарий удален модератором
Посмотрел сайт lead.ru, там по запросам много ссылок на несуществующие сайты и организации, это вообще как-то проверяется? В целом интересно, но непонятно чем отличается от простого запроса в поисковик?
Точка входа сбора информации - сайт компании. Значит раньше он работал, а сейчас его выключили
Комментарий удален модератором
Комментарий удален модератором
А разве правами на контент не владеет телеграм? Это как спарсить ФБ и на полученный MFA лить траф
.
Хочу купити старий аккаунт на stackoverflow, за нормальну ціну, якщо у когось є варіанти пішіть домовимось