Сбор данных с помощью API Вконтакте — Разработка на

Оглавление

Сбор данных с помощью api вконтакте — разработка на

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

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

Важно: мы заметили, что при поиске по ФИ ДР Вконтакте выдаст подходящих пользователей, даже если их дата рождения скрыта. Это можно было использовать, только нужно обеспечить связь с данными поискового запроса. Для работы с API VK мы решили использовать Python с библиотекой vk_api (установка: pip install vk_api). Итого нам потребуются 2 библиотеки:

import pandas as pd
import vk_api

Далее – импорт входных данных в формате ID, Имя, Фамилия, Отчество (можно оставить пустым, так как Вконтакте отчество отсутствует), День рождения, Месяц рождения, Год рождения. Пример: (0,Пет, Петрови, ,1,1,1950)

data = pd.read_csv(‘in.txt’, encoding = ‘cp1251’)

Затем авторизация и получение токена VK:

vk_session = vk_api.VkApi(‘ 79XXXXXXXXXX’, ‘password’)
vk_session.auth()
vk = vk_session.get_api()

После этого мы можем начинать выполнять запросы к API.

Разберем для примера использование метода users.search и сохранение полученных результатов. Основные параметры это q – строка поискового запроса, так же для поиска нам понадобятся birth_day, birth_month, birth_year, count – количество результатов (поставим максимум – 1000), fields – список дополнительных полей, в примере укажем ‘bdate, city’. Результат будет возвращен в виде словаря Python. Разберем подробно:

t={} #создаем словарь для хранения данных, получаемых от API VK
for j in range(0, len(data)): #запускаем поиск по массиву
#Далее следует обращение к API с нашими параметрами:
t[j]=vk.users.search(q = data[‘N’][j] ‘ ‘ data[‘F’][j], birth_day = data[‘D’][j], birth_month = data[‘M’][j], birth_year = data[‘Y’][j], count = 1000, fields=’bdate, city’)
for h in (t[j][‘items’]): #Сохраняем результаты поиска в файл”users.txt”
with open(‘users.txt’,’a’) as f1:
f1.write((str(data[‘id’][j]) ‘;’ #ID исходный
str(t[j][‘count’]) ‘;’ #Количество найденных пользователей
str(h[‘id’]) ‘;’ #ID пользователя VK
h[‘last_name’] ‘;’ #Фамилия
h[‘first_name’] ‘;’ #Имя
h.get(‘bdate’,”) ‘;’ #Дата рождения
h.get(‘city’,{}).get(‘title’,”) #У города несколько параметров – нам нужно название: title
‘;n’).encode(‘cp1251’, ‘replace’).decode(‘cp1251’))#Для удаления нестандартных символов, которые могут вызывать ошибки

Далее мы можем в этом же цикле осуществить поиск и сохранение ID друзей пользователя, за это отвечает метод friends.get. Если друзей нет (или скрыты), метод вернет ошибку, поэтому используем try/except:

try:
m=vk.friends.get(user_id = str(h[‘id’]), count = 50000)
for q in m[‘items’]: #Сохраняем ID друзей в файл “friends.txt”
with open(‘friends.txt’,’a’) as f2:
f2.write(str(data[‘id’][j]) ‘;’ str(h[‘id’]) ‘;’ str(q) ‘;n’)
except: #Если друзей нет (или скрыты) пишем в файл 0 для этого ID
with open(‘friends.txt’,’a’) as f2:
f2.write(str(data[‘id’][j]) ‘;’ str(h[‘id’]) ‘;0;n’)

Если мы хотим выполнить большое количество запросов, нужно добавить паузу между ними, например, команда sleep библиотеки time. Без этого учетная запись VK может быть заблокирована. Экспериментальным путем подобраны значения 9 секунд для поиска без друзей и 5 для поиска с друзьями (меньше, т.к. получение и сохранение списка друзей занимает несколько секунд). Производительность при использовании одной учетной записи Вконтакте составляет 8-10 тыс. пользователей в сутки. Полученные результаты сохраняются в файлы users.txt и friends.txt и могут в дальнейшем быть обработаны в БД или средствами Python.

Скрипт проверки пользователя в сообществе вконтакте

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

Но для начала, давайте ознакомимся со скриптом и поймем для чего он нужен и как его можно использовать. Предназначен он для определения подписки на определенное сообщество любого пользователя, который уже был зарегистрирован в контакте. То есть, к примеру, Вася Пупкин, не был подписан на такое сообщество и скрипт автоматически выдает эту информацию, что он не подписан, аналогично скрипт выполняет действия при подписке на сообщество. Ну, а теперь, перейдем к самому коду скрипта.

Скрипт одним шагом. HTML, PHP, API.

По сути, обилие кода Вы тут не увидите, да это и не требуется. Но все же, давайте я Вам все объясню. Переменная $community – хранит в себе идентификатор сообщества, переменная $profile – хранит в себе идентификатор пользователя ВКонтакте (в данном случае, официальное сообщество RootHelp и идентификатор моей личной страницы).

Далее с помощью PHP функции file_get_contents получаем содержимое файла в виде строчки (про данную функцию я подробно рассказывал в другом уроке – Как подключить файл и вывести его содержимое) и отдаем ее функции json_decode, которая принимаем закодированную строку и преобразовывает ее в переменную $answer

<?php
$community = 30444828;
$profile = 7673899;
$answer = json_decode(file_get_contents("http://api.vk.com/method/groups.isMember?gid=".$community."&uid=".$profile));
if($answer->response == 1){  
	echo"Мой аккаунт <a href='http://vk.com/id".$profile."' target='_blank'>".$profile."</a> и я уже подписан на новости сообщества!";
}
else{?>
	<script type="text/javascript" src="//vk.com/js/api/openapi.js?121"></script>
	<div id="vk_groups"></div>
	<script type="text/javascript">
	VK.Widgets.Group("vk_groups", {mode: 0, width: "800", height: "400", color1: 'FFFFFF', color2: '428BCA', color3: '428BCA'}, 30444828);
	</script>
<?}
?>

После чего создаем условие, в котором при положительном ответе от сервера выдаем, что пользователь подписан на группу, при отрицательном показываем виджет API подписки на группу. Вот и все, скрипт проверки пользователя в сообществе ВКонтакте готов!

Огромное спасибо за ваше внимание! Подписывайтесь, оставляйте свои комментарии, буду рад ответить на любые вопросы!)


Роман Краутер

Понравилась статья? Поделиться с друзьями:
ТВОЙ ВК
Добавить комментарий

Adblock
detector