- PVSM.RU - https://www.pvsm.ru -
Итак, не могу сказать новая это идея или уже у кого-то был подобный подход, но все-таки мыслями и неким опытом хочется поделиться(думаю, будет интересно тем, кто еще ни разу не использовал данный метод).
Недавно сделал свое первое приложение для VK; исключительно для тренировки своих навыков в JavaScript, который изучаю всего несколько месяцев, да и не очень усердно. Разумеется, после нескольких недель захотелось оповестить своих 500 пользователей.
Конечный вариант работы с оформлением. В статье приводятся лишь малые части кода для наглядности… Пока еще не выложил на GitHub.
1. Сначала немного о самом методе:
Открываем документацию VK API, находим secure.sendNotification и видим ряд ограничений:
Не следует увлекаться со скоростью рассылки, так как возникает ошибка «Too many requests per second». Вроде бы не больше 10 запросов в секунду к VK API. Касается всех методов, конечно.
Часто возникает вопрос: где брать пользователей, установивших приложение. Такого метода не существует — придется «строить» свою базу данных пользователей приложения.
2. Подготовим всё необходимое:
Для наглядности запишем часть id пользователей в переменную(естественно, считывание информации с файлов лучше организовать более оптимальными методами):
var uids =[103159854,104090146,104690277,108144066,109310141,109715505,110030591,110395187,121473119,125470566,125872556,127818715,133862608,133935838,134311669,134806068,134939955,13504842,135367864,137027949,137261451,137677177,138285240,140106401,142391040,144399513,144645435,146632210]
$id_user= (int) $_REQUEST['id'];
require 'vkapi.class.php';
$api_id = 1234567; // id приложения
$secret_key = 'XMZЕL15fAyАYZiВUNx42'; // защищенный ключ
$VK = new vkapi($api_id, $secret_key);
$resp = $VK->api('secure.sendNotification', array('uids'=>$id_user,'message'=>$_REQUEST['msg'])); // в примере передаем по одному id, однако лучше по 100 - это должны быть перечисленные через запятую идентификаторы пользователей, которым отправляется уведомление
3. База готова, на сервере порядок: пора рассылать уведомления:
Прежде чем начнем рассылку нужно объявить функцию отправки уведомлений(для быстроты используем JQuery, но нативный код лучше, например, перебрать элементы массива можно гораздо быстрее циклом, чем юзать .each() в JQuery):
var done = {
sendNotification: function(user, message) {
$.post("api.php?id=" + user + '&msg=' + message + '&key_new=' + appVK.key, function(response) { // передаем параметры на сервер. Рекомендую на сервере проверять, не пустая ли строка с сообщением или id и т.д. appVK.key - в моем приложение это ключ для защиты в AJAX
if(response) { alert('Отправлено') // secure.sendNotification возвращает перечисленные через запятую ID пользователей, которым было успешно отправлено уведомление. Целесообразно на сервере определить функцию, которая бы возвращала значения true или false для регистрации не успешно отправленных уведомлений.
}else { alert('Ошибка!'); }
});
}
};
Замечание: если будете использовать объекты как ассоциативные массивы — нужно применить JSON.stringify() для отправки данных на сервер, чтоб там успешно преобразовать их.
Что ж, теперь заключительный этап:
// наши пользователи
var uids =[103159854,104090146,104690277,108144066,109310141,109715505,110030591,110395187,121473119,125470566,125872556,127818715,133862608,133935838,134311669,134806068,134939955,13504842,135367864,137027949,137261451,137677177,138285240,140106401,142391040,144399513,144645435,146632210]
var done = {
//предыдущая функция для отправки уведомлений
sendNotification: function(user, message) {
$.post("api.php?id=" + user + '&msg=' + message + '&key_new=' + appVK.key, function(response) {
if(response) { alert('Отправлено') }else { alert('Ошибка!'); }
});
},
sendToAll: function() {
var msg = $('#id_notify_all').val(); // сохраняем сообщение в переменную
var counter = uids.length; // количество пользователей в массиве
var result = 400 / counter; // используется для строки состояния
var g = 0;
var i = 0;
var percent = 0;
var j = 100 / counter;
var send = function() {
i += 1; // id пользователя в данном случае начнем в первого, можно сделать смещения
percent += j;
this.sendNotification(uids[i - 1], msg);
// здесь много кода для строки состояния
if( i === counter ) { // сравниваем количество отправленных уведомлений с заявленным количеством.
clearInterval(executing); // если равенство выполнилось прекращаем отправку.
alert('Отправка успешно завершена!');}
};
var executing = setInterval(send, 500); // отправляем каждые полсекунды. Можно установить другой интервал, но помним не больше 10 запросов в секунду
}
Следует заметить, что уведомление можно разослать и с помощью циклов на сервере, возможно, это будет быстрее. Но такой способ мне кажется симпатичнее.
Спасибо за внимание!
Автор: zhak55
Источник [3]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/json/34703
Ссылки в тексте:
[1] по определенной схеме: http://vk.com/dev/secure_how_to
[2] GitHub: https://github.com/LEMing/PHP_CLASS_FOR_VKAPI
[3] Источник: http://habrahabr.ru/post/180267/
Нажмите здесь для печати.