Бесплатные SMS-оповещения - отправка сообщений в vk.com на PHP.
запостил 18.02.12Во многих случаях удобно в веб-приложении иметь возможность СМС оповещения о чем либо (новый заказ, падение важной системы, недостаток средств на балансе или просто напоминание).
СМС-оповещение имеет преимущество над всеми другими способами в том, что телефон всегда рядом.
Вконтакте перенаправляют личные сообщения на телефон если их не читать (при соответствующей опции в настройках), значит нам достаточно отправить себе сообщение на vk.com в ЛС.
Раньше я уже писал такой скрипт, но он парсил html код, а в дуровской социальной сети этот код меняется чуть ли не каждый день, в связи с новым функционалом, дизайном или просто для красоты. В этот раз я сделал скрипт на основе использования API, а это значит что скрипт должен прожить значительно дольше. Для нас очень важна в этом именно надежность.
Для начала затратим несколько минут на официальную документацию http://vk.com/developers.php и статью на хабре Алгоритм обращения программы к API VKontakte http://habrahabr.ru/blogs/vkontakte/131943/
Нам нужно создать приложение (Вам это делать не нужно, я уже это сделал, сможете спокойно пользоваться моим), затем дать для своего аккаунта разрешение на отправку сообщений через это приложение, в ответ на что нужно получить access_token, который даст возможность использовать API (в случае с отправкой сообщений, этот токен живет всего сутки). Само приложение представляет собой только запись в БД с кодом доступа, уникальным номером id (2810987) и названием.
Задумано что это делается через пользователем вручную через форму, поэтому нам лучше бы это автоматизировать. Также нужно автоматизировать разгадывание и ввод защитной капчи, на случай если Вконтакте это попросит, а именно так обязательно и произойдет. Для разгадывания изображений у нас есть сервис, где за нас это сделают мартышки - http://antigate.com/ , цена по 1$ за 1000 картинок (для наших целей этого хватит на долго), процент ошибок менее 10%. В скрипте предусмотрим, чтоб если обезьянка ошибется с картинкой, попросим разгадать новую и так до 5 раз, пока сообщение не отправится. Вот собственно скрипт:
Скачать его можно по ссылке:
Скачать скрипт.
СМС-оповещение имеет преимущество над всеми другими способами в том, что телефон всегда рядом.
Вконтакте перенаправляют личные сообщения на телефон если их не читать (при соответствующей опции в настройках), значит нам достаточно отправить себе сообщение на vk.com в ЛС.
Раньше я уже писал такой скрипт, но он парсил html код, а в дуровской социальной сети этот код меняется чуть ли не каждый день, в связи с новым функционалом, дизайном или просто для красоты. В этот раз я сделал скрипт на основе использования API, а это значит что скрипт должен прожить значительно дольше. Для нас очень важна в этом именно надежность.
Для начала затратим несколько минут на официальную документацию http://vk.com/developers.php и статью на хабре Алгоритм обращения программы к API VKontakte http://habrahabr.ru/blogs/vkontakte/131943/
Нам нужно создать приложение (Вам это делать не нужно, я уже это сделал, сможете спокойно пользоваться моим), затем дать для своего аккаунта разрешение на отправку сообщений через это приложение, в ответ на что нужно получить access_token, который даст возможность использовать API (в случае с отправкой сообщений, этот токен живет всего сутки). Само приложение представляет собой только запись в БД с кодом доступа, уникальным номером id (2810987) и названием.
Задумано что это делается через пользователем вручную через форму, поэтому нам лучше бы это автоматизировать. Также нужно автоматизировать разгадывание и ввод защитной капчи, на случай если Вконтакте это попросит, а именно так обязательно и произойдет. Для разгадывания изображений у нас есть сервис, где за нас это сделают мартышки - http://antigate.com/ , цена по 1$ за 1000 картинок (для наших целей этого хватит на долго), процент ошибок менее 10%. В скрипте предусмотрим, чтоб если обезьянка ошибется с картинкой, попросим разгадать новую и так до 5 раз, пока сообщение не отправится. Вот собственно скрипт:
| <?php /** * Скрипт для отправки сообщений на vk.com себе, через API * Автор: @link http://phpdreamer.ru * Дата: 18.02.2012 * Инструкция: * установить в каталог на сервере, поменять параметры $secretString, $email, * $password, $antigate и COOKIES на свои, сделать доступными для записи файлы * COOKIES и captcha.jpg, проследить что есть файл antigate.php * На аккаунте Вконтакте включить смс-оповещение о новых личных сообщениях. * Для отправки себе сообщения - откройте адрес скрипта с параметрами: * http://your_site/script_directory/index.php?message=Сообщение&secret=YourSecret * где "your_site" - это домен вашего сайта * "script_directory" - каталог со скриптом * "Сообщение" - это текст сообщения (его желательно предварительно обработать php функцией urlencode) * "YourSecret" - это строка, которую Вы указали в $secretString * Пример: * http://localhost/vkSms/index.php?message=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82,%20%D0%9D%D0%B8%D0%BA%D0%B8%D1%82%D0%B0!&secret=24rg6-6ve33f_f432 */ //проверочный параметр для защиты от вызова скрипта посторонними $secretString = '24rg6-6ve33f_f432'; //данные для авторизации на vk.com $email = 'm6754365@mail.ru'; $password = 'qwerasdf123456asdf'; //ключ API вашего аккаунта на сервисе antigate (для разрадывания картинок) $antigate = '21436b269aa16d2b5c93c657b6fff208'; //временный файл для записи COOKIES, доступный для записи, но не доступный для скачивания define('COOKIES', $_SERVER['DOCUMENT_ROOT'] . '/vkSms/cook.txt'); // Подключаем антигейт require 'antigate.php'; // Проверяем секретный параметр if(!isset($_GET['secret']) || urldecode($_GET['secret']) != $secretString) die('secretString Error'); // Получаем текст сообщения $message = isset($_GET['message']) ? urldecode($_GET['message']) : 'Сообщение из PHP'; // Функция для работы с cUrl function curl( $url, $post='', $headers=1) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, $headers); curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.4'); curl_setopt($ch, CURLOPT_ENCODING, 'utf-8'); curl_setopt($ch, CURLOPT_AUTOREFERER, 1); curl_setopt($ch, CURLOPT_TIMEOUT, 200); if ($post) { curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); } if (defined('COOKIES')) { curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIES); curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIES); } curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); $data = curl_exec($ch); curl_close($ch); return $data; } // Чистим кукисы file_put_contents(COOKIES, ''); // Идем за token-ом для API $page = curl('http://api.vk.com/oauth/authorize?client_id=2810987&redirect_uri=http://api.vk.com/blank.html&scope=messages&display=page&response_type=token'); if (preg_match_all('#<input type="hidden" name="([^"]+)" value="([^"]+)"#', $page, $hidden)) { // Найдена форма для авторизации, извекаем hidden поля $post = array( 'expire' => 0, 'email' => $email, 'pass' => $password, ); foreach ($hidden[1] as $i => $hk) $post[$hk] = $hidden[2][$i]; // Отправляем запрос для авторизации $page = curl('https://login.vk.com/?act=login&soft=1', $post); // Нажимаем на кнопку "Разрешить", если еще не нажали if (preg_match('|function approve[^l]+location.href = "([^"]+)|m', $page, $approve)) $page = curl($approve[1]); // Нам дали token if (preg_match('|Location: http://api.vkontakte.ru/blank.html#access_token=([^&]+)&expires_in=[0-9]+&user_id=([0-9]+)|', $page, $data)) { // Формируем url для отправки сообщения через API $url = 'https://api.vkontakte.ru/method/messages.send?uid=' . $data[2] . '&message=' . urlencode($message) . '&access_token=' . $data[1]; // Пробуем запрос на отправку сообщения $page = curl($url); // Попыток ввода капчи, на случай таковой $try = 5; while ( // Если с нас просят капчу preg_match('|"captcha_sid":"([0-9]+)"|', $page, $c) && preg_match('|"error_msg":"Captcha needed"|', $page) && --$try > 0 // И попытки ввода еще остались ) { // Скачиваем капчу file_put_contents( 'captcha.jpg', curl('http://api.vk.com/captcha.php?sid=' . $c[1], 0) ); // Разгадываем капчу и повторяем запрос $page = curl($url . '&captcha_sid=' . $c[1] . '&captcha_key=' . recognize('captcha.jpg', $antigate, 0)); }//end while } else echo 'Error on step 2';// Не найден token для Api } else echo 'Error on Step 1'; // Не найдено формы для авторизации // Чистим кукисы file_put_contents(COOKIES, ''); // Если отправка успешна if (preg_match('|{"response":[0-9]+}|', $page)) echo 'TRUE'; |
комментарии:
Оставить комментарий
(место для баннера 100р/мес.)


@mail.ua
Максим (23.02.12)
Интересная статья. Я давно хотел поизучать принцип отправления смс сообщений.
bamaxlab.ru
as (28.03.12)
Перестало работать (((