Скрипт отправки уведомлений (цикл по 100 уведомлений)

Темы только для ознакомления. Уроки по использованию старой версии ВКонтакте API и устаревших методов.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Скрипт отправки уведомлений (цикл по 100 уведомлений)

Сообщение Александр »

Скрипт отправки уведомлений (цикл по 100 уведомлений)

Скрипт отправляет уведомления пользователям приложения.
ID пользователей скрипт берет из базы, организованной по принципу как в этом уроке http://flapps.ru/forum/topic165.html

Для работы скрипта необходим хостинг с поддержкой curl.

settings.php

Код: Выделить всё

<?php// данные доступа к базе данных$db_host="localhost";$db_user="user";$db_password="pass";$db_name = "base";$table_name = "stat"; // данные приложения$app_id = '743131';$api_secret = 'qwertyuioasdfghjklzxcvbnm'; /*     http://flapps.ru/forum/ - форум о создании приложений */?>
send.php

Код: Выделить всё

<?php/*     http://flapps.ru/forum/ - форум о создании приложений */ set_time_limit(0); if (isset($_POST['send'])) { require('VkApi.class.php');include('settings.php'); mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());mysql_select_db($db_name) or die (mysql_error()); function get_url($query) {    $ch = curl_init();    curl_setopt($ch, CURLOPT_URL, $query);    curl_setopt($ch, CURLOPT_HEADER, 0);    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    curl_setopt($ch, CURLOPT_TIMEOUT, 10);    return curl_exec($ch);    curl_close($ch);} $message = $_POST['mess'];$sql = 'SELECT `uid` FROM `'.$table_name.'`';$res = mysql_query($sql);$all = mysql_num_rows($res); echo 'Всего пользователей: '.$all.'<br />';echo 'Сообщение: '.$message.'<br /><br />'; $all_send = 0;  if ($all > 100) {    $kolvo = ceil($all/100);    for ($i=0; $i<$kolvo; $i++) {        $uids = '';        $sql = 'SELECT `uid` FROM `'.$table_name.'` ORDER BY `id` LIMIT '.($i*100).','.(100);        $res = mysql_query($sql);        while($row = mysql_fetch_assoc($res)) {            $uids = $uids.$row[uid].',';        }        $uids = substr($uids, 0, -1);        // отправка //        $uids = split(',',$uids);        $api = new VkApiNode($app_id, $api_secret);        $query = $api->sendNotification($uids, $message);        get_url($query);                $all_send = $all_send + substr_count($uids, ',') + 1;        echo 'Идёт отправка... Отправлено: '.($all_send*100).'/'.$all.'<br />';        flush();        sleep(1);    }    echo '<br />Отправка завершена. Отправлено: '.($all_send*100).'/'.$all.'<br />';}else {    $uids = '';    while($row = mysql_fetch_assoc($res)) {        $uids = $uids.$row[uid].',';    }    $uids = substr($uids, 0, -1);    // отправка    $uids = split(',',$uids);    $api = new VkApiNode($app_id, $api_secret);    $query = $api->sendNotification($uids, $message);    get_url($query);        $all_send = $all_send + substr_count($uids, ',') + 1;    echo 'Отправлено: '.($all_send*100).'/'.$all.'<br />';}    }else {?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Отправка уведомлений</title></head> <body><h1>Отправка уведомлений</h1><form method="post">Текст уведомления (максимум 1024 символа):<br /><textarea name="mess" cols="50" rows="5"></textarea><br /><br /><button name="send" type="submit">Отправить</button></form></body></html><? } ?>
Файл VkApi.class.php находится в архиве с исходником.

Исходник http://flapps.ru/example/sendNotification.rar
Код в исходнике немного отличается и могут появляться проблемы при отправке уведомлений большому количеству пользователей. Смотрите исправленный код в этом сообщении выше.


Инструкция

Серверная часть
1. В файле settings.php измените:
$db_host - обычно можно оставить "localhost"
$db_user - имя пользователя БД
$db_password - пароль БД
$db_name - имя БД
$table_name - имя таблицы (если вы изменили его при создании таблицы в первом пункте, измените его и здесь)
$app_id - ID приложения
$api_secret - защищенный ключ (с вкладки "Платежи")

2. Загрузите файлы в любой каталог на сервере.

3. Для отправки уведомлений введите в браузере путь к файлу send.php на вашем сервере. Введите текст уведомления и нажмите "Отправить". Процесс отправки будет отображаться на странице.
Рекомендую сразу сменить имя этого файла, чтобы посторонние люди не могли отправлять уведомления.
Pusik
Сообщения: 20
Зарегистрирован: 11 сен 2010, 15:48

Re: Скрипт отправки уведомлений (цикл по 100 уведомлений)

Сообщение Pusik »

вопрос такой.
если у меня в таблице складываются id в таком порядке (vk_тут айди пользователя) то что изменить в скрипте?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Скрипт отправки уведомлений (цикл по 100 уведомлений)

Сообщение Александр »

Pusik
Делай чтобы перед строкой

Код: Выделить всё

$query = $api->sendNotification($uids, $message);
в переменной $uids было примерно так '1,2,3,4'
Если нужно удалить из id лишнее, то используй substr.
Аватара пользователя
BIOS
КИДАЛА!
Сообщения: 68
Зарегистрирован: 04 ноя 2009, 10:43

Re: Скрипт отправки уведомлений (цикл по 100 уведомлений)

Сообщение BIOS »

Огромнейшее спасибо, но вот БЯДа БЯДа, отправляется не в той кодировке, т.е. уже менял кодировку что utf-8 что cp1251 и нихрена хорошего, отправляет иерогливы)))
GOLdooF
МУЛЬТИАККАУНТ!
Сообщения: 33
Зарегистрирован: 09 авг 2010, 15:07

Re: Скрипт отправки уведомлений (цикл по 100 уведомлений)

Сообщение GOLdooF »

у меня почему то отправляется не 100 пользователям которые внесенны в базу а 100 пользователям которые идут после id администратора, тоесть если у администратора id 1 то уведомления отправляются(от id1 до id100(включительно)), в чём проблема не пойму, помогите разобраться)))) ;)
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Скрипт отправки уведомлений (цикл по 100 уведомлений)

Сообщение Александр »

BIOS
Использовал файлы из исходника? В них кодировка указана верно. UTF-8 без BOM.
При открытии страницы в браузере кодировка так же должна быть Юникод UTF-8.

GOLdooF
Не замечал такой проблемы.
Менял что-нибудь? Как определял каким id отправляются уведомления?
Аватара пользователя
BIOS
КИДАЛА!
Сообщения: 68
Зарегистрирован: 04 ноя 2009, 10:43

Re: Скрипт отправки уведомлений (цикл по 100 уведомлений)

Сообщение BIOS »

Александр писал(а):BIOS
Использовал файлы из исходника? В них кодировка указана верно. UTF-8 без BOM.
При открытии страницы в браузере кодировка так же должна быть Юникод UTF-8.
Да использовал исходник и так пробовал, все ровно отсылает иероглифы, зато теперь хоть всем отправка идет))) И на этом спасибо, буду отправлять на латинице(((
Аватара пользователя
Deniska
Сообщения: 653
Зарегистрирован: 30 окт 2009, 00:07

Re: Скрипт отправки уведомлений (цикл по 100 уведомлений)

Сообщение Deniska »

Что ьы отправить статус под приложением заменить только метод и параметр да?
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45

Re: Скрипт отправки уведомлений (цикл по 100 уведомлений)

Сообщение Александр »

Deniska
Отправить статус под приложением? Или изменить?
Если изменить, то сразу всем не получится. Метод secure.saveAppStatus не позволяет изменять статус более чем одному пользователю за раз. Нужно отправлять запрос с каждым id отдельно. Но нужно делать промежутки между запросами. Не знаю насколько большие.
fun
Сообщения: 8
Зарегистрирован: 14 янв 2011, 12:15

Re: Скрипт отправки уведомлений (цикл по 100 уведомлений)

Сообщение fun »

надо ставить задержку между запросами в 400 милисекунд
Ответить