Target audience parsing in VK
⏱ Время чтения текста – 5 минутWhen posting ads some platforms allow uploading the list of people who will see the ad in audience settings. There are special tools to parse ids from public pages but it’s much more interesting (and cheaper) to do it manually with Python and VK API. Today we will tell how we parsed the target audience for the LEFTJOIN promotional campaign and uploaded it to the advertising account.
Parsing of users
To send requests we will need a user token and the list of VK groups whose participants we want to get. We collected about 30 groups related to analytics, BI tools and Data Science.
import requests
import time
group_list = ['datacampus', '185023286', 'data_mining_in_action', '223456', '187222444', 'nta_ds_ai', 'business__intelligence', 'club1981711', 'datascience', 'ozonmasters', 'businessanalysts', 'datamining.team', 'club.shad', '174278716', 'sqlex', 'sql_helper', 'odssib', 'sapbi', 'sql_learn', 'hsespbcareer', 'smartdata', 'pomoshch_s_spss', 'dwhexpert', 'k0d_ds', 'sql_ex_ru', 'datascience_ai', 'data_club', 'mashinnoe_obuchenie_ai_big_data', 'womeninbigdata', 'introstats', 'smartdata', 'data_mining_in_action', 'dlschool_mipt']
token = 'your_token'
A request for getting the participants of VK groups will return a maximum of 1000 lines, to get the next 1000 ones we need to increment an offset parameter by 1. But we need to know when to stop incrementing so we will write a function that accepts an id of the group, receives the information about the number of group’s participants and returns the maximum number for the offset – the ratio of the total number of participants to 1000 as we can only get 1000 persons at a time.
def get_offset(group_id):
count = requests.get('https://api.vk.com/method/groups.getMembers',
params={
'access_token':token,
'v':5.103,
'group_id': group_id,
'sort':'id_desc',
'offset':0,
'fields':'last_seen'
}).json()['response']['count']
return count // 1000
In the next step, we will write a function that accepts the group’s ID, collects all the subscribers into a list and returns it. To do this we will send requests for receiving 1000 people till the offset is over, enter the data into the list and return it. When parsing each person, we will additionally check their last visit date and if they have not logged in since the middle of November, we won’t add them. The time is indicated in unixtime format.
def get_users(group_id):
good_id_list = []
offset = 0
max_offset = get_offset(group_id)
while offset < max_offset:
response = requests.get('https://api.vk.com/method/groups.getMembers',
params={
'access_token':token,
'v':5.103,
'group_id': group_id,
'sort':'id_desc',
'offset':offset,
'fields':'last_seen' }).json()['response']
offset += 1
for item in response['items']:
try:
if item['last_seen']['time'] >= 1605571200:
good_id_list.append(item['id'])
except Exception as E:
continue
return good_id_list
Now we will parse all groups from the list, collect the participants, and add them into the all_users list. In the end, we will transfer the list into a set and then back into a list to get rid of the duplicates as the same people might have been members of different groups. After parsing each group, we will pause the program for a second to prevent reaching the requests limit.
all_users = []
for group in group_list:
print(group)
try:
users = get_users(group)
all_users.extend(users)
time.sleep(1)
except KeyError as E:
print(group, E)
continue
all_users = list(set(all_users))
The last step will be writing each user to a file from a new line.
with open('users.txt', 'w') as f:
for item in all_users:
f.write("%s\n" % item)
Audience in the advertising account from a file
Let’s open our VK advertising account and choose a “Retargeting” tab. Here we will find the “Create audience” button:
After clicking it, a new window will pop up where we will be able to choose a file as a source and indicate the name of the audience.
The audience will be available some seconds after loading. First 10 minutes it will be indicated that the audience is too small, this is not true, and the panel will refresh soon if your audience really contains more than 100 people.
Results
Let’s compare the average cost of the attracted participant in our group when using the ad with automatic audience targeting and the ad with the audience that we have scraped. In the first case, the average cost is 52.4 rubles, in the second case 33.2 rubles. The selection of a quality audience by parsing data from VK helped us to reduce the average costs by 37%.
We have prepared this post for our advertising campaign:
Hey! You see this ad because we have parsed your id and made a file targeting in VK advertising account. Do you want to know how to do this?
LEFTJOIN – a blog about analytics, visualizations, Data Science and BI. A blog contains a lot of material on different BI and SQL tools, data visualizations and dashboards, work with different APIs (from Google Docs to social networks to the amateurs of beer) and interesting Python libraries.