страницей работают миллионы пользователей».
Зачем, собственно, нужен гаджет и какие возможности он предоставляет?
С технической точки зрения, гаджет для iGoogle представляет собой XML-файл, содержимое которого выводится во вложенном фрейме (iframe). В XML-тексте файла гаджета применяется специальная разметка и информационные теги; там же содержится и HTML-или JavaScript-код, использующий специальный API (Google Gadget API) для интеграции с порталом iGoogle.
Гаджет может содержать как простой текст на языке разметки HTML, так и программы на JavaScript. Такое сочетание функций позволяет использовать гаджет в роли интерфейсного блока к какой-либо внешней Web-системе. Например, в качестве мини-витринки для Интернет-магазина, на которой выводится информация о скидках, новых поступлениях и др.
В то же время роль Google Gadgets API не сводится к выводу динамического или HTML-содержимого внешних источников. Предусматриваются развитые функции формирования пользовательского интерфейса (вкладки, раскрывающиеся разделы и др.), работы с XML, интеграции с Flash или Silverlight, учета и ведения статистики (средствами Google Analytics), внешнего хранилища информации (например, параметров настройки гаджета для конкретного пользователя), локализации и др.
XML-модуль может редактироваться любым удобным разработчику способом, – кроме того, есть специальный «редактор гаджетов», пригодный для создания не всех типов гаджетов, а только «унаследованных» (об этом ниже).
Программный код конкретного гаджета, как правило, хранится на серверах Google (http://hosting.gmodules.com/). С точки зрения пользователя, на страницу портала iGoogle они инсталлируются нажатием соответствующей кнопки на этой странице (фактически просто добавляется ссылка), на внешние по отношению к iGoogle сайты их можно установить, скопировав специальный код:
<script src='http://gmodules.com/ig/ifr?url=
http://hosting.gmodules.com/ig/gadgets/
file/116455917826824671162/lines.xml&
synd=open&w=300&h=340&title=
lines&border= %23ffffff%7C3px%2C1px+
solid+%23999999&output=js'></script>
Собственно гаджет – в данном случае файл lines.xml – хранится в подкаталоге разработчика (создается автоматически при сохранении исходного текста в редакторе гаджетов, откуда и вызывается с заранее заданными параметрами.
Разместить гаджет можно и на собственном сайте, а также на страницах проекта Google Code (в этом случае появляются интересные возможности, вроде управления версиями). Но если автор хочет добиться популярности, то гаджет настоятельно рекомендуется добавлять в каталог Google. Иначе как о нем узнают широкие массы?

Структура API платформы Google для гаджетов довольно эклектична и несет явный отпечаток эволюционного развития. Так, например, гаджеты могут создаваться не только для iGoogle, но и для утилиты Google Desktop (исторически она и была первой). Когда-то давно у этих двух платформ был различный API, затем программисты Google унифицировали их. Сегодня обеспечивается некоторая совместимость, хотя не все гаджеты Google Desktop могут работать в «среде» iGoogle, и наоборот (скажем, если применен специфичный программный модуль, использующий API Win32; есть также функции, которые недоступны на платформе Google Desktop).
Листинг 1. XML-файл гаджета
<?xml version='1.0' encoding='UTF-8'?>
<Module>
<ModulePrefs title='hello world
example' />
<Content type='html'>
<![CDATA[
Здравствуй, мир!
]]>
</Content>
</Module>
Но и это еще не все. Существуют две версии Gadgets API: «унаследованная» (Legacy Gadgets API) и текущая, причем «унаследованная» не означает «устаревшая». Это скорее наиболее общая, универсальная платформа, разработки на базе которой совместимы с максимальным числом платформ (хотя и благодаря некоторому усечению функций). В некоторых случаях даже рекомендуется использовать именно «унаследованную» версию API, например при необходимости установки гаджета на внешнем сайте.
Новая версия API в документации Google обычно обозначается как пространство имен gadgets.* Функциональность и возможности в целом соответствуют Legacy Gadgets API, но, кроме того, предоставляется возможность создавать разработки, интегрированные с подсистемой OpenSocial (функционирующие во всех социальных сетях, совместимых с этим стандартом), специализированные графические средства, подсистемы авторизации, загрузки данных, управления шаблонами и др. Далее в примерах этой статьи мы ограничимся только Legacy Gadgets API, вопросы работы с прочими версиями будут рассмотрены позднее.
Программные интерфейсы, доступные разработчикам Google Gadgets (как «унаследованный», так и gadgets.*), ясно структурированы и позволяют реализовать практически любые идеи. Единственное ограничение накладывается скорее соображениями скорости работы и требованиями к пропускной способности каналов связи. Строго говоря, возможность подключения внешних модулей предоставляет возможности создать гаджет даже с трехмерной интерактивной игрой (благо, сегодня существуют «движки» 3D-графики для онлайновых применений). И это первое, о чем следует помнить разработчику.
Рассмотрим особенности внутренней организации гаджета и доступные API на примерах разработок, представленных на конкурс гаджетов, организованный компаниями Google и журналом PC Magazine/RE (подробнее о конкурсе можно прочитать в блоге проекта, http://ru-googlegadget.blogspot.com/).
Самый простой способ создания гаджета – воспользоваться заранее подготовленными экранными формами, доступными с персональной страницы iGoogle. Работа с ними предельно проста: достаточно заполнить несколько полей, получить код или кликнуть по ссылке добавления гаджета на Web-страницу. В то же время такие разработки не представляют особого интереса, поскольку их функциональность довольно невелика.
Листинг 2. Гаджет, содержащий ссылку на программный модуль
<Module>
<ModulePrefs title='lines'
title_url='http://gagdetmaster.
googlepages.com/'
category='games'/>
<Content type='url' href='http://gagdetmaster.googlepages.
com/333.htm'/>
</Module>