Здравствуйте, господа и дамы.
Многие люди, решив начать заработок в интернете, обращают свое внимание на социальные сети. И наиболее любимой для русскоязычного населения является ВКонтакте. Вот о ней в частности и о некоторых вещах в целом я сегодня Вам и расскажу.
Что делает новичок, решивший продать, допустим, банальный чай для похудения (возьмем для примера один из самых лютых офферов). Новичок начинает думать: «Так, сейчас найду группы для похудения и там его точно купят». Забив в поиск «группы для похудения», новичок находит две-три группы миллионника и начинает спамить участников. Ловит свой законный мороз на аккаунты, у него никто ничего не купил. Тоска.
Что сделано не так? Да практически все.
Спам – зло. Бездумная рассылка не только не дает нормальных результатов, она стимулирует хозяев ресурсов вводить новые фильтры и правила, которые сильно усложняют жизнь всем участникам этой увлекательной игры. Основная работа при подготовке продажи должна состоять именно в выборе своей аудитории. В идеале, каждое предложение должно сработать. В идеале.
Для работы с нашей аудиторией мы будем использовать API вконтакте и POST/GET запросы. Для расширения возможностей API необходимо получить токен для аккаунта. Как это сделать описано на форуме много раз. Если вкратце, то вот этот вот GET запрос вернет вам желаемое.
https: //oauth.vk.com:443/token?grant_type=password&client_id=2274003&client_secret=hHbZxrka2uZ6jB1inYsH&username={-Variable.username-}&password={-Variable.password-}
Ответ будет примерно таким, откуда регулярным выражением нужно достать токен.
{"access_token":"8407956936b0ad9f8f2775asdlkjd8af3ad3f11ff8dd08790a34a550f09a4a0184fb7ab098fbc6509091ee","expires_in":0,"user_id":235255998}
Все запросы к API вконтакте выполняются через GET запрос и имеют вид
https: //api.vk.com/method/METHOD_NAME?PARAMETERS&access_token=ACCESS_TOKEN&v=V
и состоят из названия метода, его параметров, токена и версии API (последняя 5.60)
Итак, начнем.
Базовым методом для получения информации о нашем потенциальном покупателе является users.get. Упрощенный запрос имеет вид
https: //api.vk.com/method/users.get?user_ids=1&access_token=ACCESS_TOKEN&v=5.60
и вернет нам ответ вида
{"response":[{"id":1,"first_name":"Павел","last_name":"Дуров"}]}
Этого ответа для понимания того, что человеку можно продать, нам очень мало, поэтому будем использовать дополнительные поля для запроса (это не закрытый список полей, а те, которые использую я для сбора информации):
bdate – дата рождения. Полезность объяснять не нужно.
сareer – данные о карьере. Амбициозные и начинающие работники заполняют обязательно. И гордятся этим. И готовы развиваться профессионально. И покупать для этого инфопродукты. Понятно, да?
сity – информация о городе. Для гео. Сюда же поле country.
сounters – это поле покажет количество различных объектов у пользователя – фотоальбомов, видео, аудио, фотографий и так далее. Очень полезно для фильтрации пользователей от ботов, у которых, к примеру, видеозаписи в альбоме встречаются довольно редко.
has_mobile – информация о номере мобильного телефона. Довольно точный признак живого человека
last_seen – очень важное поле, которое показывает последний вход человека и платформу, с которой он входил в ВК: андроид, айфон, приложение, десктоп. Нам нужны активные пользователи, да? Если аккаунт заморожен или забанен, поле вернет banned. Это обязательно необходимо использовать, поскольку резко снижает количество неэффективных запросов, а следовательно, увеличивает количество эффективных)
online – поле, показывающее онлайн ли пользователь. Используется для быстрых действий с быстрой ответной реакцией.
relatives- список родственников. Если не удастся продать самому пользователю, можно продать подарок для родственника
relation - семейное положение пользователя. Поле тоже очень важн
о.
sex- пол.
Вот пожалуй и все полезные поля. То есть в итоге наш запрос будет иметь вид
https: //api.vk.com/method/users.get?user_ids=1&fields=bdate,сareer,city,counters,has_mobile,last_seen,online,relatives,relation,sex&access_token={-Variable.token-}&v=5.60
За раз этот метод возвращает значения о 1000 пользователях (заявлено). То есть user_ids=1,2,3…999
Для примера давайте попробуем сформировать аудиторию, которой можно продать какой-нибудь не слишком замороченный продукт. Например, Star-Master- ночник проектор звездного неба.
Вполне себе понятно, что оффер будет пользоваться популярностью у детей. На молодых родителях мы и сосредоточимся. Для начала найдем перечень сообществ молодых мам. Для этого воспользуемся методом groups.search.
Отправив запрос
https: //api.vk.com/method/groups.search?q="молодые мамы"&access_token={-Variable.token-}&v=5.60
Мы получим ответ, что групп таких нашлось 2567 штук. Это достаточно много, нам хватит точно. Достав из ответа все айди группы (обратите внимание на работу с данными JSON в свежих версиях программы), мы воспользуемся методом groups.getMembers для того, чтобы получить всех участников сообществ.
https: //api.vk.com/method/groups.getMembers?group_id=68518743&count=1000&offset=0&access_token={-Variable.token-}&v=5.60
Тут есть один нюанс. За один запрос придет ответ максимум о тысяче участников. Этот показатель регулируется значением поля count. Показатель offset регулирует, с какого именно пользователя из всех начинать возврат. Например из набора «1,5,15,18,26,44,52,29,12» при count=1, offset=0 вернется 1, при count=3, offset=0 вернется 1,5,15
при count=3, offset=2 вернется 15,18,26
Вконтакте выполняет три запроса в секунду, если делать больше, то ответа не будет. Как можно заметить, это довольно мало, поскольку один миллионник будет парсится порядка пяти минут. Есть возможность этого избежать, используя метод execute. Он позволяет выполнить 25 запросов в одном (Дима, привет и спасибо). Выполняется он методом POST, в урле
https://api.vk.com/method/execute, в теле пишем следующую конструкцию
code=return [API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s1-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable. GroupID -}", "offset": "{-Variable.s2-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s3-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s4-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s5-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s6-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s7-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s8-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s9-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s10-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s11-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s12-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s13-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s14-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s15-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s16-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s17-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s18-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s19-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s20-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s21-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s22-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s23-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s24-}", "fields": "sex"}),API.groups.getMembers({"group_id": "{-Variable.GroupID-}", "offset": "{-Variable.s25-}", "fields": "sex"})];&access_token={-Variable.token-}
Где Variable.GroupID – айди нашей группы, а переменные s1-s25 – показатели оффсета, изменяющиеся от 0 до той тысячи, которая содержит в себе значение количества членов группы.
Выполняя три таких запроса в секунду, мы получим 75 тысяч пользователей в секунду и 4,5 миллиона в минуту, что уже достаточно терпимо. Данный метод работает с любыми методами, не только с groups.getMembers.
Итак, мы получили ID юзеров, которые состоят в группе. Прогнав таким образом все спаршенные группы, мы получим набор всех х участников. Удалив дубли, получаем список айди, готовых к обработке. На этом этапе торопливые люди обычно начинают спамить их проекторами, но мы пойдем дальше.
Прогнав их через юзер гет, мы можем отсеять всех забаненых пользователей, а также пользователей, которые не посещали ВК больше месяца. Получив порядка сотни-другой тысяч пользователей, начинаем их разбирать.
Использую метод wall.get, мы можем получить содержание стены пользователя
https: //api.vk.com/method/wall.get?owner_id=235980998&count=100&offset=0&access_token={-Variable.token-}&v=5.60
Метод отдает 100 постов за один запрос, дальше такая же история с оффсетом. В полученном ответе регулярным выражением мы можем найти все посты, содержащие слова «день рождения» «с днем рождения» и т.д., и, взглянув на дату поста, определим с нормальным процентом вероятности день рождения либо ребенка либо мамы. То есть если день рождения ребенка, то пост будет иметь своим хозяином самого юзера, если нет – то хозяином поста будут другие юзеры/сообщества (есть конечно тип людей, который пишет на стене «с днем рождения меня», но я верю, что их мало
.
Собрали мы дни рождения. Теперь делаем следующее. Находим среди друзей нашей молодой мамы людей, которые проявляют наибольшую активность на странице пользователя. Для этого используем метод likes.getList, который вернет нам айди пользователей, лайкнувших пост. Айди постов берем из предыдущего запроса регуляркой/json.
https: //api.vk.com/method/likes.getList?type=photo&owner_id=-36360108&item_id=456240531&access_token={-Variable.token-}&v=5.60
На что обращаем внимание - на тип поста (фото=photo, пост=post и проч.), на айди владельца поста(если сообщество, то с минусом).
В итоге, мы можем установить, кто из друзей пользователя проявляет стабильную активность на странице пользователя. Написав другой текст объявления, мы можем продать этот проектор ему. Например «Привет, у такой-то день рождения у ребенка через неделю, подарок вот. Не благодари)». Тут дело в том, что когда адресат получает такое сообщение, он очень редко расценит его как спам. Потому как это уже и не спам, а индивидуальная выборка. И даже если мы промахнулись с датой, ответ в самом крайнем случае будет «С чего ты взял, что у ребенка день рождения действительно через неделю?». Но без кнопки спама.
Описанная мною ситуация – один из тысячи примеров того, как можно искать клиентов. Все очень индивидуально и под каждый оффер нужен будет свой парсер.
Всю подробную информацию об API ВК можно найти на страницах документации
https://vk.com/dev/methods
Еще несколько советов и пару интересных тем.
Во-первых, упаси вас бог ходить на курсы по SMM (маркетингу в социальных сетях). Они плодят только одинаковые решения, но не учат выделяться, а нужно именно это. Благодаря их стараниям, весь интернет выглядит не так, как выглядел года два назад, а по-другому. Но одинаково. Все их «разработайте персональную страничку, оставьте контакты, оформите так и так» настолько обыденны, насколько мало результата они приносят. Есть один гуру, который в своем стриме случайно показал свой ник в одной из партнерских систем. И есть хозяин этой системы в одном из частных чатов в телеграме. Так вот статистика у гуру очень плачевная. В общем, крайне не рекомендую
Во-вторых,не недооценивайте значение контента. Сейчас все акценты сместятся туда. Что даст отлаженный инструмент, если он будет предлагать «Только у нас - потрИсающий ночной проектор». Добрая половина просто сразу закроет сообщение. Как минимум грамотность, как максимум – обдуманный текст.
В третьих анализ. Отследив активность пользователя во времени через дату постов, можно с уверенностью сказать, что человек, лайкавший сначала посты из групп с рецептами, а затем фитнесс, явно хочет похудеть. То же самое с вегетарианством, которое у многих начинает вызывать ненормальную любовь к сладкому. И так далее, не стесняйтесь думать.
И напоследок – как найти платежеспособную аудиторию вконтакте. Способы есть и их достаточно много. Напишу два.
Онлайн обучение чему-либо предполагает общение. Так как скайп становится все менее удобным, многие переместились в соц сети. Все просто – ищем закрытую группу вконтакте по мастер-классам/семинарам/обучению/занятиям. Люди, в ней состоящие, уже купили что-то в интернете и будут покупать дальше.
Способ номер два. Давайте посмотрим в прошлое вспомним, как мы пришли в интернет? Помните, первая почта, первые сервисы. И постоянный перебор занятых логинов. И многие из нас приходят к чему-то такому, что очень индивидуально и с большой вероятностью не будет занято нигде, потому что этот логин придумали мы сами. Например, nata_soul. Что это нам дает? А то, что многие люди, пользующиеся ВКонтакте, меняют короткий адрес с
https://vk.com/ id32165498 на
https://vk.com/nata_soul. Идем на складчик, парсим участников складчин или просто участников и проверяем их на адреса ВК. Совпадения находятся довольно часто, на одну небольшую складчину 5-6 попаданий.
В статье не будет шаблонов по вполне понятным причинам – я за индивидуальный подход, а это значит, что шаблоны будут новыми для каждой задачи. Думайте, пишите, выбирайте, оценивайте – и все получится.
P.S. Пример удачного попадания. Пока мой максимум за два дня с одного оффера.
Посмотреть вложение 17415