Программа для поиска единомышленников ВКонтакте [Open source]

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

    При этом механизма поиска новых друзей фактически нет, что довольно иронично в контексте социальной сети. С другой стороны, оно и понятно, если что-то не приносит дохода, значит развиваться, скорее всего, не будет. Для знакомств VK не так давно запустил приложение, но, насколько я понимаю, это фактически клон Tinder, и он совсем никаких данных из профилей не подтягивает, даже банального отношения к курению или алкоголю — от соцсети там только авторизация.

    Нам стало интересно, насколько реально исправить эту ситуацию с помощью VK API, и вот, что из этого вышло:

    Лента единомышленников на главном экране

    Как было?


    Итак, для начала стоит расписать исходное состояние. Единственная адекватная стратегия, которая приходит на ум — это найти сообщество, которое максимально близко тебе по мировоззренческим / эстетическим / хоббийным показателям, и открыть поиск по подписчикам. Ввести некоторые фильтры, например возраст, и дальше уже смотреть просто всех подряд.

    Но у этого варианта есть следующие минусы:

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

    К счастью, практически всё это решаемо, а учитывая 100 миллионов активных пользователей в месяц, шансы найти единомышленников появляются даже у интровертов с очень специфичными вкусами.



    Как стало?


    Мы решили попробовать сделать проект, основанный на анализе подписок, с удобным интерфейсом и средствами автоматизации. В полностью автоматическом режим алгоритм примерно такой:

    1. Пользователь логинится через VK
    2. Скачиваем список его подписок (меньше 1М)
    3. Оцениваем каждую из них в соответствии с положением в списке
    4. Скачиваем N подписчиков из каждой его группы (N зависит от того, сколько времени он указал)
    5. Находим в базе пользователей, подписанных на несколько групп, и рассчитываем их рейтинг
    6. Для людей с наибольшим рейтингом скачиваем их списки подписок, чтобы убедиться, что найденные группы находятся не на 2048 месте построить их топ интересов

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


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

    Про исходный код


    Мы решили открыть исходники, чтобы каждый (знающий С++, ага) мог экспериментировать даже с теми параметрами, которые не вынесены в настройки. Ну и никто не переживал, что его страницу уведут в рабство к ботоводам, а данные продадут в даркнете.

    Некоторые разработчики открывают код, чтобы похвастаться — смотрите как я могу. Это не тот случай. Проект развивался без четкого ТЗ, с постоянно меняющимися требованиями, и хорошей архитектуры тут как класса быть не может — даже самая гибкая, чаще всего, гнётся совсем не там, где предполагалось. После того, как проект примет финальный вид, и требования становятся понятны, обычно приходится делать очень масштабный рефакторинг, но в данном случае мы решили повременить с ним.

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

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

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

    Системные требования


    Монитор от 1366 х 768, рекомендуется FullHD. SSD тоже лишней не будет.

    Базы больше чем на 5 миллионов не тестировали, после 10 наверняка начнутся сильные тормоза. Перейти на более мощную СУБД можно довольно быстро (абстракции Qt позволяют), но пока это представляется нецелесообразным, потому как многомиллионные паблики мало что говорят о подписчиках, нишевые вещи не могут быть интересны настолько многим.

    Исходники тут. Бинарники под Windows и Linux.

    P.S. У меня есть мысли о том, как VK могла бы улучшить ситуацию на своей стороне, но это тема для отдельной статьи.

    P.P.S. У многих айтишных пабликов (в т.ч. Хабра) списки подписчиков закрыты, и учитывать их не получится.
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

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

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

      0

      Встроенный браузер на WebView2, WebKitX или на чем?

      +5
      найти сообщество, которое максимально близко тебе по мировоззренческим / эстетическим / хоббийным показателям

      … в котором последний пост от живого человека был лет пять назад — в таком состоянии сейчас пребывает большинство ВК сообществ по интересам.

      шансы найти единомышленников появляются даже у интровертов с очень специфичными вкусами

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

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

        сейчас больше шанс или сходу попасть в игнор, или, при нажатии добавить в друзья либо — остаться в подписчиках (скорее всего), либо (если повезёт) получить резонный вопрос — 'а ты кто' или 'знакомы'?
        Во-первых, вопрос действительно резонный, и при добавлении в друзья логично написать нечто вроде «Мне нравится множество постов у вас на странице, да и, судя по подпискам, увлечения у нас похожи — так что мне было бы интересно пообщаться с вами».

        А во-вторых, шансы игнора есть, но можно ведь и найти кого-нибудь.
          +2
          Мне нравится множество постов у вас на странице, да и, судя по подпискам, увлечения у нас похожи

          Незнакомый человек пришёл к вам на страницу, читает посты, проверяет подписки — следит за вами, подозрительно, лучше забанить от греха.

          И из собственного опыта: ко мне в друзья добавляется немало незнакомых людей (не ботов, со схожими интересами, с общими знакомыми, активность примерно трети добавляющихся наблюдаю в различных комьюнити). При этом из них пишут что-либо единицы, в основном остаются висеть годами, не написав ни единого слова.
            0
            И тем не менее, вы ведь их не баните, и если бы они захотели общаться, то вполне смогли бы.
              0
              Я никого не баню превентивно и добавляю всех подряд, т.к. у меня много публичных проектов, и аккаунты в соцсетях используются именно для организации обратной связи. Не самый типичный сценарий, как мне кажется.
        +2
        шансы найти единомышленников появляются даже у интровертов с очень специфичными вкусами

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


        Продолжаем хикковать на гитхабе.

          0
          Эмм, ну если вас не факт, что найдут, можете найти вы. Вступать необязательно, можно просто вручную добавить их в список и запустить поиск.
            +1
            Продолжаем хикковать на гитхабе.
            Этож почти полная соцсеть.
            +1
            Спасибо за софтину. Уже нашёл несколько людей из другого приложения, которых знаю но не добавлены ВК
              0
              > из другого приложения

              Какого, если не секрет?
                +1
                Strava. В моём случае нашло знакомых велосипедистов.
              +1
              Было бы круто, не показывай он уже добавленных друзей. Например, в автоматическом режиме при 30 — всех людей из списка я знаю, большинство — у меня уже в друзьях. Если программа для поиска единомышленников и новых друзей, то немного не понимаю смысла показывать тех, кто у тебя уже в друзьях.
                0
                На самом деле мы сомневались, стоит включать это или нет. Решили включить всё-таки, на случай если у человека в друзьях много людей, а он и не знал, что с некоторыми у него много общих интересов, потому что общался с ними только в одной какой-то области.

                Там в исходниках, надо всего одну строчку (src/managers/cf.usermanager.cpp:591) раскомментировать и пересобрать, тогда при первом запуске скачает список друзей и будет их исключать из выдачи в дальнейшем.
                  0

                  Может галочку в настройках сделать вместо пересбора бинарей?)

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

                  Залейте, пожалуйста, бинарник для macOS

                    0
                    Собрать бинарник-то не проблема, проблема с тем, что надо отдать $100 баксов за возможность подписать, а потом ещё пару дней танцевать с бубном. Иначе ни у кого запускаться не будет. Так что увы, сами собирать не будем, если только кто-то из сообщества.
                    +2
                    Забавно, у меня уже более года открыт тикет в поддержку VK о том что у них отломан поиск по интересам (комбобоксы мировоззрений), а тут такой пост :)

                    И знаете, судя по переписке с поддержкой, неработающий поиск друзей по схожим интересам только одного меня из сотен миллионов юзеров беспокоит ;)
                      +1
                      Я тоже писал в поддержку, сказали может быть когда-нибудь. Но даже если починят, без мультивыбора он будет не особо полезен.
                      0
                      Мне кажется, была бы интересной опция по поиску людей совершенно на меня не похожих. Просто из-за любопытства.
                        +1
                        А что тут интересного — можно взять случайного человека, и он, скорее всего, будет на вас не похож. Только вот вам и поговорить не о чем будет.
                          0
                          Там меру определить сложнее будет.

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

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