Поиск

Сбор количества комментариев с виджета VK

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

Страница виджета — vk.com/dev/Comments
Документация — vk.com/dev/widget_comments

Обычно код вставки виджета выглядит следующим образом:

<head>
	<script type="text/javascript" src="https://vk.com/js/api/openapi.js?159"></script>
<head>

...

<script type="text/javascript">
	VK.init({apiId: API_ID, onlyWidgets: true});
</script>

<div id="vk_comments"></div>

<script type="text/javascript">
VK.Widgets.Comments("vk_comments", {limit: 10, attach: "*"});
</script>
HTML

Добавим обработчики событий методом VK.Observer.subscribe():

widgets.comments.new_comment — срабатывает при добавлении комментария,
widgets.comments.delete_comment — при его удалении.

События возвращают:

num Количество комментариев
last_comment Текст последнего комментария
date Текущая дата в формате 2018-09-12T17:20:00+00:00
sign Md5 от конкатенации строк: api_secret, date, num, last_comment

При срабатывании событий, полученное количество и ID статьи ($articles_id) будут отправлены через AJAX на скрипт set_count_comments.php.

<script type="text/javascript">
VK.Widgets.Comments("vk_comments", {limit: 10, width: "", attach: "*"});

VK.Observer.subscribe("widgets.comments.new_comment", function f(num){
	setCountComments(num);
});			

VK.Observer.subscribe("widgets.comments.delete_comment", function f(num){		
	setCountComments(num);
});
					
function setCountComments(num){
	$.ajax({
		type: "GET",
		url: "/set_count_comments.php",
		data: {"num": num, "id": <?php echo $articles_id; ?>}
	});
}
</script>	
HTML

Скрипт set_count_comments.php получит и обновит данные в БД для каждой статьи по отдельности.

<?php
$id  = intval($_GET['id']);
$num = intval($_GET['num']);

if (!empty($id)) {
	$dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль');
	$sth = $dbh->prepare("UPDATE `articles` SET `comments` = :num WHERE `id` = :id");
	$sth->execute(array('num' => $num, 'id' => $id));
}
PHP

Недостаток метода – первоначальные данные будут собираться при активности пользователей и займет достаточно долгое время.

18.09.2018, обновлено 26.11.2019 794

Другие публикации

В статье представлены все самые встречающеюся мета-теги с примерами и пояснениями их использования.
17.01.2018 3112
Можно найти множество применений Яндекс Диска на своем сайте, например, хранение бекапов и отчетов, обновление прайсов,...
29.11.2017 12566
Примеры как зарегистрировать бота в Телеграм, описание и взаимодействие с основными методами API.
17.11.2018 11300
Пример создания файла карты сайта (sitemap.xml) на PHP. Интеграция его на сайт и подключение его в robots.txt
19.11.2016 2360
Пример как сформировать товарную накладную в с помощью класса PHPExcel. Скачать класс можно с официального сайта или...
27.01.2017 6348
После регистрации в системе эквайринга Сбербанка и получив доступ к тестовой среде, можно приступить к интеграции с...
22.10.2018 6484