Парсер лайков ВКонтакте

Парсер лайков из ВКонтакте

В данном уроке по PHP парсерам обойдёмся без PHP. Будем собирать ID пользователей, лайкнувших заданный товар. Для этой цели воспользуемся API социальной сети ВКонтакте.

Можно, конечно, пойти стандартным путём и парсить ВК с помощью PHP и cURL, но когда у сайта есть рабочее API, то удобнее пользоваться им. В частности, в ВК можно получить через встроенное API самые разные данные, но при этом есть ограничение на частоту запросов.

Для успешного старта работы с API VK стоит изучит официальную документацию и скудные примеры. Для себя выбрал вариант работы по Open API. Кстати, запросы к API VK отправляются по технологии AJAX, а ответы приходят в формате JSON, не зря мы ранее знакомились с этой схемой данных.

Чтобы можно было работать с API социальной сети нужно в своём скрипте подключить JS библиотеку //vk.com/js/api/openapi.js и создать Standalone приложение.

Пример приложения ВК

Далее в настройках видим ID приложения, а также надо задать домен и адрес сайта с нашим парсером.

Настройки приложения ВКТеперь мы готовы к написанию парсера лайков. В качестве подопытного выберем маркет с товарами бренда Кухни Мария.

Маркет ВК Кухни Мария

Парсер лайков во ВКонтакте без PHP

Код файла index.html.

<!doctype html>
<html>
<head>
	<title>Парсер информации из ВКонтакте</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
	<!--meta name="robots" content="noindex,nofollow"-->
	<script src="//vk.com/js/api/openapi.js"  type="text/javascript" defer></script>
	<script src="//ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js" type="text/javascript"></script>
</head>
<body>
<style>
.wrapper {
	max-width: 600px;
	margin: 0 auto;
}
h1, p {
	text-align: center;
}
.action_form {
	max-width: 560px;
	margin: 0 auto;
}
.action_form input,
.action_form textarea {
	width: 100%;
}
.action_form textarea {
	min-height: 100px;
}
input[type="text"] {
	font-size: 1em;
	min-height: 36px;
	box-sizing: border-box;
}
input[type="submit"],
input[type="button"] {
	padding: 8px 12px;
	margin: 12px auto;
	font-size: 1.2em;
	font-weight: 400;
	line-height: 1.2em;
	text-decoration: none;
	display: inline-block;
	cursor: pointer;
	border: 2px solid #007700;
	border-radius: 2px;
	background-color: transparent;
	color: #007700;
}
input[type="submit"]:hover,
input[type="button"]:hover {
	background-color: #009900;
	color: #fff;
}
.result {
	border: 1px dotted #000;
	width: 100%;
	height: auto;
	overflow-y: auto;
	margin: 0px auto;
	padding: 10px;
}
.copyright {
	text-align: center;
}
.copyright a {
	color: #000;
}
.copyright a:hover {
	text-decoration: none;
}
.red {
	color: #770000;
}
.green {
	color: #007700;
}
</style>
<div class="wrapper">
	<h1>Парсер лайков на товары из ВК</h1>
	<p>Собираем список ID пользователей, которые лайкнули заданный товар.</p>
	<form id="action_form" class="action_form" action="" method="post">
		<input type="text" id="vk_url" name="vk_url" />
		<input type="button" id="btn_action_likes" name="btn_action_likes" value="Собрать IDs" />
	</form>
	<div id="result" class="result"></div>
	<div id="errors_block" class="errors_block"></div>
	<div class="copyright">&copy; Идея и реализация - <a href="http://seorubl.ru/" target="_blank" title="Записки Предприимчивого Человека" rel="generator">ПЧ</a> // 28.05.2017 г.</div>
</div>
<script type="text/javascript">
	jQuery(document).ready(function($) {
		$('#btn_action_likes').click(function() {
			function get_vk_market_likes(vk_owner_id, vk_post_id, vk_post_type) {
				// Инициализация VK API	
				VK.init({
					apiId: ID приложения
				});
	
				$('#result').html('<p class="green">Загрузка данных ... </p>');
			
				VK.Api.call('likes.getList', {owner_id: vk_owner_id, item_id: vk_post_id, type: vk_post_type, count: 1000, offset: 0, v: '5.8'}, function(data) {
					if(data.response) {
						$('#result').html('');
						data.response.items.forEach(function(item, i, arr) {
							$('#result').html($('#result').html() + "<p>" + item + "</p>").hide().fadeIn('slow');
						});
					} else {
						$('#errors_block').html($('.app_alert').html() + '<p class="red">' + data.error.error_code + '// ' + data.error.error_msg + '</p>');
					}
				});
			}
			var vk_url = $("#vk_url").val();
			if(vk_url) {
				$('#result').html('');
				$('#errors_block').html('');
				vk_url = vk_url.slice(vk_url.indexOf("w=product") + 9).split('_');
				var vk_owner_id = parseInt(vk_url[0]);
				var vk_post_id = parseInt(vk_url[1]);
				var vk_post_type = 'market';
				get_vk_market_likes(vk_owner_id, vk_post_id, vk_post_type);
			} else {
				$('#errors_block').html($('#errors_block').html() + "<p>Введите адрес страницы с товаром</p>").hide().fadeIn('slow');
			}
			return true;
		});
	});
</script>
</body>
</html>

При запуске парсера не забудьте в настройке apiId: ID приложения поставить ID своего приложения.

Алгоритм работы парсера лайков следующий. Мы задаём адрес карточки нужного нам товара. Скрипт из URL достаёт ID маркета и товара, далее делает запрос к API ВК с целью получить список ID пользователей, которые поставили лайки заданному проекту кухни. Для получения информации по лайкам используется метод likes.getList.

Затем список ID пользователей выводится на экран. Потом полученную информацию можно использовать для настройки таргетированной рекламы в социальной сети.

Пример простого парсера лайков

Особенности работы с API VK

Запросы к API VK можно делать только с заданного в приложении домена. Если попробовать сделать AJAX запрос с другого сайта, то вывалится ошибка ограничения кроссдоменных запроосов.

Ошибка запроса API VK с чужого домена

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

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

Парсер лайков из ВК написан без применения PHP, в скрипте использовался только JS и открытое API социальной сети. После небольших доработок этот же парсер можно применять для сбора информации по лайкам для постов, фото, видео и пр.

Ранее планировал, что это статья будет завершающей, но, возможно, позже выйдет ещё одна публикация на тему автоматического постинга информации в CMS, на примере WordPress. Это тоже полезный навык для разработчиков парсеров. Данные не только нужно собирать, но и потом куда-то с пользой применять.

Парсер лайков из ВКонтакте
5 (100%) 1 vote

Парсер лайков из ВКонтакте: 2 комментария
  1. По теме статьи ничего не могу сказать, потому как нуб в этом деле полный.
    Вопрос в другом. Как ты относишься к этой подлянке, что готовит нам государство в плане политики конфиденциальности. Я понимаю, что скромные фрилансерские блоги и даром никому не нужны. Однако я в уже во многом не уверен. Беда, как говорится, приходит откуда не ждали. Ограничился у себя самыми скромными действиями.
    Кстати своих клиентов, с которыми работаю, давно предупредил об этом. Они вбухивают деньги в свои проекты, а рискуют бизнесом. Откликнулись положительно, кто-то уже начал делать.

    1. Что-то не совсем понял о чём конкретно речь? А, про закон об обработке персональных данных. Да, слышал, жёсткие какие-то требования, надеюсь, что с мелкими сайтами особо связываться не будут. Но в принципе вещи правильные, а то часто бывает, что продают базы пользователей непонятно кому, потом сыпется разный спам в том числе на телефон звонки. Раньше претензии трудно было предъявить, а теперь будет закон и за такие вещи можно наказывать будет. Сам сейчас для заказчика разбираюсь с тем, как подогнать сайт под эти требования.
      Меня больше запрет Телеграмма и анонимайзеров волнует. Это как со свободным обращением оружия. У бандитов оно есть в любом случае, а честные граждане должны голыми руками защищаться. Также и в Интернете, бандиты найдут варианты обхода, а нормальным пользователям одни неудобства.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *