<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; JScript: Работаем с Google Calendar API (отправка sms-напоминаний)]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=6538</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=6538&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «JScript: Работаем с Google Calendar API (отправка sms-напоминаний)».]]></description>
		<lastBuildDate>Wed, 14 Dec 2011 13:16:21 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: JScript: Работаем с Google Calendar API (отправка sms-напоминаний)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54609#p54609</link>
			<description><![CDATA[<div class="quotebox"><cite>is5157 пишет:</cite><blockquote><p>... а может даже и больше если все равно не приходит.</p></blockquote></div><p>is5157,</p><p>время самого мероприятия я сразу увеличил - плюс 5 минут от текущего.<br />Предупреждение оставил как было - за 1 минуту до начала.</p><p>Причину глюка пока не понял.<br />Как я и говорил - сразу после работы скрипта задание в Google появляется, но СМС не отсылается.<br />Если я вручную в задании изменю время мероприятия - неважно плюс или минус 1 минута - и сделаю &quot;сохранить&quot;, то все работает.</p><p>Видимо глюк уникален - если разберусь в чем причина сообщу.</p>]]></description>
			<author><![CDATA[null@example.com (Slav)]]></author>
			<pubDate>Wed, 14 Dec 2011 13:16:21 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54609#p54609</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Работаем с Google Calendar API (отправка sms-напоминаний)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54546#p54546</link>
			<description><![CDATA[<div class="quotebox"><cite>Slav пишет:</cite><blockquote><div class="quotebox"><cite>is5157 пишет:</cite><blockquote><p>Данный скрипт позволяет отправлять sms-напоминания через Google Calendar API.<br />...</p></blockquote></div><p>is5157,</p><p>отличный пример работы с Google Calendar.<br />Спасибо.</p><p>Но у меня работает не полностью.<br />1. Запускаю скрипт, смотрю в Google Calendar - все нормально, запланированное событие появилось.<br />Смотрю в его свойства - есть &quot;Напоминание СМС 1 мин.&quot;<br />2. Никакого напоминания на СМС не приходит. Пробовал вручную добавить оповещение на экран и по почте - срабатывает только оповещение на экран.<br />3. Если в свойствах события изменить время мероприятия - хотя бы на минуту, неважно плюс или минус - и сделать СОХРАНИТЬ, то все отлично работает. СМС приходит.<br />Если добавить оповещение по почте - то и оно тоже срабатывает.<br />4. Просто СОХРАНИТЬ&nbsp; - без изменения времени мероприятия - эффекта не дает.</p><p>Т.е. Ваш скрипт все формирует вроде правильно, но оповещение на СМС и по почте не срабатывает - во всяком случае у меня.<br />Если вручную изменить время мероприятия в уже сформированной записи календаря - все начинает работать.</p><p>Тестировал на Win XP SP3 + IE 8.</p></blockquote></div><p>Проверял на своем компе и у знакомого, sms-ки приходят (хотя 2 компа мало для полноценной проверки). Вы написали: &quot;Если в свойствах события изменить время мероприятия - хотя бы на минуту, неважно плюс или минус - и сделать СОХРАНИТЬ, то все отлично работает. СМС приходит&quot;, возможно,&nbsp; это связано с тем, что событие наступает до того как срабатывает напоминание о событии и google решает что нет смысла слать sms-напоминание, раз уж событие наступило. Для решения данной проблемы можно попробовать установить время события позже чем установлено сейчас в скрипте. Найти строчку &quot;var time = getStrDate(new Date().getTime() + 60000);&quot; и изменить на &quot;var time = getStrDate(new Date().getTime() + 120000);&quot;, а может даже и больше если все равно не приходит.</p>]]></description>
			<author><![CDATA[null@example.com (is5157)]]></author>
			<pubDate>Tue, 13 Dec 2011 07:43:04 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54546#p54546</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Работаем с Google Calendar API (отправка sms-напоминаний)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54514#p54514</link>
			<description><![CDATA[<div class="quotebox"><cite>is5157 пишет:</cite><blockquote><p>Данный скрипт позволяет отправлять sms-напоминания через Google Calendar API.<br />...</p></blockquote></div><p>is5157,</p><p>отличный пример работы с Google Calendar.<br />Спасибо.</p><p>Но у меня работает не полностью.<br />1. Запускаю скрипт, смотрю в Google Calendar - все нормально, запланированное событие появилось.<br />Смотрю в его свойства - есть &quot;Напоминание СМС 1 мин.&quot;<br />2. Никакого напоминания на СМС не приходит. Пробовал вручную добавить оповещение на экран и по почте - срабатывает только оповещение на экран.<br />3. Если в свойствах события изменить время мероприятия - хотя бы на минуту, неважно плюс или минус - и сделать СОХРАНИТЬ, то все отлично работает. СМС приходит.<br />Если добавить оповещение по почте - то и оно тоже срабатывает.<br />4. Просто СОХРАНИТЬ&nbsp; - без изменения времени мероприятия - эффекта не дает.</p><p>Т.е. Ваш скрипт все формирует вроде правильно, но оповещение на СМС и по почте не срабатывает - во всяком случае у меня.<br />Если вручную изменить время мероприятия в уже сформированной записи календаря - все начинает работать.</p><p>Тестировал на Win XP SP3 + IE 8.</p>]]></description>
			<author><![CDATA[null@example.com (Slav)]]></author>
			<pubDate>Mon, 12 Dec 2011 12:33:46 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54514#p54514</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Работаем с Google Calendar API (отправка sms-напоминаний)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54430#p54430</link>
			<description><![CDATA[<div class="quotebox"><cite>is5157 пишет:</cite><blockquote><p>Добавляем к URL случайную последовательность цифр для предотвращения кэширования запросов</p></blockquote></div><p>Во избежание кэширования следует использовать WinHttpRequest.</p>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Sat, 10 Dec 2011 14:18:12 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54430#p54430</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Работаем с Google Calendar API (отправка sms-напоминаний)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54426#p54426</link>
			<description><![CDATA[<p>Как код будет полностью работоспособен, то обязательно опубликуйте в Коллекции :-)</p>]]></description>
			<author><![CDATA[null@example.com (JSmаn)]]></author>
			<pubDate>Sat, 10 Dec 2011 14:03:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54426#p54426</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Работаем с Google Calendar API (отправка sms-напоминаний)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54411#p54411</link>
			<description><![CDATA[<div class="quotebox"><cite>Rumata пишет:</cite><blockquote><div class="quotebox"><cite>is5157 пишет:</cite><blockquote><p>Добавляем к URL случайную последовательность цифр для предотвращения кэширования запросов</p></blockquote></div><p>Лучше использовать посылку дополнительного заголовка<br /></p><div class="codebox"><pre><code>reqObj.setRequestHeader(&#039;If-Modified-Since&#039;, (new Date(0)).toUTCString());</code></pre></div></blockquote></div><p>Не спорю )</p>]]></description>
			<author><![CDATA[null@example.com (is5157)]]></author>
			<pubDate>Fri, 09 Dec 2011 17:12:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54411#p54411</guid>
		</item>
		<item>
			<title><![CDATA[Re: JScript: Работаем с Google Calendar API (отправка sms-напоминаний)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54407#p54407</link>
			<description><![CDATA[<div class="quotebox"><cite>is5157 пишет:</cite><blockquote><p>Добавляем к URL случайную последовательность цифр для предотвращения кэширования запросов</p></blockquote></div><p>Лучше использовать посылку дополнительного заголовка<br /></p><div class="codebox"><pre><code>reqObj.setRequestHeader(&#039;If-Modified-Since&#039;, (new Date(0)).toUTCString());</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (Rumata)]]></author>
			<pubDate>Fri, 09 Dec 2011 14:42:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54407#p54407</guid>
		</item>
		<item>
			<title><![CDATA[JScript: Работаем с Google Calendar API (отправка sms-напоминаний)]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=54404#p54404</link>
			<description><![CDATA[<p>Данный скрипт позволяет отправлять sms-напоминания через Google Calendar API.</p><p>Для того чтобы данный пример заработал нужно:</p><p>1. Создать аккаунт гугл<br />2. Настроить его (установить sms-напоминание о событии, указать номер мобильного телефона (свой) на который будут приходить sms-уведомления)<br />3. В коде скрипта найти и заменить %your_google_email%, %your_google_password% на значения вашего аккаунта</p><p>Ограничения:</p><p>1. Лимит на кол-во sms-ок (у меня не более 50 за раз, потом какое-то время вообще не отправляет)</p><br /><div class="codebox"><pre><code>/* Google Calendar. Добавление SMS-напоминаний */



/*

    Описание:
    
            Посылает запрос на удаленный сервер
    
    Параметры:
    
            methodType  - Тип запроса [POST | GET]
            
            sourceURL   - URL сервера
            
            requestType - Режим работы с сервером [true=асинхронный | false=синхронный]
            
            sendValue   - Тело запроса
            
            reqTime     - Время ожидания ответа (в миллисекундах)
            
            headers     - Заголовки запроса
            
            okcode      - Код ответа сервера, который считается успешным
    
*/


function sendRequestToServer(methodType, sourceURL, requestType, sendValue, reqTime, headers, okcode)
{
    
    try
    {
        
        //Определение доступной версии системного объекта &quot;XMLHttpRequest&quot;
        //****************************************************************************
        
        var reqObj;
        
        var progIDs = [
                                                                    
                                                                    &quot;Msxml2.XMLHTTP.6.0&quot;,
                                                                    
                                                                    &quot;Msxml2.XMLHTTP.3.0&quot;,
                                                                    
                                                                    &quot;Microsoft.XMLHTTP&quot;
                                                                    
                                                                    ];
        
        
        
        for (var i = 0; i &lt; progIDs.length; i++)
        {
            
            try
            {
                
                reqObj = new ActiveXObject(progIDs[i]);
                
                break;
                
            }
            catch (e)
            {
            }
            
        }
        
        //****************************************************************************
        
        
        //Открываем соединение с удаленным хостом
        
        reqObj.open(methodType, sourceURL, requestType);
        
        
        //Устанавливаем параметры в зависимости от типа запроса
        
        if (methodType == &quot;POST&quot;)
        {
            
            var hDefault = [
                                                                            
                                                                            [&quot;Content-type&quot;,   &quot;application/x-www-form-urlencoded&quot;],
                                                                            
                                                                            [&quot;Content-length&quot;, sendValue.length],
                                                                            
                                                                            [&quot;Connection&quot;,     &quot;close&quot;]
                                                                            
                                                                        ];
            
            
            if (headers)
            {
                headers = headers.concat(hDefault);
            }
            else
            {
                headers = hDefault;
            }
            
        }
        else
        {
            
            //Добавляем к URL случайную последовательность цифр для предотвращения кэширования запросов
            
            sourceURL += &quot;&amp;id=&quot; + retRndNumber(1, 10000000);
            
        }
        
        
        //Устанавливаем заголовки запроса (если есть)
        
        for (var i = 0; i &lt; headers.length; i++)
        {
            reqObj.setRequestHeader(headers[i][0], headers[i][1]);
        }
        
        
        //Посылаем тело запроса
        
        reqObj.send(sendValue);
        
        
        
        /* Получаем ответ от сервера */
        
        
        var timer = 100;
        
        //Если запрос синхронный или время ожидания равно нулю, то отменить задержку выполнения
        
        if (!requestType || !reqTime) {timer = 0;}
        
        
        //Ожидаем ответ от сервера
        
        while (true)
        {
            
            if (reqObj.readyState == 4)
            {
                
                if (reqObj.status != okcode) {WScript.Echo(&quot;Wrong status: &quot; + reqObj.status); return false;}
                
                //Данные успешно получены с сервера, разбираем полученный ответ
            
                return reqObj.responseText;
                
            }
            
            
            if (reqTime &lt;= 0)
            {
                
                //Превышен интервал ожидания, соединение было сброшено
                
                WScript.Echo(&quot;Превышен интервал ожидания, соединение было сброшено&quot;);
                
                //Прерываем запрос
                
                reqObj.abort();
                
                //Выходим из цикла
                
                return false;
                
            }
            
            
            //Уменьшаем значение времени ожидания на величину &quot;timer&quot;
            
            reqTime -= timer;
            
            //Приостанавливаем выполнение скрипта на время = timer
            
            WScript.Sleep(timer);
            
        }
        
    }
    catch (e)
    {
        
        //Сообщаем пользователю о неудачной попытке запроса
        
        WScript.Echo(&quot;Не удалось отправить запрос&quot;);
        
    }
    
}





//Возвращает случайное число

function retRndNumber(nMin, nMax)
{
    return Math.floor(nMin + (nMax - nMin) * Math.random());
}





function getStrDate(msec)
{
    
    var dateObj = new Date(msec);
    
    var year    = dateObj.getFullYear();
    
    var month   = dateObj.getMonth() + 1;
    
    
    if (month &lt; 10) {month = &quot;0&quot; + month;}
    
    var day     = dateObj.getDate();
    
    if (day &lt; 10) {day = &quot;0&quot; + day;}
    
    
    var hour    = dateObj.getHours();
    
    if (hour &lt; 10) {hour = &quot;0&quot; + hour;}
    
    
    var minute  = dateObj.getMinutes();
    
    if (minute &lt; 10) {minute = &quot;0&quot; + minute;}
    
    
    var second  = dateObj.getSeconds();
    
    if (second &lt; 10) {second = &quot;0&quot; + second;}
    
    
    
    return (year + &quot;-&quot; + month + &quot;-&quot; + day + &quot;T&quot; + hour + &quot;:&quot; + minute + &quot;:&quot; + second);
    
}





try
{
    
    //Авторизация
    //************************************************************************************************************
    
    var methodType  = &quot;POST&quot;;
    
    var sourceURL   = &quot;https://www.google.com/accounts/ClientLogin&quot;;
    
    var requestType = false;
    
    var sendValue   = &quot;accountType=GOOGLE&amp;Email=%your_google_email%&amp;Passwd=%your_google_password%&amp;service=cl&amp;source=test-user-1&quot;;
    
    var reqTime     = 0;
    
    var headers     = false;
    
    var okcode      = 200;
    
    
    
    //Отправляем запрос
    
    var authResponse = sendRequestToServer(methodType, sourceURL, requestType, sendValue, reqTime, headers, okcode);
    
    //Выдергиваем из ответа строку аутентификации
    
    var authCode = authResponse.match(/auth=(.+)/i);
    
    
    if (authCode == null) {WScript.Quit(); /* Не удалось получить строку аутентификации */}
    
    authCode = authCode[1];
    
    //************************************************************************************************************
    
    
    
    
    
    //Добавляем одиночное событие
    //************************************************************************************************************
    
    //Время в формате yyyy-mm-ddThh:mm:ss
    
    var time = getStrDate(new Date().getTime() + 60000);
    
    
    methodType  = &quot;POST&quot;;
    
    sourceURL   = &quot;https://www.google.com/calendar/feeds/default/private/full&quot;;
    
    requestType = false;
    
    sendValue   = &quot;&lt;entry xmlns=&#039;http://www.w3.org/2005/Atom&#039; xmlns:gd=&#039;http://schemas.google.com/g/2005&#039;&gt;&quot;;
    
    sendValue   += &quot;&lt;title type=&#039;text&#039;&gt;&quot; + retRndNumber(1, 1000) + &quot;&lt;/title&gt;&quot;;
    
    sendValue   += &quot;&lt;gd:when startTime=&#039;&quot; + time + &quot;&#039; endTime=&#039;&quot; + time + &quot;&#039;&gt;&quot;;
    
    sendValue   += &quot;&lt;gd:reminder minutes=&#039;1&#039; method=&#039;sms&#039; /&gt;&quot;;
    
    sendValue   += &quot;&lt;/gd:when&gt;&quot;;
    
    sendValue   += &quot;&lt;/entry&gt;&quot;;

    
    reqTime     = 0;
    
    headers     = [[&quot;Authorization&quot;, &quot;GoogleLogin auth=&quot; + authCode], [&quot;Content-Type&quot;, &quot;application/atom+xml&quot;]];
    
    okcode      = 201;
    
    
    
    //Отправляем запрос
    
    sendRequestToServer(methodType, sourceURL, requestType, sendValue, reqTime, headers, okcode);

    //************************************************************************************************************
    
}
catch (e)
{
    
    //Произошла ошибка
    
    WScript.Echo(e.message);
    
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (is5157)]]></author>
			<pubDate>Fri, 09 Dec 2011 13:11:38 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=54404#p54404</guid>
		</item>
	</channel>
</rss>
