Как я делал поисковик для Telegram

    Давным давно в далекой-далекой галактике, когда деревья были большими, а интернет маленьким, никакого засилья поисковых систем не существовало. Они только начали появляться и были достаточно простыми и «тупыми». А значительное развитие получили каталоги, где по темам было разложено какие сайты в этом вашем интернете есть. Зашел в раздел, нашел сайт, наслаждайся.

    image

    А потом появились AltaVista, Google, Yahoo, Яндекс, Апорт, Rambler и другие. И вот сейчас, вся эта ситуация повторяется с Телеграмом, как мне кажется. Каталоги есть, а поиска почти нет.
    Безусловно, в самом Телеграме поиск есть, но работает он только с теми группами, каналами и переписками, которые вы уже к себе добавили. Глобального поиска по группам и каналам нет.
    А раз его нет, то почему бы его не сделать, подумал я? Как раз у меня давно уже чесались руки попробовать Elasticsearch, а тут и повод подвернулся.

    Идея проста — «присесть» на мощности Телеграма, а не делать свою ферму по парсингу каналов и групп. Для этого мы делаем бота, который просто читает все сообщения в группе и складывает в индекс в Elasticsearch. Ну и потом уже в веб-интерфейсе или через бота мы можем осуществлять поиск по всем группам и каналам, где такой бот стоит.

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

    Хорошо, хоть с группами таких проблем не было!

    Бота сделать труда не составило, с elasticsearch разобрался тоже быстро, на все ушло несколько дней. Вот только с морфологическим русским поиском в последней версии Elasticsearch были некоторые проблемы. Пришлось курить мануалы на тему подключения русских hunspell словарей. Индекс получился довольно простым. Учитывается сам текст сообщения, имя канала/группы, ее номер, id сообщения и пользователя. Ну и отдельно сделал индекс, куда складываются запросы к боту, для статистики.

    Хотел было рассказать про техническую составляющую работы, но понял, что про написание ботов писали уже с десяток раз, про сам elasticsearch тоже есть немало статей, а у меня нет никаких особенностей использования — просто полнотекстовый поиск. Как из php работать с elasticsearch вроде тоже все просто — поставил из composer и вперед.

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

    Но я надеюсь, что телеграм-воротилы будут добавлять бота в свои группы и его база значительно увеличиться. Вот бот @TelegaIndexBot, вот веб-интерфейс tgindex.ru — welcome!

    Ну и, естественно, приветствуется критика и прочие пожелания.

    p.s. сделал группу для «поиграться». t.me/telegaindex — если в нее добавить текст, он проиндексируется ботом. можно какие-то эксперименты провести.

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 18

      +1
      и после этого убрать у бота все права кроме «Изменение профиля канала»

      Зачем? Лучше оставить все права администратора :D

      Бот будет просматривать все значимые сообщения и добавлять их в свой индекс.

      А как реализовано понятие «значимые»? Алгоритм какой? ;)
        0
        пока что все фразы короче 7 символов отсекаются. но нужно будет настраивать фильтры, когда будет какая-то значимая статистика.
        ну и вообще, в поиске я пока профан, надо признать, никак не «настоящий сварщик» :)
        0
        интернет схлопнулся в телегу)
          0
          Ну не всё ж ему прикидываться VK&OK.
            +8
            Вообще это печально. Не понимаю людей, которые ведут большие блоги и пишут «лонгриды» в телеге. Если взять какой-нибудь условный ЖЖ, то там и сейчас можно найти пост пятнадцатилетней давности, а худшее, что может с ним случиться — это битые ссылки. Блог в телеге — это Twitter, лента новостей, только ещё более замкнутая в своей экосистеме. Невозможно найти, нормально поделиться картинкой или ссылкой — всё только внутри мессенджера. Какая-то часть контента торчит наружу через t.me (но почему, например, у t.me/s/habr_com посты видно, а у t.me/s/EOS_RU нет?), где-то ссылки на telegra.ph, комментарии через какой-то comments.bot, всё это чёрт знает как перелинковано друг с другом через tg://resolve, t.me, tele.click, tlgg.ru и иже с ними (спасибо РКН). Я не хочу такой новый интернет.
              0
              Не понимаю людей, которые ведут большие блоги и пишут «лонгриды» в телеге

              Удобно. ЦА под боком опять же.

              Если взять какой-нибудь условный ЖЖ, то там и сейчас можно найти пост пятнадцатилетней давности

              А зачем он нужен? Ну вот так навскидку.

              Если вы ведете телеграм-канал и осознаете, что вам нужна и аудитория, у которой нет мессенджера — берете бандлер, вешаете на сайт с https — всё, вы восхитительны. Ваш сайт дублирует t.me/сабж/s на независимом адресе.

              Я не хочу такой новый интернет.

              А вас никто не спросит. Рыночек порешал ©.
                0
                А зачем он нужен? Ну вот так навскидку.

                Бывает информация, которая ценна, будучи свежей, а бывает наоборот — которая со временем обретает ценность. Например, посты про разного рода сталкинг, строительство метро, мостов или других инженерных проектов, развитие инфраструктуры городов. Спустя какое-то время такие места либо перестают существовать, либо меняются до неузнаваемости, но интернет всё помнит. Цифровая археология, в общем :)

                Ваш сайт дублирует t.me/сабж/s на независимом адресе.

                Этого недостаточно. Тщательно проставленные теги/навигация/поиск/индексация в гугле — всё это не появятся волшебным образом. Скорее имеет смысл обратный подход — публиковаться в «большом блоге», а кросспостить в мессенджеры/твиттер/инсту, этакая замена RSS. Наверняка существуют технические решения, боты, но это требует некоторых навыков, а главное времени и желания, которые есть не у всех, тем более когда вот она, большая и активная аудитория телеги, прямо здесь.
                  0
                  Я вижу в будущем некоторую площадку для работы авторов телеграм-каналов. Им нужен крос-линкинг, им нужен пиар и т.п. Наверно буду на них ориентироваться.
                  А вообще началось все с изучения технологии. Я не ставил амбициозных целей.

                  Мне кажется, что решений для кросс-постинга сейчас вагон и маленькая тележка. Да и не потяну наверно — мороки там много, а будет ли выхлоп непонятно. Плюс конкуренция.
            0
            Тоже как-то искал нормальный поисковик по телеграму. Нашел вот этот tgstat.ru/search
            Правда не знаю как он работает: всё подряд индексирует или тоже вручную добавляться надо.
              0

              Воспользуйтесь наработками спамером и прикидывайтесь обычным аккаунтом для того, чтобы индексировать чаты

                +1
                Пользовался телеграмом 1-2 раза в жизни. Там обязательно подключать к каналам именно бота надо? Разве нет возможности подключиться и читать канал как среднестатистический пользователь без использования API для ботов?
                • НЛО прилетело и опубликовало эту надпись здесь
                    0

                    Выходит не получился глобальный поиск по телеграмму...

                      0
                      получится. ковыряю MadelineProto. как разберусь с ним — напишу отдельно, что получилось.
                        0
                        и как он поможет?
                          0
                          придется подписываться на канал пользователем и получать сообщения через него.
                      +1
                      О, этот домен раньше принадлежал мне. Тоже была такая идея, и даже реализация. Но из-за нехватки времени и других причин — решил отказаться, домен держать «на всякий» не стал.

                      Captain, Действительно, MadelineProto тут то что нужно, а API для ботов никак не подходит. Будь готов к проблеме со смайликами)). Вообще конечно библиотека не шик удобства, но вроде для PHP ничего другого нет, не свою же реализацию MTProto пилить.
                        0
                        Да, там вполне все терпимо. Посмотрим что получится, посмотрим на обратную связь. Пока это все особо есть не просит — пусть живет. А дальше видно будет.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                      Самое читаемое