Содержание
Человек - существо ленивое! Он придумал стиральную машину для стирки белья, кофеварку за заварки кофе, тостер для приготовления гренок! Все программисты обладают теми же качествами, поскольку являются прямыми потомками человека прямоходящего! В общем, сидел я на досуге, набирал SMS на телефоне чтобы поздравить знакомого человека с днем рождения: пару минут ушло на поиск поздравительного текста, пару минут на ввод SMS в телефоне... в общем, ушло целых 10-ть минут, пока туда-сюда! И это в XXI веке! Не порядок!
Пока я набирал SMS, мысленно я представил себе, сколько же у меня друзей и сколько раз в течении года придется набирать мне в телефоне поздравительный текст! В сумме получалось немало впустую потраченного времени, а ведь можно ведь еще просто забыть или проспать и не поздравить друга с замечательной датой! Собственно, на этом моменте и созрела мысль сделать скрипт автопоздравителя по SMS с днем рождения! Суть проста: вы грузите в программу список своих друзей, их дни рождения и телефоны, а программа уже сама отсылает всем поздравления с днем рождения (индивидуальные или по шаблону) в день их рождения. Разумеется, именно с вашего номера телефона!
Не надо здесь говорить, что есть социальные сети, мессенджеры и другие коммуникаторы, SMS, хоть и умирает на фоне всеобщей кибернетизации, но многие люди ими охотно пользуются.
Если такой скрипт востребован для меня, представьте себе, насколько он сможет автоматизировать такие же процедуры в маленьких и больших компаниях, желающих поздравлять своих сотрудников с днем рождения! Каких-либо аналогов такого скрипта я не нашел в интернете, кроме платных десктопных вариантов. Поразмыслив, что много людей скажем мне "спасибо", я принялся писать такой скрипт! Именно на PHP (будем исходить из того, что у всех типичных интернетчиков есть хостинг с поддержкой PHP), поскольку там всего пару строк кода!
Что потребуется?
Для написания и функционирования скрипта автопоздравителя с днем рождения по SMS нам потребуются:
- хостинг с поддержкой PHP и наличие cron на сервере
- сам скрипт автопоздравителя с ДР по SMS
- список получателей в формате: число, месяц, год рождения, имя, телефон, индивидуальное или шаблонное поздравление
- регистрация в сервисе для отправки SMS и положительный баланс
То есть, SMS платные? В нашем случае да, поскольку отправителем SMS будет именно Ваш номер телефона или, даже по желанию, буквенный отправитель (название вашей фирмы, компании), без рекламы, с гарантией доставки и т.д. И пусть этот факт вас не смущает, за автоматическую SMS вы заплатите не больше чем мобильному оператору. Смысл скрипта в автоматизации Ваших действий - вы один раз настраиваете его работу и скрипт бесперебойно работает весь год, автоматически поздравляя ваших друзей с днем рождения от вашего имени!
Что будет реализовано?
Для нормального функционирования скрипта, нам потребуется реализовать такие пункты:
- Административная часть скрипта автопоздравителя по SMS, с возможностью редактирования получателей, сохранением настроек скрипта и т.д.;
- Ежедневная проверка списка (по cron) получателей. Если есть именинники, скрипт отправляет им SMS с поздравлением посредством шлюза отправки SMS;
- Возможность отправки индивидуального поздравления или по шаблону (если индивидуальное поздравление отсутствует). В шаблоне возможно использование таких переменных как имя и возраст (высчитывается от года рождения);
- Отладка скрипта (тест работы скрипта применительно к сегодняшним именинникам);
- Извещение администратора по e-mail об отправленных поздравлениях (кому и что было отправлено);
Пишем скрипт...
Создадим файл index.php в котором будет реализована вся администраторская - от авторизации, до внесения правок в настройки работы скрипта:
<?php include('./settings.dat'); session_start(); $hide=$_POST['hidden']; $pass=$_POST['pass']; $cat=$_GET['cat']; $login=$_POST['login']; $type=$_POST['type']; $text=$_POST['text']; if (isset($_REQUEST['log_out']) or !isset($_SESSION['aa']))$_SESSION['aa']=0; if ($_SESSION['aa']==0){ if ($hide!='' and $pass==$password_admin and $login==$login_admin){$_SESSION['aa']=1; $hide=null;} else{ $content='<form action="" method=post> <input value="goaa" type="hidden" name="hidden"/> Логин:  <input type="text" name="login" value="" /><br /> Пароль:<input type="password" name="pass" value="" /><br /><br /> <input value="Войти" type="submit" id="bb_blue"/> </form>'; } } if ($_SESSION['aa']==1) { $content.='Адрес скрипта для запуска cron - 1 раз в сутки: <b>http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/work.php?s='.md5($login_admin).'</b> <a href="http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']).'/work.php?s='.md5($login_admin+$password_admin).'" title="Нажмите, чтобы увидеть, кто из получателей получит SMS сегодня" target="_blank">(тест)</a> <br><br><form action="./?log_out" method=post> <a href="./" id="bb_gray">Получатели</a> <a href="./?cat=pat" id="bb_gray">Шаблон поздравления</a> <a href="./?cat=about" id="bb_gray">Настройки</a> <input value="log_out" type="hidden" name="log_out"/> <input type=submit id="bb_gray" value="Выход" style="width:auto"/> </form> <br><br>'; switch($cat) { case "pat": if($hide!=''){ file_put_contents('./patterns.dat',$text); $content.='<h1>Шаблон обновлен!</h1>'; } else { $content.=' Шаблон для поздравления (если нет индивидуального), можно подставлять переменные: <br /><b>$NAME$</b> - имя получателя и <b>$Y$</b> текущий возраст получателя<br /><br /> <form action="" method=post> <input value="hidden" type="hidden" name="hidden"/> <textarea name="text" style="width:100%" rows=15>'.file_get_contents('./patterns.dat').'</textarea> <input type=submit id="bb_gray" value="Сохранить" style="width:auto"/> </form>';} break; case "about": if($hide!=''){ file_put_contents('./settings.dat',$text); $content.='<h1>Настройки сохранены!</h1>'; } else{ $content.=' Настройки Вашего скрипта: доступ в админку, адрес для отчетов и ключ от сервиса seozona.sms.ru <br><a target="_blank" href="http://seozona.sms.ru">Зарегистрируйтесь</a>, пополните баланс и впишите здесь в <b>$smskey</b> api_id из кабинета сервиса из раздела <b>ПРОГРАММИСТАМ</b><br> <br /><br /> <form action="" method=post> <input value="hidden" type="hidden" name="hidden"/> <textarea name="text" style="width:100%" rows=15>'.file_get_contents('./settings.dat').'</textarea> <input type=submit id="bb_gray" value="Сохранить" style="width:auto"/> </form>';} break; default: if($hide!=''){ file_put_contents('./list.dat',$text); $content.='<h1>База получателей обновлена!</h1>'; } else{ $content.='Получатели SMS в формате: <b>число|месяц|год рождения|Имя|телефон|Поздравление|</b><br> Если поздравление (индивидуальное) отсутствует, тогда берется поздравление из шаблона <br /><br /><form action="" method=post> <input value="hidden" type="hidden" name="hidden"/> <textarea name="text" style="width:100%" rows=15>'.file_get_contents('./list.dat').'</textarea> <input type=submit id="bb_gray" value="Сохранить" style="width:auto"/> </form>';} }}?> <!DOCTYPE html> <html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Панель администрирования</title> <style>body {background-position : center center;background-repeat : no-repeat;background : white;width : 1000px;margin : 0 auto;font : 13px 'trebuchet MS', Arial, Helvetica;color : #2d6176;}h1, p {text-align : center;text-shadow : 0 1px 0 #111;}.block {overflow : hidden;background : #c1c0c0;border : #e0e0e0 solid 1px;border-radius : 5px;padding : 9px;}#button_blue, #bb_blue {text-decoration : none;cursor : pointer;background : #528cd2;color : #fff;text-shadow : 0 1px 0 #38669a;font-weight : bold;border : #4373a9 solid 1px;text-align : center;padding : 9px;border-radius : 4px;}#button_gray, #bb_gray {text-decoration : none;cursor : pointer;margin-top : 6px;color : #557aa1;text-shadow : 0 1px 0 #fff;font-weight : bold;border : #d0d0d0 solid 1px;border-top : 1px solid #c5c5c5 !important ;text-align : center;padding : 9px;border-radius : 4px;background: #f3f3f3;}#button_blue:active {background : #5891d5;}#button_gray:active {background : #edecec;}#bb_blue:active {background : #5891d5;}#bb_gray:active {background : #edecec;}#button_hr, #button_hr_append {text-decoration : none;border-top : 1px solid #dedede;border-bottom : 1px solid #f4f4f4;margin-top : 16px;}#button_hr_append {margin-top : 6px !important ;}</style> </head> <body> <center> <h1>Панель администрирования <br />Автопоздравителя по SMS</h1> <br/><br/><br/><br/> <div class="block"> <?php echo $content;?> </div> <br><br><br> <a style="text-decoration: none;" href="https://seo-zona.ru" target="_blank"><br />Автопоздравитель по SMS © SEO-ZONA.RU</a> </center></body></html>
Также нам потребуется создать файл work.php исполняющий все наши команды:
<?php include('./settings.dat'); if ($_GET['s']==md5($login_admin)) { preg_match_all('/([0-9]+)\|([0-9]+)\|([0-9]+)\|(.*?)\|(.*?)\|(.*?)\|/s',file_get_contents('./list.dat'), $ids); $patterns = file_get_contents('./patterns.dat'); $c=count($ids[0])-1; for($i=0; $i<=$c; $i++) if (date('d')==$ids[1][$i] and date('m')==$ids[2][$i]) { if ($ids[6][$i]=='') { $pattern=$patterns; $pattern=str_replace('$NAME$',$ids[4][$i],$pattern); $pattern=str_replace('$Y$',date('Y')-$ids[3][$i],$pattern); } else { $pattern=$ids[6][$i]; } $to= $ids[5][$i]; $message = "Отправили SMS поздравление на $to следующего содержания: $pattern!"; $subject = "Поздравили с ДР, $to!"; $headers = "Content-type: text/html; charset=utf-8 \r\n"; $headers .= 'From: '.$mail; mail($mail, $subject, $message, $headers); $sms = str_replace(' ','+', $pattern); $url2="http://sms.ru/sms/send?api_id=$smskey&to=$to&text=$sms"; $body=file_get_contents($url2); } } ///********режим отладки******************** if ($_GET['s']==md5($login_admin+$password_admin)) { preg_match_all('/([0-9]+)\|([0-9]+)\|([0-9]+)\|(.*?)\|(.*?)\|(.*?)\|/s',file_get_contents('./list.dat'), $ids); $patterns = file_get_contents('./patterns.dat'); $c=count($ids[0])-1; for($i=0; $i<=$c; $i++) if (date('d')==$ids[1][$i] and date('m')==$ids[2][$i]) { if ($ids[6][$i]=='') { $pattern=$patterns; $pattern=str_replace('$NAME$',$ids[4][$i],$pattern); $pattern=str_replace('$Y$',date('Y')-$ids[3][$i],$pattern); } else { $pattern=$ids[6][$i]; } $to= $ids[5][$i]; print "Кому отправляется - $to<br>"; print "Что будет отправлено - $pattern<br>"; print "<hr><br><br>"; $message = "Отправили SMS поздравление на $to следующего содержания: $pattern!"; $subject = "Поздравили с ДР, $to!"; $headers = "Content-type: text/html; charset=utf-8 \r\n"; $headers .= 'From: '.$mail; mail($mail, $subject, $message, $headers); $sms = str_replace(' ','+', $pattern); $url2="http://sms.ru/sms/send?api_id=$smskey&to=$to&text=$sms"; $body=file_get_contents($url2); } }?>
Файлы настроек скрипта
И еще нам потребуется создать 3 файла с настройками. Создадим файл list.dat (списки именинников) и заполним его по образцу:
14|06|1981|Вадик|380987898767|Вадик, всего тебе хорошего в твой ДР| 15|07|1976|Владислав|79088987671|| 17|08|1976|Ирина|79088987123||
Создадим файл patterns.dat (общий шаблон SMS поздравления) и заполним его по образцу:
$NAME$, искренне желаю тебе счастья и поздравляю с $Y$-летием! Прими мои поздравления!
Создадим файл settings.dat (файл настроек скрипта) и заполним его по образцу:
<?php $login_admin='admin'; //Логин администратора $password_admin='password'; //Пароль $mail="[email protected]"; //E-mail администратора для отчета об отправленных поздравлениях $smskey = "be04a179-8279-c4e4-45cd-5c4d638038cf01"; //Ваш api_id сервиса http://seozona.sms.ru ?>
Также есть смысл создать в папке с скриптом файл .htaccess с содержимым (для закрытия внешнего доступа к файлам настроек):
<Files ~ "\.dat$"> Order allow,deny Deny from all </Files>
Как ни странно, но на этом все! Давайте заглянем внутрь скрипта и поясним некоторые моменты.
Работа скрипта
Запустив скрипт (index.php), мы увидим панель авторизации, логин и пароль мы прописали в файле settings.dat:
Авторизовавшись, мы попадаем на вкладку "ПОЛУЧАТЕЛИ". Обратите внимание на формат списка получателей SMS, он имеет следующий обязательный вид:
число|месяц|год рождения|Имя|телефон|Индивидуальный текст поздравления|
Если поздравление (индивидуальное) отсутствует (как у последних двух в списке), тогда берется поздравление из шаблона, смотрим вкладку "ШАБЛОН ПОЗДРАВЛЕНИЯ":
Редактируя шаблон общего SMS поздравления, мы можем использовать в тексте переменные: $NAME$ - имя получателя (подставится имя получателя из списка) и $Y$ - текущий возраст получателя (скрипт сам подставит число лет для поздравления).
И последняя важная вкладка - "НАСТРОЙКИ":
Здесь мы должны сменить:
- логин и пароль (для авторизации в скрипте)
- адрес электронной почты (куда будут отправляться отчеты об отправленных SMS)
- aip_id (ключ) SMS-шлюза
Что такое ключ SMS-шлюза и где его взять?
В качестве отправителя SMS мы будем использовать шлюз сервиса по отправке SMS. Зарегистрируйтесь, пополните баланс (необходим на оплату отправляемых SMS) и в разделе ПРОГРАММИСТАМ вы найдете этот ключ:
После внесения всех необходимых правок, не забудьте сохранять все настройки, а также перед запуском - протестировать работу скрипта.
Проверка работы скрипта в тестовом режиме
Чтобы удостовериться, что все у вас работает должным образом, необходимо протестировать работу скрипта. Для этого, создайте в списке получателя с сегодняшним днем рождения и вашим номером телефона. Сохраните получателя. Теперь в правом верхнем углу нажмите на ссылку "ТЕСТ". Если вы все настроили правильно, то:
- В окне браузера откроется список с получателем (будет указан телефон и текст поздравления)
- На адрес электронной почты администратора придет извещение об отправленной SMS
- На ваш номер телефона придет само поздравление
Если у вас все получилось с первого раза, вы настоящий программист!
Автозапуск скрипта
Мои поздравления, если тесты у вас оказались удовлетворительными! Это значит, что скрипт настроен должным образом и будет работать как часы. Для того, чтобы он работал как часы, мы должны его запустить. Для этого на сервере есть команда cron, в ней вы указываете, какой скрипт и с какой периодичностью надо запускать.
В нашем случае скрипт надо запускать 1 раз в сутки, обычно днем. Адрес скрипта который вам надо запускать, вы увидите в админке нашего автопоздравителя, а если возникнут трудности с заданием времени его запуска, можете обратиться за помощью к поддержке своего хостинга (для них это мелочь и вам не откажут).
Еще раз хочу обратить внимание на такой параметр, как время запуска скрипта в cron - оно должно быть 1 раз в сутки в одно и тоже время! Если допустить в нем ошибку, автопоздравитель будет работать неправильно: либо поздравлять избранных, либо вообще не поздравлять, либо поздравлять по нескольку раз в день и т.д.
Собственно, на этом всем! Кто не хочет собственноручно собирать скрипт, может скачать его целиком. Напомню, мы только что написали автопоздравитель по SMS с днем рождения для своих друзей и знакомых (собственно, он может поздравлять неограниченное число друзей, сотрудников и работников фирм и предприятий). Скрипт на PHP, закачал на хостинг, настроил и забыл... время от времени пополняя список новыми получателями, которых обязательно нужно поздравить с ДР и, время от времени, не забывая пополнять баланс SMS шлюза!
Ну у как сделать скрипт с бесплатной отправкой смс? я думаю всем это будет интересно.
На скриншоте настроек API ключ не замазал.
Ключ фиктивный, для наглядности!