<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF132%3Agoogle</id>
		<title>LXF132:google - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF132%3Agoogle"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF132:google&amp;action=history"/>
		<updated>2026-05-13T08:43:38Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF132:google&amp;diff=12194&amp;oldid=prev</id>
		<title>Crazy Rebel: /* Готовность к отправке */</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF132:google&amp;diff=12194&amp;oldid=prev"/>
				<updated>2011-06-23T11:14:24Z</updated>
		
		<summary type="html">&lt;p&gt;‎&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Готовность к отправке&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Предыдущая&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Версия 11:14, 23 июня 2011&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 202:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 202:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Оператор '''print''' затем покажет результирующее время отправки. Переменная '''$sdate_''' содержит текущий год (yy), месяц (mm), день (dd), час (hh) и минуты (ii). Мы должны задать время начала равным времени окончания, потому что это не реальное мероприятие. Далее мы задаем событие как происходящее через две минуты в будущем и включаем текстовое напоминание:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Оператор '''print''' затем покажет результирующее время отправки. Переменная '''$sdate_''' содержит текущий год (yy), месяц (mm), день (dd), час (hh) и минуты (ii). Мы должны задать время начала равным времени окончания, потому что это не реальное мероприятие. Далее мы задаем событие как происходящее через две минуты в будущем и включаем текстовое напоминание:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;{{Врезка|left|Заголовок=Скорая помощь|Содержание=Календарь Goggle позволяет назначать мероприятия на прошлое, но тогда вы не получите текстовые напоминания.|Ширина=200px}}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|Содержание=[[Изображение:LXF132_87_1.jpg|300px]] Наш сайт сейсмических данных не особо элегантен, но этого ему и не нужно — он всеголишь ступенька к получению сведений на наш телефон.|Ширина=300px}}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;{{Врезка|Содержание=[[Изображение:LXF132_87_1.jpg|300px]] Наш сайт сейсмических данных не особо элегантен, но этого ему и не нужно — он всеголишь ступенька к получению сведений на наш телефон.|Ширина=300px}}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 226:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 226:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Здесь создается объект '''$event''', устанавливается '''title''' (телосообщения), затем загружаются времена '''startTime''' и '''endTime''' (эти две переменные одинаковы и хранят время отправки нашего «сейсмического» SMS). Вас не должно смущать '''$minutes = 0'''. Это означает, что мы не хотим получать напоминания от Google заранее. '''$method = «sms»''' задает способ, которым мы хотим быть проинформированы, а затем событие '''gcal''' вставляется в календарь при помощи '''$gcal-&amp;gt;insertEvent($event)'''. Наконец, изменим статус нашего сообщения с '''pending''' на '''sent''' в таблице '''sms''':&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;Здесь создается объект '''$event''', устанавливается '''title''' (телосообщения), затем загружаются времена '''startTime''' и '''endTime''' (эти две переменные одинаковы и хранят время отправки нашего «сейсмического» SMS). Вас не должно смущать '''$minutes = 0'''. Это означает, что мы не хотим получать напоминания от Google заранее. '''$method = «sms»''' задает способ, которым мы хотим быть проинформированы, а затем событие '''gcal''' вставляется в календарь при помощи '''$gcal-&amp;gt;insertEvent($event)'''. Наконец, изменим статус нашего сообщения с '''pending''' на '''sent''' в таблице '''sms''':&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;color: red; font-weight: bold; text-decoration: none;&quot;&gt;{{Врезка|Заголовок=Скорая помощь|Содержание=Календарь Goggle позволяет назначать мероприятия на прошлое, но тогда вы не получите текстовые напоминания.|Ширина=200px}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=php&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;&amp;lt;source lang=php&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF132:google&amp;diff=12191&amp;oldid=prev</id>
		<title>Crazy Rebel: викификация, оформление, иллюстрация</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF132:google&amp;diff=12191&amp;oldid=prev"/>
				<updated>2011-06-23T11:11:27Z</updated>
		
		<summary type="html">&lt;p&gt;викификация, оформление, иллюстрация&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;: '''Hardcore Linux''' Проверьте себя на крутом проекте для продвинутых пользователей&lt;br /&gt;
&lt;br /&gt;
==Google Cal: SMS безвозмездно==&lt;br /&gt;
&lt;br /&gt;
: '''Клаудио Танчони''' опишет, как превратить Google Calendar в службу SMS-уведомлений, не обращаясь к платным сервисам.&lt;br /&gt;
&lt;br /&gt;
Владельцы учетной записи на Gmail также получают доступ к другим инструментам и сервисам Google: Документам, Reader’у и, конечно, Календарю. На данном уроке мы покажем, как превратить последний в SMS-шлюз, посылающий вам SMS при возникновении некого события. Для примера мы настроим простенькую систему (состоящую из web-страницы на ''PHP'', карманной базы ''MySQL'' и планировщика ''Cron''), предназначенную для мониторинга сейсмической активности и посылающую нам сообщение при каждом подземном толчке.&lt;br /&gt;
&lt;br /&gt;
Календарь Google не отличается от других похожих продуктов – кроме, конечно, его бесплатности для некоммерческого применения. Посылаемые сообщения также не будут стоить ничего, если ваш тариф не предусматривает платы за входящие SMS (если вы, скажем, находитесь в роуминге, плата может и взиматься).&lt;br /&gt;
&lt;br /&gt;
Первым делом зарегистрируйте свой телефонный номер во вкладке '''Настройка для мобильных устройств''' на странице '''Настройки календаря'''. Убедитесь, что ваш мобильный оператор поддерживается, затем выберите страну, введите номер телефона и щелкните по '''Отправить проверочный код'''. Вам придет проверочное SMS с кодом, который нужно ввести в поле '''Проверочный код'''. Если все прошло нормально, вы увидите сообщение, что ваш номер телефона успешно верифицирован.&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF132_84_1.jpg|300px]] На странице '''Настройка для мобильных устройств''' Календаря Google проверьте, поддерживает ли текстовые оповещения ваш мобильный оператор.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
Далее, создадим мероприятие для тестирования системы. Зайдем в основной вид Календаря и щелкнем на колонке с сегодняшней датой пониже красной линии, отображающей текущее время. Введите название мероприятия в появившемся окне и щелкните на '''Изменить информацию для доступа к странице''', где вводятся подробности о мероприятии и создаются напоминания (в области '''Напоминание'''). На каждое мероприятие можно назначать до пяти напоминаний.&lt;br /&gt;
&lt;br /&gt;
Используйте первый выпадающий список для указания способа получения напоминания, а поле и список правее позволят сообщить, когда вы хотите получить его. Для целей тестирования мы выберем отправку SMS через 0 минут. Другими словами, вы получите сообщение точно в момент начала встречи. Если вы почему-либо не видите выпадающих меню в области напоминаний, щелкните по '''Добавить напоминание'''.&lt;br /&gt;
&lt;br /&gt;
Закончив, нажмите '''Сохранить''' и ждите наступления события, следя за вашим сотовым телефоном. Если SMS придет, то ваш телефон работает с Календарем Google! Теперь пойдем дальше и погрузимся чуть глубже в особенности текстовых сообщений.&lt;br /&gt;
&lt;br /&gt;
===ПроZendируем тему===&lt;br /&gt;
&lt;br /&gt;
Разобравшись, как добавляются текстовые сообщения в браузере, давайте сделаем это, используя код на ''PHP'' и ''Zend Framework''.&lt;br /&gt;
&lt;br /&gt;
''Zend'' (http://framework.zend.com) – это коллекция библиотек, предлагающая хорошо документированный набор классов и методов для работы с Календарем Google. Если у вас есть учетная запись Google, зарегистрированный в Календаре Google телефон и минимальная установка Zend Framework на вашем сервере web-приложений, ничто не мешает запустить данную примочку.&lt;br /&gt;
&lt;br /&gt;
Наша задача теперь – отправлять текстовые сообщения всегда, когда выполняется заданное условие. И это легко сделать с помощью ''PHP''-библиотек ''Zend''.&lt;br /&gt;
&lt;br /&gt;
Тут вы можете начать недоумевать, зачем вам мучаться с Календарем Google при наличии прекрасных доступных сервисов SMS-шлюзов. Основная причина в том, что эти шлюзы не бесплатны; и хотя возможности безвозмездной посылки текстовых сообщений из Календаря Google несколько ограничены, с небольшими доделками это будет отлично работать на вас.&lt;br /&gt;
&lt;br /&gt;
Для следующего примера займемся web-страницей, динамически обновляемой новым содержимым. А мы хотим, чтобы при появлении нового содержимого оно подчищалось, урезалось и посылалось нам на телефон, с помощью вскрытых возможностей отправки SMS в Календаре Google.&lt;br /&gt;
&lt;br /&gt;
Используемая нами HTML-страница, обновляемая каждые несколько минут, содержит таблицу с землетрясениями в обратном хронологическом порядке, чтобы последние события были вверху. Данные приходят с официальной web-страницы, обновляемой геологическим сейсмическим институтом на http://cnt.rm.ingv.it/earthquakes_list.php?lang=eng. Для нашего примера разместим таблицу с этой страницы на http://gcal-smsdemo.co.cc/earthquakes.php. При новом проявлении сейсмической активности строка об этом добавится в начале HTML-таблицы.&lt;br /&gt;
&lt;br /&gt;
Первым шагом применим для чтения web-страницы функцию ''PHP'' '''curl_exec''', затем выполним синтаксический разбор HTML-кода для проверки, не зарегистрировано ли новое землетрясение в начале таблицы.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
 /* Забираем html-документ для разбора */&lt;br /&gt;
 $ch = curl_init(“http://gcal-smsdemo.co.cc/earthquakes.php”);&lt;br /&gt;
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);&lt;br /&gt;
 $html = curl_exec($ch);&lt;br /&gt;
 curl_close($ch);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция '''curl_init()''' инициализирует сессию '''Curl''' и принимает URL как параметр. '''Curl_setopt()''' задает параметры для '''curl_exec()'''. '''CURLOPT_RETURNTRANSFER, TRUE''' велит следующей функции, '''curl_exec()''', вернуть результат как строку (вместо булевского значения по умолчанию).&lt;br /&gt;
&lt;br /&gt;
Далее, извлечем строки из таблицы с использованием DOM:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
 /* Новый объект dom */&lt;br /&gt;
 $dom = new domDocument;&lt;br /&gt;
 /* Загружаем html в объект */&lt;br /&gt;
 $dom-&amp;gt;loadHTML($html);&lt;br /&gt;
 /* Массив таблиц по тэгу */&lt;br /&gt;
 $tables = $dom-&amp;gt;getElementsByTagName(‘table’);&lt;br /&gt;
 /* Забираем все строки из первой таблицы на странице */&lt;br /&gt;
 $rows=$tables-&amp;gt;item(0)-&amp;gt; getElementsByTagName(‘tr’);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После загрузки HTML-страницы в объект DOM удобный метод '''getElementsByTagName()''' загружает все таблицы в массив '''$tables''' (на нашей демо-странице она только одна). Используя метод во второй раз, мы сохраняем все строки таблицы, которые вернул '''getElementsByTagName(‘tr’)''', в массиве '''$rows'''. Помните, что '''item(0)'''&lt;br /&gt;
означает первую таблицу, так как индексы отсчитываются с 0.&lt;br /&gt;
&lt;br /&gt;
Пускай теперь на web-страницу только что добавилась строка с Id 8211226050, и нам нужно забрать ее, почистить, сжать и использовать наш трюк с Календарем Google для отправки SMS-сообщения. Давайте посмотрим, как это сделать.&lt;br /&gt;
&lt;br /&gt;
Интересующая нас строка таблицы расположена на втором месте (в массиве '''$rows''' это элемент с номером один). Здесь важно отметить, что нам доступны только 60 символов SMS вместо обычных 160 [''в русской кодировке вообще 74, – прим. пер.'']. Так как не все колонки таблицы имеют одинаковую ценность, отберем только часть из них, чтобы уложиться в этот лимит.&lt;br /&gt;
&lt;br /&gt;
===Интересные моменты===&lt;br /&gt;
&lt;br /&gt;
Интереснее всего будут '''Seismic District''' [Район землетрясения], '''Date''' [Дата], '''Time(UTC)''' [Время] и '''Mag(nitude)''' [Сила]. Параметры '''Depth''' [Глубина], '''Lat(itude)''' [Широта] и '''Lon(gitude)''' [Долгота] – более технические, и мы попытаемся немного поманипулировать строками, чтобы их тоже втиснуть, отказавшись от Id. Следующий код просмотрит массив '''$rows''' и создаст строку '''$smstxt''' с посылаемым текстом.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
 /* Выбираем ка ж дую колонку по тэгу */&lt;br /&gt;
 $cols=$rows­&amp;gt;item(1)­&amp;gt;getElementsByTagName(‘td’);&lt;br /&gt;
 /* соз даем строку $smstext */&lt;br /&gt;
 /* Location(9) + Magnitude(7) + TimeDate (3)(2) +&lt;br /&gt;
    Latitude (4) + Longitude(5) + Depth (6) */&lt;br /&gt;
 $smstext=substr($cols­&amp;gt;item(9)­&amp;gt;nodeValue,0,8) .&lt;br /&gt;
    “ “ . $cols­&amp;gt;item(7)­&amp;gt;nodeValue . “ “ .&lt;br /&gt;
    $cols­&amp;gt;item(3)­&amp;gt;nodeValue . “ “ .&lt;br /&gt;
    $cols­&amp;gt;item(2)­&amp;gt;nodeValue . “ “ .&lt;br /&gt;
    $cols­&amp;gt;item(4)­&amp;gt;nodeValue . “ “ .&lt;br /&gt;
    $cols­&amp;gt;item(5)­&amp;gt;nodeValue . “ “ .&lt;br /&gt;
    $cols­&amp;gt;item(6)­&amp;gt;nodeValue . “Km”;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Массив '''$cols''' содержит 10 элементов (0–9) с данными о последнем сейсмическом событии. Используя нужные индексы и функцию '''substr()''', мы легко создаем SMS-сообщение.&lt;br /&gt;
&lt;br /&gt;
После отработки кода над предыдущей таблицей, '''$smstext''' будет содержать нечто вроде ''Chile-Ar Mb:6.2 11:25:38 2010/02/28 -34.739 -70.866 35Km''. Отметим, что это меньше, чем 60 символов, частично благодаря '''substr($cols-&amp;gt;item(9)-&amp;gt;nodeValue,0,8)''', которая урезает поле '''Seismic District''' до восьми символов. Строка укорочена, и наше текстовое сообщение почти готово к отправке.&lt;br /&gt;
&lt;br /&gt;
На следующем шаге применим логику, чтобы сообщение о сейсмическом событии посылалось однократно. Календарь Google не в состоянии определить, было ли отправлено SMS. Поэтому заведем небольшую базу ''MySQL'' для отслеживания уже посланных сообщений. Это может показаться лишним усложнением на пути к цели, но зато, когда база данных будет настроена, проверка, были ли сообщение уже отправлено, будет очень простой, потому что база не принимает одну и ту же запись более одного раза. А значит, в Календарь Google событие добавится только один раз, и он не будет зря бомбить наш телефон «эсэмэсками».&lt;br /&gt;
&lt;br /&gt;
База данных в нашем примере будет содержать одну таблицу с именем '''sms''', о двух колонках: '''smstext''' и '''status'''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=sql&amp;gt;&lt;br /&gt;
 CREATE TABLE IF NOT EXISTS `sms` (&lt;br /&gt;
   `smstext` varchar(160) NOT NULL,&lt;br /&gt;
   `status` varchar(32) NOT NULL,&lt;br /&gt;
   PRIMARY KEY (`smstext`)&lt;br /&gt;
 ) ENGINE=MyISAM DEFAULT CHARSET=latin1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===База сообщений===&lt;br /&gt;
&lt;br /&gt;
Поле '''status''' поможет нам отслеживать, было ли послано SMS, а '''smstext''' будет хранить его текст. Давайте вернемся к ''PHP''-коду. Он вставляет текстовое сообщение в таблицу '''sms''' базы данных и сигнализирует об ошибке, если такое уже существует.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
 /** Соединяемся с БД **/&lt;br /&gt;
 $con = mysql_connect(‘localhost’, ‘username’,’pa$$w0rd’);&lt;br /&gt;
 if (!$con) {&lt;br /&gt;
 die(‘Could not connect: ‘ . mysql_error());&lt;br /&gt;
 }&lt;br /&gt;
 mysql_select_db(“smsdemo_DB”, $con);&lt;br /&gt;
 /* Обезопасимся от инъек ций и спец. символов */&lt;br /&gt;
 $smstext = mysql_real_escape_string($smstext);&lt;br /&gt;
 /** DB sms INSERT **/&lt;br /&gt;
 $sql_ins_sms=”INSERT INTO sms (smstext, status)&lt;br /&gt;
 VALUES&lt;br /&gt;
 (‘$smstext’,’pending’)”;&lt;br /&gt;
 if (!mysql_query($sql_ins_sms,$con)) {&lt;br /&gt;
  print(“Warning: “ . mysql_error() . “&amp;lt;br /&amp;gt;\n”);&lt;br /&gt;
 } else print(“1 sms added&amp;lt;br /&amp;gt;\n”);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Метод '''mysql_real_escape_string()''' предупреждает вторжения в базу данных. Его следует использовать всегда, когда переменная содержит сведения из Интернета (разбора HTML) или введенные непосредственно пользователем (через формы). Оператор '''INSERT''' записывает в таблицу сообщение ('''$smstext'''), а также статус '''pending''', означающий постановку сообщения в очередь на отправку. Следующим шагом будет запрос базы данных на наличие сообщений в очереди, и если таковые имеются – их отсылка. Этот код не отслеживает возможные ошибки, но вы можете позже добавить конструкции '''try/catch''' для обслуживания проблем с соединением и тому подобного. Сейчас же мы постараемся придерживаться краткого и лаконичного кода.&lt;br /&gt;
&lt;br /&gt;
Ну вот, мы готовы использовать ''PHP'' для общения с Календарем Google. Для этого надо скачать и установить в поддиректорию минимальный ''Zend Framework''. Также будем предполагать, что библиотеки ''Zend'' расположены в папке с именем ''Zend''. Сперва загрузим некоторые классы ''Zend'':&lt;br /&gt;
&lt;br /&gt;
{{Врезка|Заголовок=Скорая помощь|Содержание=Календарь Google записывает в текстовое сообщение только название события, длиной не более 60 символов. Остальное место используется для имени календаря, даты и времени начала/окончания события.|Ширина=200px}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
 // Gcal Hack: Загружаем нужные классы Zends &lt;br /&gt;
 require_once ‘Zend/Loader.php’;&lt;br /&gt;
 Zend_Loader::loadClass(‘Zend_Gdata’);&lt;br /&gt;
 Zend_Loader::loadClass(‘Zend_Gdata_ClientLogin’);&lt;br /&gt;
 Zend_Loader::loadClass(‘Zend_Gdata_Calendar’);&lt;br /&gt;
 Zend_Loader::loadClass(‘Zend_Http_Client’);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Эти классы ''PHP'' хранятся в папке '''Zend_Gdata'''; они позволят нам выполнять аутенфикацию, создавать новые мероприятия и удалять существующие, просматривать их, а также многое другое. Для начала войдем в нашу учетную запись Календаря Google с помощью такого кода:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
 // Подключаемся к сервису&lt;br /&gt;
 $gcal = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;&lt;br /&gt;
 $user = ‘username’; // без ‘@gmail.com’ на конце&lt;br /&gt;
 $pass = ‘pa$$w0rd’;&lt;br /&gt;
 $client = Zend_Gdata_ClientLogin::getHttpClient ($user,&lt;br /&gt;
 	 $pass, $gcal);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''$client''' будет хранить объект '''Zend_Http_Client''' со всеми деталями текущей аутенфикации клиента.&lt;br /&gt;
&lt;br /&gt;
Далее проверим, нет ли сообщений со статусом '''pending''' в нашей таблице '''sms''', и получим их, используя '''SELECT'''. Если в очереди есть какие-либо сообщения, первое из них будет выбрано для отправки:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
 // Создаем объект gcal&lt;br /&gt;
 $gcal = new Zend_Gdata_Calendar($client);&lt;br /&gt;
 // Получаем ожидающие события из таблицы sms&lt;br /&gt;
 $sql_sel_pending = “SELECT * FROM sms WHERE&lt;br /&gt;
 	 status=’pending’ LIMIT 0,1”;&lt;br /&gt;
 $result = mysql_query($sql_sel_pending);&lt;br /&gt;
 $row = mysql_fetch_array($result);&lt;br /&gt;
 if (!$row) die(“No pending event, exiting...” .&lt;br /&gt;
 	 “&amp;lt;br&amp;gt;\n”);&lt;br /&gt;
 // Устанавливаем заголовок&lt;br /&gt;
 $title = $row[‘smstext’];&lt;br /&gt;
 print(“title: “ . $title . “&amp;lt;br /&amp;gt;\n”);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этом коде '''$gcal''' – объект '''Zend_Gdata_Calendar''', представляющий событие нашего календаря с полем '''title''' (название), временем начала/конца и всем прочим, что используется при планировании мероприятия. Порция кода ''PHP/MySQL'' получает текстовые сообщения из очереди оператором '''SELECT''' и обрабатывает результат с помощью функции '''mysql_fetch_array()''', которая возвращает массив с соответствующими строками, а '''$title''' в результате будет хранить текст, который надо послать.&lt;br /&gt;
&lt;br /&gt;
===Играем со временем===&lt;br /&gt;
&lt;br /&gt;
Календарь Google обычно подразумевает установку напоминаний о событиях, которые произойдут в будущем. Чтобы обойти это и обеспечить отправку сообщений на ваш телефон в реальном времени, нужно взять текущее время и добавить к нему небольшой сдвиг, чтобы Google считал ваше событие фактом ближайшего будущего. Пара минут (120 секунд) будет в самый раз.&lt;br /&gt;
&lt;br /&gt;
Это сработает, даже если вы установите одну минуту, но тогда сообщения могут иногда теряться при задержках в линиях связи.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
 // Задаем время&lt;br /&gt;
 date_default_timezone_set(‘UTC’);&lt;br /&gt;
 $safeTimeToWait = 120; // добавить секунд&lt;br /&gt;
 $now = time(); // секунд с 1/1/1970&lt;br /&gt;
 $smsSchedTime = $now + $safeTimeToWait;&lt;br /&gt;
 print (“sms scheduled sending time is: ” .&lt;br /&gt;
 date(“Y-m-d H:i”,$smsSchedTime) . “&amp;lt;br /&amp;gt;\n”);&lt;br /&gt;
 $sdate_yy = $edate_yy = date(“Y”,$smsSchedTime);&lt;br /&gt;
 $sdate_mm = $edate_mm = date(“m”,$smsSchedTime);&lt;br /&gt;
 $sdate_dd = $edate_dd = date(“d”,$smsSchedTime);&lt;br /&gt;
 $sdate_hh = $edate_hh = date(“H”,$smsSchedTime);&lt;br /&gt;
 $sdate_ii = $edate_ii = date(“i”,$smsSchedTime);&lt;br /&gt;
 $start = $end = date(DATE_ATOM, mktime($sdate_hh,&lt;br /&gt;
 	 $sdate_ii,&lt;br /&gt;
 	 0,&lt;br /&gt;
 	 $sdate_mm,&lt;br /&gt;
 	 $sdate_dd,&lt;br /&gt;
 	 $sdate_yy));&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Самая важная переменная тут – это '''$smsSchedTime''': она задает время отправки текстового сообщения. Она получается сложением текущего времени (возвращаемого функцией '''time()''') и '''$safeTimeToWait'''.&lt;br /&gt;
&lt;br /&gt;
===Готовность к отправке===&lt;br /&gt;
&lt;br /&gt;
Оператор '''print''' затем покажет результирующее время отправки. Переменная '''$sdate_''' содержит текущий год (yy), месяц (mm), день (dd), час (hh) и минуты (ii). Мы должны задать время начала равным времени окончания, потому что это не реальное мероприятие. Далее мы задаем событие как происходящее через две минуты в будущем и включаем текстовое напоминание:&lt;br /&gt;
&lt;br /&gt;
{{Врезка|left|Заголовок=Скорая помощь|Содержание=Календарь Goggle позволяет назначать мероприятия на прошлое, но тогда вы не получите текстовые напоминания.|Ширина=200px}}&lt;br /&gt;
{{Врезка|Содержание=[[Изображение:LXF132_87_1.jpg|300px]] Наш сайт сейсмических данных не особо элегантен, но этого ему и не нужно — он всеголишь ступенька к получению сведений на наш телефон.|Ширина=300px}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
 // Конструируем объект-событие&lt;br /&gt;
 $event = $gcal-&amp;gt;newEventEntry();&lt;br /&gt;
 $event-&amp;gt;title = $gcal-&amp;gt;newTitle($title);&lt;br /&gt;
 $when = $gcal-&amp;gt;newWhen();&lt;br /&gt;
 $when-&amp;gt;startTime = $start;&lt;br /&gt;
 $when-&amp;gt;endTime = $end;&lt;br /&gt;
 $event-&amp;gt;when = array($when);&lt;br /&gt;
 // Настраиваем и включаем SMS-напоминание&lt;br /&gt;
 $minutes = 0;&lt;br /&gt;
 $method = “sms”;&lt;br /&gt;
 $reminder = $gcal-&amp;gt;newReminder();&lt;br /&gt;
 $reminder-&amp;gt;method = $method;&lt;br /&gt;
 $reminder-&amp;gt;minutes = $minutes;&lt;br /&gt;
 $when = $event-&amp;gt;when[0];&lt;br /&gt;
 $when-&amp;gt;reminders = array($reminder);&lt;br /&gt;
 $gcal-&amp;gt;insertEvent($event);&lt;br /&gt;
 print(“Gcal Event Added, user: $user&amp;lt;br /&amp;gt;\n”);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Здесь создается объект '''$event''', устанавливается '''title''' (телосообщения), затем загружаются времена '''startTime''' и '''endTime''' (эти две переменные одинаковы и хранят время отправки нашего «сейсмического» SMS). Вас не должно смущать '''$minutes = 0'''. Это означает, что мы не хотим получать напоминания от Google заранее. '''$method = «sms»''' задает способ, которым мы хотим быть проинформированы, а затем событие '''gcal''' вставляется в календарь при помощи '''$gcal-&amp;gt;insertEvent($event)'''. Наконец, изменим статус нашего сообщения с '''pending''' на '''sent''' в таблице '''sms''':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=php&amp;gt;&lt;br /&gt;
 // Изменяем статус ‘field’ с pending -на -&amp;gt; sent&lt;br /&gt;
 $sql_update_status = “UPDATE sms&lt;br /&gt;
 	 SET status = ‘sent’&lt;br /&gt;
 	 WHERE smstext = ‘$title’”;&lt;br /&gt;
 if (!mysql_query($sql_update_status,$con)) {&lt;br /&gt;
 print(‘Error: ‘ . mysql_error());&lt;br /&gt;
 } else {&lt;br /&gt;
 print(“sms: $title [status=sent]&amp;lt;br /&amp;gt;\n”);&lt;br /&gt;
 }&lt;br /&gt;
 /** закрываем соединение с БД **/&lt;br /&gt;
 mysql_close($con);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Страница ''PHP'' теперь готова и может быть просмотрена он лайн на http://gcal-smsdemo.co.cc/smsdemo.php. Нам нужен кто-то или что-то, вызывающее созданную страницу. К счастью, ''Cron'' для этого идеально подходит! Настроим задание ''Cron'' на выполнение каждые 10 минут или около того (так как известно, что страница сейсмического института обновляется каждые несколько минут), и можно еще перенаправить стандартный вывод и стандартные ошибки в файл журнала. Запись '''crontab''' может выглядеть примерно так:&lt;br /&gt;
&lt;br /&gt;
 0,10,20,30,40,50 * * * * curl --silent --show-error --connect-timeout 30 --max-time 40 http://gcal-smsdemo.co.cc/smsdemo.php &amp;gt;&amp;gt; curl.log 2&amp;gt;&amp;amp;1&lt;br /&gt;
&lt;br /&gt;
Параметры '''silent''' и '''show-error''' сделают вывод команды ''curl'' лаконичным, но более значимым в случае ошибок. '''Connect-timeout''' и '''max-time''' нужны на случай обычной опасности временного сбоя DNS, который может подвесить команду на неопределенный срок. Поэтому здесь, если что-то пойдет неправильно, мы просто прикроем команду через 30 секунд, если не будет ответа от web-страницы (упал сервер) или вся операция (полное время запуска ''PHP''-страницы) занимает слишком долгое время (более 40 секунд).&lt;br /&gt;
&lt;br /&gt;
Итак, мы сделали это. Теперь вы сможете превратить вашу учетную запись Календаря Google в шлюз текстовых сообщений, который будет эффективно посылать вам SMS в режиме реального времени.&lt;br /&gt;
&lt;br /&gt;
===Что нам надо:'' LAMP + Zend''===&lt;br /&gt;
&lt;br /&gt;
''Linux Apache MySQL PHP (LAMP)'' – это наиболее популярная серверная платформа. Установить сервер ''LAMP'' на вашем компьютере относительно просто (''см. по ссылке http://ru.wikipedia.org/wiki/LAMP).Мы настоятельно рекомендуем сперва попробовать ее бесплатно в Интернете. Поищите слова «бесплатный хостинг LAMP». &lt;br /&gt;
&lt;br /&gt;
''Zend Framework'' – открытый объектно-ориентированный каркас приложений для ''PHP5''. Для его использования на вашем ''LAMP''-сервере скачайте минимальный пакет ''Zend'', распакуйте его и загрузите папку '''/ZendFramework-1.9.7-minimal/library/Zend''' куда-нибудь в директорию '''/public_html''' на вашем web-сервере.&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>