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

Сбор количества комментариев с виджета 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
4498

Комментарии

, чтобы добавить комментарий.

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

Описание мета-тегов
В статье представлены все самые встречающеюся мета-теги с примерами и пояснениями их использования.
26778
+4
Использование API Яндекс Диска на PHP
Можно найти множество применений Яндекс Диска на своем сайте, например, хранение бекапов и отчетов, обновление прайсов,...
55926
+20
Бот Телеграм на PHP
Примеры как зарегистрировать бота в Телеграм, описание и взаимодействие с основными методами API.
141306
+44
Постраничный вывод и базы данных
В SQL запросах, для ограничения количества строк в результате используется инструкция LIMIT, например следующий вернёт...
17104
0
Формирование файла sitemap.xml
Пример создания файла карты сайта (sitemap.xml) на PHP. Интеграция его на сайт и подключение его в robots.txt
24081
+3
Пример парсинга html-страницы на phpQuery
phpQuery – это удобный HTML парсер взявший за основу селекторы, фильтры и методы jQuery, которые позволяют...
62804
+26