Таргетированная реклама — проверенный временем инструмент. Но в случае с VK аудитория многих пабликов — фейки. Чтобы не растрачивать бюджет впустую — создадим бота, который будет анализировать аудиторию паблика. Напомним, что ранее мы уже создавали бота-говорилку для VK — советуем ознакомиться с материалом и более детальным разбором особенностей создания ботов для VK.
*Спойлер: готовый исходный код — в конце статьи.
Какие задачи решает бот
Данный бот предназначен для непосредственной оценки потенциала аудитории пабликов VK для рекламных целей. Для этого бот:
Парсерит список участников сообществ.
Вытягивает информацию для оценки со страницы каждого отдельно взятого участника.
Сопоставляет полученную информацию.
Выводит процентные значения.
Предложенным функционалом прикладной потенциал бота не ограничивается и может быть расширен путем «пришивания» к нему новых функций. Но для демонстрации принципа того, как происходит отсеивание «мусорных пабликов», — перечисленного выше более чем достаточно.
Принцип работы бота
Принцип работы бота следующий:
Бот получает сообщение от пользователя с адресом группы.
Парсит аудиторию паблика.
Проверяет каждого пользователя на бан VK.
Проверяет каждого пользователя на наличие фотографии.
Проверяет каждого пользователя на время последнего появления в сети.
Проверяет каждого пользователя на дату регистрации.
Возвращает в ЛС сообщение с процентным соотношением «фейковых» пользователей к общему числу подписчиков.
Пошаговая инструкция, как создать парсер аудитории VK
- Сперва вам нужно получить токен. Важное уточнение — токен дает полный доступ к странице, так что советуем использовать не основной профиль.
- Затем авторизируемся в pythonanywhere.
- Инициируем запуск Bash-консоли.
- Дожидаемся загрузки машины.
- Ждем подтверждения загрузки.
- Патчим машину под VK API, для этого прописываем:
pip3.9 install vk_api
- Открываем блокнот или другой текстовый редактор, вводим:
import vk_api
import requests
from vk_api.longpoll import VkLongPoll, VkEventType
import time
import json
from bs4 import BeautifulSoup
import datetime as DT
token="ваш токен"
bh = vk_api.VkApi(token = token)
give = bh.get_api()
longpoll = VkLongPoll(bh)
time = time.time()
def blasthack(id, text):
bh.method('messages.send', {'user_id' : id, 'message' : text, 'random_id': 0})
def ras4eti(s):
bs4et=0
bs4etn=0
fs4et=0
fs4etn=0
ls4et=0
ls4etn=0
rs4et=0
rs4etn=0
users=0
timetest=time-2629743
count = requests.get('https://api.vk.com/method/groups.getMembers', params={
'access_token':token,
'v':5.103,
'group_id': s,
'sort':'id_desc',
'offset':0,
'fields':'last_seen'
}).json()['response']['count']
get_offset=count//1000
good_id_list = []
max_offset = get_offset
if max_offset == 0:
max_offset=1
offset = 0
while offset < max_offset:
response = requests.get('https://api.vk.com/method/groups.getMembers', params={
'access_token':token,
'v':5.103,
'group_id': s,
'sort':'id_desc',
'offset':offset,
'fields':'last_seen'
}).json()['response']
offset += 1
for item in response['items']:
good_id_list.append(item['id'])
with open('users.txt', 'w') as f:
for item in good_id_list:
f.write("%s\n" % item)
blasthack(id, 'Парсинг завершен, приступаю к анализу (может занять много времени)')
file1 = open("users.txt", "r")
while True:
# считываем строку
line = file1.readline()
users=users+1
# прерываем цикл, если строка пустая
if not line:
break
# выводим строку
a=line.strip()
good_id_list = []
response = requests.get('https://api.vk.com/method/users.get', params={
'access_token':token,
'v':5.103,
'user_id': a,
'fields':'last_seen,has_photo'
}).json()['response']
aList = json.dumps(response)
x = aList.split(",")
cbt=x[2]
if str(cbt) == str(' "deactivated": "deleted"'):
bs4et=bs4et+1
else:
bs4etn=bs4etn+1
if str(x[1]) != ' "has_photo": 1':
fs4et=fs4et+1
else:
fs4etn=fs4etn+1
x[2] = x[2][:-1]
if str(x[2]) != ' "last_seen": {"platform": ':
ls4et=ls4et+1
else:
g=str(x[3])
s = g
s=s.replace(' "time": ', '')
s=s.replace('}', '')
if int(s)-time > timetest:
ls4et=ls4et+1
else:
ls4etn=ls4etn+1
response = requests.get('https://vk.com/foaf.php?id='+a)
xml = response.text
soup = BeautifulSoup(xml, 'lxml')
created = soup.find('ya:created').get('dc:date')
dt = created
dt = dt.replace("+03:00", "")
dt = dt.replace("T", " ")
dt = DT.datetime.strptime(dt, '%Y-%m-%d %H:%M:%S')
dt=dt.timestamp()
dt=int(dt)
if dt-time>94670778:
rs4et=rs4et+1
else:
rs4etn=rs4etn+1
#закрываем файл
file1.close
prob=int(bs4et/users*100)
prof=int(fs4et/users*100)
prol=int(ls4et/users*100)
pror=int(rs4et/users*100)
print (prob)
print (prof)
print (prol)
print (pror)
blasthack(id, 'Анализ завершен. \nВ паблике: '+s+'\nЗабаненных акков: '+str(prob)+'% ('+str(bs4et)+')\nАкков без фото: '+str(prof)+'% ('+str(fs4et)+')\nАкков не заходивших в сеть 30+ дней: '+str(prol)+'% ('+str(ls4et)+')\nАкков зарегистрированных менее 3 лет назад: '+str(pror)+'% ('+str(rs4et)+')')
response=0
for event in longpoll.listen():
if event.type == VkEventType.MESSAGE_NEW:
# Чтобы наш бот не слышал и не отвечал на самого себя
if event.to_me:
# Для того чтобы бот читал все с маленьких букв
message = event.text.lower()
# Получаем id пользователя
id = event.user_id
s = message
response=0
try:
response = requests.get('https://api.vk.com/method/groups.getMembers', params={
'access_token':token,
'v':5.103,
'group_id': s
}).json()['response']
except: response != "error"
if response == 0:
blasthack(id, 'Паблик с таким ID не существует')
if response != 0:
blasthack(id, 'Парсим аудиторию паблика: \n' +s)
ras4eti(s)
- Указываем токен вместо “ваш токен”.
- Сохраняем код как bot.py.
- Грузим скрипт на сервер.
- Инициируем запуск bot.py.
- Тестируем парсер.
Исходный код
Ссылка на скачивание исходного кода
Подводя итоги
Как видите, создать собственный парсер для анализа аудитории не сложно — надеемся, он поможет вам в настройке таргетинга и сэкономит ваш бюджет.