Получаем список участников сообщества ВКонтакте определенного пола и возраста

Решили на днях поучаствовать в одном Хакатоне, который мы, конечно же, не выиграем. И одной из задач было создание датасета из социальной сети Вконтакте. Долго не думая, я сказал товарищам по команде, что беру эту часть на себя. Но оказалось все не так просто. Хочу поделиться с Вами какие проблемы встретились и как я их по ходу решал.

«Церебро»

Находит целевую аудиторию, выгружает базу ID пользователей. Впоследствии ее можно экспортировать и загрузить в рекламный кабинет «ВКонтакте» в качестве собственной группы ретаргетинга.«Церебро» умеет не только искать сообщества, в которых состоит нужная аудитория, но и собирать ID участников обсуждений, администраторов сообществ, друзей пользователя, а также по дням рождения.По моему опыту, при использовании «Церебро» стоимость клика снижается в 2−4 раза в зависимости от тематики. CTR возрастает за счет качественного отбора аудитории, которой можно показывать рекламу.

Списки друзей «ВКонтакте» в мобильной версии

На сайте m.vk.com, который адаптирован специально для мобильных браузеров, тоже можно перейти в раздел с «Друзьями», после чего следует нажать на кнопку «Все друзья». В выпадающем меню можно выбрать один из созданных непосредственно самим пользователем списков, после чего отобразятся те друзья, что относятся к этой категории. Стоит отметить, что здесь нельзя просматривать друзей из общедоступных стандартных списков, а также добавлять друзей в различные категории, либо редактировать и удалять эти списки, как это можно делать, например, с компьютера.

Pepper.ninja

Функциональность схожа с «Церебро», но есть несколько важных особенностей.Например, Pepper.ninja работает еще и с Facebook, правда, ищет там только по аудитории сообществ. Также сервис умеет собирать аудиторию со страниц сайтов, где установлен виджет комментариев «ВКонтакте».

Как узнать ид вконтакте

  • Метод первый. Заходим на страницу ВКонтакте, акцентируем внимание на адресную строку браузера. После обозначения слеша ( / ) идет идентификационный номер. Если пользователь ничего не менял, то это и будет его идентификационный номер, а если изменил на красивое сочетание букв и цифр, то придется воспользоваться другими методами;

  • Метод второй. Он позволяет убить сразу двух зайцев — узнать как цифровой идентификатор, так и идентификатор буквенный. Нажав на аватар в правом верхнем углу, переходим во вкладку «Мои настройки». Прокрутив настройки вниз, находим поле «Адрес страницы». Числовой код справа, это как раз и есть цифровой id, присвоенный при регистрации ВКонтакте. Чтобы не забыть адрес, запомните или запишите эти цифры. Они вам могут в дальнейшем понадобиться – от деловых переговоров до расширения круга знакомств;

При знакомстве с человеком гораздо легче оставить ему id ВК. Если у вас распространенная фамилия или имя, то искать вас через поиск дело непростое. По этой причине айди решает все. Чтобы не забыть идентификатор в цифрах запишите их в блокноте. Этот вариант подходит и для видеопереговоров. Пример: собеседник спрашивает у вас страницу ВК. Гораздо легче написать на бумаге свое айди и показать его на камеру, чем мучить человека долгими и муторными поисками.

«Барков.нет»

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

Списки друзей «ВКонтакте» в приложении

В официальном мобильном приложении после перехода в раздел «Друзья» можно нажать на кнопку «Все друзья» и выбрать один из собственных (то есть созданных лично самим пользователем) или стандартных списков, после чего отобразятся только те друзья, что были ранее добавлены в эту категорию в полной компьютерной версии сайта. Добавлять друзей в различные списки или редактировать эти категории через мобильное приложение нельзя.

GetTarget

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

Зачем нужен ID

С точки зрения социальной сети, как программы, не имеет никакого значения ваше имя и фамилия. Так же, как не имеют значения имена ваших друзей и знакомых, зарегистрированных ВКонтакте. Для соцсети наиболее значимым элементом является ID. Ведь он уникален. А однофамильцев и тесок может быть огромное количество. Поэтому ВК пересылает сообщения не от Маши к Сереже, а от id34853145 к id3548256.

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

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

Похожие записи

  • Как легко и быстро скачать музыку из ВКонтакте

  • Рост активности пользователей ВК в 2021 году превзошел ожидания

  • Как отключить уведомления в ВКонтакте

CloudTarget

Помимо стандартной для похожих сервисов функциональности, отслеживает новичков нужных сообществ интересующей тематики. Один из самых быстрых инструментов — парсинг базы до 500 000 человек — занимает несколько секунд.

Сервис умеет искать любое количество сообществ по ключевым словам и фильтрам. На выходе доступна информация в том числе о количестве ботов, среднем количестве постов в день и показателе активности (ER).

P. S. Чтобы больше узнать о том, как превратить сообщество в эффективный канал интернет-маркетинга или стать профи таргета, записывайтесь на онлайн-интенсив «SMM-менеджер».

Мнение автора и редакции может не совпадать. Хотите написать колонку для Нетологии? Читайте наши условия публикации. Чтобы быть в курсе всех новостей и читать новые статьи, присоединяйтесь к Телеграм-каналу Нетологии.

Получаем список участников сообщества ВКонтакте определенного пола и возраста

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

Не так давно в одном из тестовых задания на вакансию младшего php-программиста мне попалась простая, но интересная для меня задача.

«Сделайте скрипт на php, который возвращает список id пользователей «ВКонтакте», разделенный символами перевода строки, которые являются мужчинами старше 25 лет и состоят в группе vk.com/habr». Доступ к информации из базы «ВКонтакте» осуществляется с использованием VK API. Начинать знакомство с VK API лучше с официальной документации. Для того чтобы вызвать метод API ВКонтакте, необходимо осуществить POST или GET запрос по протоколу HTTPS на URL следующего вида:

api.vk.com/method/METHOD_NAME?PARAMETERS&access_token=ACCESS_TOKEN, где METHOD_NAME – название метода из списка методов API, PARAMETERS – параметры соответствующего метода, ACCESS_TOKEN – ключ доступа.

В нашей задаче используем метод groups.getMembers, который возвращает список участников сообщества. Все параметры метода описаны в документации. Метод не требует ключа доступа. В стандартной форме ответ приходит в виде JSON-файла. В одном запросе можно получить данные не более 1000 пользователей. Чтобы вживую посмотреть вывод метода, достаточно в адресной строке браузера ввести простейший запрос: api.vk.com/method/groups.getMembers?group_id=habr.

Получаем JSON-структуру с общим количеством членов сообщества vk.com/habr и тысячей первых id в списке по умолчанию отсортированном по возрастанию.

По условию задачи нам нужно вывести id пользователей определенного пола и возраста. Очевидный способ — выбирать запросами VK API пользователей группы вместе с их данными о поле и возрасте, а потом в PHP-коде анализировать их и выводить только нужные. Другой возможный способ — метод execute — позволяет в одном запросе передать скрипт на специальном языке VKScript для манипуляции с данными на сервере и вернуть уже обработанные данные. Сразу скажу, что мне не удалось, решить задачу с помощью метода execute. Может быть в комментариях кто-то укажет такое решение.

Пойдем по первому пути. Метод groups.getMembers с помощью значения sex параметра fields может выдавать пол пользователя, но он не выдает возраст. Вместо этого параметр fields имеет поле bdate — дата рождения. Кроме того, в запросах мы выбираем по тысяче пользователей, значит каждый следующий запрос должен выдать следующую тысячу. Для этого есть параметр offset, который показывает с какой позиции начинать выборку. Укажем в запросе еще и версию API.

В итоге запрос будет иметь примерно такой вид: https://api.vk.com/method/groups.getMembers?group_id=habr&offset=0&fields=sex,bdate&version=5.27

Чтобы забирать файл по ссылке, в PHP есть функция file_get_contents(). Она получает контент по ссылке и возвращает его в виде строки. Нужно учесть, что для того, чтобы file_get_contents() понимала протокол HTTPS нужна поддержка openssl в веб-сервере.

Потом полученный JSON-контент можно преобразовать в массив функцией json_decode(). Массив будет содержать и id, и пол. Дата рождения может быть вообще не указана. Если дата рождения всё же указана, осталось из даты рождения получить возраст.

Даты рождения в bdate хранятся в строках формата ДД.ММ.ГГГГ, если указан год рождения, или ДД.ММ, если год рождения не указан. Чтобы узнать в каком формате строка фактически, я использовал первое, что пришло в голову: count(explode(«.», $user_array[‘bdate’])) равно 2 или 3. Этот способ работает и не думаю, что это самое узкое место скрипта.

Для вычисления возраста по дате рождения нашел формулу hashcode.ru/questions/137939#137940. Функция strtotime() понимает формат поля bdate.

Проверяем пол и возраст. Если они удовлетворяют условию, выводим id.
Весь код на PHP
// Номер пакета запроса $packet = 0; // Размер пакета запроса $limit = 1000; do { // Каждый запрос начинаем там, где остановились в предыдущем запросе. $offset = $ packet * $limit; // Выполнение запроса. // Результат — JSON-файл с общим количеством и данными пользователей. // Чтобы file_get_contents() работал с https на веб-сервере apache // должен быть активен модуль openssl. $contents = file_get_contents(«https://api.vk.com/method/groups.getMembers?group_id=habr&offset=$offset&fields=sex,bdate&version=5.27») // Преобразуем JSON в массив $members = json_decode($contents, true); // Данные пользователей хранятся в подмассиве users. // Каждый элемент users — ассоциированный массив с данными. foreach ($members[‘response’][‘users’] as $user_array) { // Если пользователь указал дату рождения и пользователь — мужчина… if ((isset($user_array[‘bdate’])) && ($user_array[‘sex’] == 2)) { // … и если в дате рождения три компонента (ДД.ММ.ГГГГ)… if (count(explode(«.», $user_array[‘bdate’])) == 3) { // то вычисляем возраст (формулу нашел в интернете) $age = floor((time()-strtotime($user_array[‘bdate’]))/(60*60*24*365.25)); // Если возраст нам подходит, выводим id пользователя с переводом строки if ($age > 25) { echo $user_array[‘uid’] . «»; } } } } // Переходим на следующий пакет. $packet++; } while ($members[‘response’][‘count’] > $offset + $limit); Этот вариант прекрасно работает на относительно небольших группах, но на группах более 100 тысяч подписчиков скрипт отрабатывает не до конца — в какой-то момент почему-то вываливается ошибка «file_get_contents(…): failed to open stream: Connection timed out in … on line …». Пробовал увеличивать время выполнения скрипта и таймаут веб-сервера — не помогло. Так и не смог найти закономерность.

Тогда нашелся другой вариант — для загрузки ответа запроса использовать cURL. Чтобы применить такой метод, необходимо установить в ОС библиотеку libcurl, например, в Ubuntu —

sudo apt-get install libcurl3 и включить в PHP поддержку cURL, например, в Ubuntu — sudo apt-get install php5-curl Теперь можно открыть в PHP-скрипте сеанс curl функцией curl_init(), установить параметры соединения (в том числе URL) функцией curl_setopt() и скачивать контент JSON-файлов в строку функцией curl_exec(). Потом следует закрыть сеанс — curl_close(). Остальной код остается без изменений:

Весь код с cURL на PHP

// Номер пакета запроса $packet = 0; // Размер пакета запроса $limit = 1000; // Инициализируем cURL. // Для работы с cURL должна быть установлена библиотека libcurl // и включена поддержка cURL в PHP. $ch = curl_init(); do { // Каждый запрос начинаем там, где остановились в предыдущем запросе. $offset = $ packet * $limit; // Параметры запроса curl_setopt($ch, CURLOPT_URL, «https://api.vk.com/method/groups.getMembers?group_id=habr&offset=$offset&fields=sex,bdate&version=5.27»); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); // Выполнение запроса. // Результат — JSON-файл с общим количеством и данными пользователей. $content = curl_exec ($ch); $members = json_decode($contents, true); // Данные пользователей хранятся в подмассиве users. // Каждый элемент users — ассоциированный массив с данными. foreach ($members[‘response’][‘users’] as $user_array) { // Если пользователь указал дату рождения и пользователь — мужчина… if ((isset($user_array[‘bdate’])) && ($user_array[‘sex’] == 2)) { // … и если в дате рождения три компонента (ДД.ММ.ГГГГ)… if (count(explode(«.», $user_array[‘bdate’])) == 3) { // то вычисляем возраст (формулу нашел в интернете) $age = floor((time()-strtotime($user_array[‘bdate’]))/(60*60*24*365.25)); // Если возраст нам подходит, выводим id пользователя с переводом строки if ($age > 25) { echo $user_array[‘uid’] . «»; } } } } // Переходим на следующий пакет. $packet++; } while ($members[‘response’][‘count’] > $offset + $limit); // Закрываем cURL curl_close ($ch);
Как я уже говорил, думаю, возможен подход с методом execute, но мне пока не удалось получить в этом направлении удовлетворительный результат.
P. S. Прошу не думать, что я хочу получить от аудитории «Хабра» решение тестового задания. Вышеприведенные варианты я уже давно отправил и получил ответ. Просто немало времени потратил на эту задачу и хотел бы узнать, в правильном направлении ли я двигался и какие еще подходы можно было бы использовать.

Рейтинг
( 2 оценки, среднее 4.5 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]