SMS Уведомления + Логирование событий в Google Calendar на PHP

    Навеяло: Чудеса автоматизации или как отправляют SMS настоящие гики.
    Если люди делают такие изощрения — значит сильно надо.

    За пару часов был разработан класс для добавления в Google Calendar событий. А уже календарь гугла станет нам слать СМСки.

    Для использования нам нужно правильно настроить наш каллендарь(стоит завести для этого отдельный аккаунт):
    1. Установить часовой пояс календаря такойже как на сервере.
    2. Настроить СМС уведомления (Настройки -> Настройка для мобильных устройств)
    3. Настроить уведомление по умолчанию для календаря.(Настроки календаря — Уведомления)
    Ставим по умолчанию уведомить за 1 минуту до события по СМС. Можно добавить Дополнительно уведомление по почте.
    Всё. Календарь подготовлен.

    Для работы скрипта нам понядобится часть ZendFramework.
    Набор классов gdata: framework.zend.com/download/gdata.

    И код скрипта с классом и примером использования:

    <?
      require_once 'Zend/Loader.php';
      Zend_Loader::loadClass('Zend_Gdata');
      Zend_Loader::loadClass('Zend_Gdata_AuthSub');
      Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
      Zend_Loader::loadClass('Zend_Gdata_Calendar');

      class GCAlerter
      {
        public $gcCalendar;
        public $gcTimeCorrect;
      
        public function __construct($user, $pass, $tc)
        {
          $client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, "cl");
          $this->gcCalendar = new Zend_Gdata_Calendar($client);
          $this->gcTimeCorrect = $tc;
        }
      
        public function Alert($text)
        {
          $quickAddText = "$text ".date("h:i",time() + $this->gcTimeCorrect);
          $event = $this->gcCalendar->newEventEntry();
          $event->content = $this->gcCalendar->newContent($quickAddText);
          $event->quickAdd = $this->gcCalendar->newQuickAdd('true');
          $newEvent = $this->gcCalendar->insertEvent($event);
          return $newEvent->id->text;
        }
      }
      
      $user = "mycal@gmail.com";
      $pass = 'mypass';
      $timecorr = 2*60;// 2*60 = 2 min, 10*60 = 10min

      $gcAlerter = new GCAlerter($user, $pass, $timecorr);
      $gcAlerter->Alert("OMG I`m die!!!");
    ?>


    * This source code was highlighted with Source Code Highlighter
    .


    $timecorr — переменная корректировки времени.
    Время на сервере и время гугла могут различаться изза неверного времени сервера. Не всегда есть возможность это исправить.
    По сути — этим параметром подгоняем нужное время так, чтобы уведомление приходило не позднее, чем через минуту после события.

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 18

      –3
      И какие только извращения не выдумают русичи в поисках халявы.
        +2
        А есть метод проще за деньги?
          –5
          За деньги есть все. Ну или почти все.
            +1
            Подскажите если знаете, не будьте голословны
              0
              Напишите в ЛС, опишу подробнее как реализовать исходящие смс от сервера.
                +1
                Опишите, пожалуста, ваш вариант кратко для всех…
                  +1
                  Есть довольно много компаний, которые специализируются на исходящих смс. Они предоставляют гибкие API для рассылок. (Названия упомянать не буду, дабы обойтись без рекламы).

                  В среднем 1 смс стоит около рубля.
                    0
                    у, сорри
                    *упоминать
            0
            4.5. Вы признаете и соглашаетесь с тем, что, несмотря на то, что в настоящий момент Google не устанавливает ограничений в отношении максимально допустимого количества сообщений, которые вы можете отправлять или получать, используя Услуги, или в отношении объема хранимой информации, используемого для предоставления Услуг, Google вправе по собственному усмотрению в любое время устанавливать такие ограничения.

            из условий предоставления услуг гугла.
            +1
            Попробовал написать этот скрипт. Была ошибка, пока не вставил эту строчку: Zend_Loader::loadClass('Zend_Gdata_App_Util');

            Также пришлось изменить строчку $quickAddText = "$text ".date(«h:i»,time() + $this->gcTimeCorrect);
            на $quickAddText = "$text ".date(«H:i»,time()+120); иначе добавлялось на следующий день.

            Терь все работает.
              0
              поигрался с смсками, выяснил, что максимальная длина смс-58 символов, дальше- обрезает. Случайно выяснил, что если в строчку $gcAlerter->Alert(«OMG I`m die!!!») будут вставлены такие слова как Saturday, то дата события переместится на соответствующий день.
                0
                58 символов, это если вставлять текст в графу «what» )
                а если в ней написать, например, «1» (т.к. если ничего не написать, то в уведомлении придет "(No Subject)"), а текст сообщения поместить в «where», то максимальная длина возрастает уже примерно до 116 символов )
                  0
                  А через quick add добавить событие с указанием места можно?
                    0
                    For example, the string «Dinner at Joe's Diner on Thursday» would create an event with the title «Dinner», location «Joe's Diner», and date «Thursday».
                    Т.е. если написать «at» добавится место…
                0
                стоит добавить, что если в целях экономии памяти телефона вы отправляете смски транслитом, то в настройках аккаунта гугла нужно выбрать английский язык, так как иначе к тексту на латинице будет добавляться автоматический текст на русском, и никакой экономии не будет )
                  0
                  Вот у меня есть гораздо более приближенный к жизни usecase гугл-календаря, а не знаю, как его реализовать.
                  Надо мне на сайтике создавать события и заносить их в гугл-календарь. Это сделать можно, если создать отдельный аккаунт и в него эти события запихивать. Смс-ки и другие напоминания будут слаться по адресу и номеру телефона, указанному в этом аккаунте
                  А теперь непонятная часть: хочется, чтобы пользователь имел возможность подписаться на мой календарик и не мучился с настройкой уведомлений. К примеру: стоит у меня на событии А, что надо слать смс-ку за два часа до его начала. Но при импортировании календаря уведомления не копируются, а пропадают.
                  Есть идеи, как это обойти?
                    0
                    Сложновато выглядит этот Zend, но попробую на сайте применитиь.

                    Only users with full accounts can post comments. Log in, please.