Внимание : эта страница посвящена старым API Google, API данных Google. Она актуальна только для API, перечисленных в каталоге API данных Google , многие из которых были заменены новыми. Информацию о конкретном новом API см. в документации к нему. Информация об авторизации запросов с помощью нового API представлена в разделе «Аутентификация и авторизация учётных записей Google» .
Райан Бойд, команда Google Data APIСентябрь 2007 г.
- Введение
- Получение и установка cURL
- Аутентификация в службе данных Google
- Получение каналов и записей
- Обновление записей
- Создание записей
- Удаление записей
- Загрузка медиа-объектов
- Другие инструменты командной строки
- Заключение
Введение
По сути, API данных Google используют формат данных Atom (XML) и протокол HTTP для передачи данных, расширяя протокол публикации Atom . Мы публикуем ряд клиентских библиотек для упрощения взаимодействия с API данных Google. Однако вы всегда можете использовать более простые инструменты для работы с нашими сервисами, и это довольно просто, если следовать нашим рекомендациям.
cURL — это приложение командной строки для выполнения запросов с использованием различных протоколов, включая HTTP. cURL часто используется разработчиками для тестирования служб Google Data, поскольку он поддерживает функциональность HTTP, необходимую для взаимодействия с API на низком уровне.
cURL поддерживает только HTTP-соединение, поэтому для работы с приложением необходимо знать протокол Google Data , протокол, специфичный для данной службы, и используемый формат данных XML. В этой статье упоминаются и другие инструменты, упрощающие эти задачи.
В этой статье используются примеры, основанные на API данных веб-альбомов Picasa. Однако все эти примеры можно легко применить и к другим API данных Google .
Получение и установка cURL
cURL обычно входит в стандартную установку многих платформ UNIX/Linux. Попробуйте ввести curl
в вашей любимой оболочке, чтобы проверить, установлен ли инструмент и находится ли он в вашей PATH
. Если инструмент у вас не установлен, посетите страницу загрузки на сайте cURL, чтобы получить официальный исходный код или двоичный пакет, предоставленный пользователем. Обратите внимание, что утилита командной строки использует библиотеку libcurl
, которая может быть доступна в виде отдельного пакета для загрузки, поэтому, если вы не компилируете из исходного кода, обязательно загрузите двоичный пакет вместо пакета libcurl. Пакеты с поддержкой SSL необходимы, если вы хотите использовать cURL для получения токенов аутентификации или доступа к некоторым службам Google Data, требующим использования SSL для запросов.
Аутентификация в службе данных Google
Аутентифицированные запросы к Google Data выполняются путём добавления HTTP-заголовка к запросу, который содержит токен аутентификации ClientLogin (для настольных компьютеров/мобильных приложений) или AuthSub (для веб-приложений). Для тестирования с использованием cURL ClientLogin является более простым методом, описанным ниже. Заголовки аутентификации AuthSub можно использовать с cURL, но более сложный процесс получения токенов выходит за рамки этой статьи.
Использование ClientLogin
ClientLogin предназначен для установленных (настольных и мобильных) приложений. При использовании этого метода аутентификации приложение, используя API Google Data, напрямую обрабатывает имя пользователя и пароль.
Запрос аутентификации для ClientLogin принимает имя пользователя, пароль и имя сервиса в качестве переменных формы POST. Эти переменные передаются в виде аргументов Email
, Passwd
и service
соответственно. Этот запрос возвращает ответ с несколькими токенами, один из которых может быть использован для отправки запросов к сервису Google Data. Обратите внимание, что аргументы данных, передаваемые с помощью curl
, должны быть закодированы в URL, если они содержат символы, не входящие в набор ASCII, которые часто встречаются в аргументах Email
и Passwd
. Вы можете указать curl
закодировать эти аргументы в URL с помощью флага --data-urlencode
.
Пример запроса:
curl https://www.google.com/accounts/ClientLogin \ --data-urlencode Email=brad.gushue@example.com --data-urlencode Passwd=new+foundland \ -d accountType=GOOGLE \ -d source=Google-cURL-Example \ -d service=lh2
Пример ответа:
SID=DQAAAHYBADCv2pSv7nflacDNwz3zEDUGtrSvNVDcpkSfddi77b3U5sEaHmP8YLWhmA36F9rk85mL8J5dqo4apn0T1vKz0fPGI9Xtnuet6cuE2ZzYvrNIwbSC_HjTqF4zudNQnnlDuD2wqZT-g1qXI8KhGAQZV4NexHZoQPlabTsGuRZeIBxj1A LSID=EUBBBIaBADCl-kNxvRVmcQghpt3cqSMfEooKR9flLOUZqwgP9OrZS83gse-KSdTNeXhxsET7FYenDhceP9lIPOmesH-t9qh-AWUHjjMdZEbUNeF9mWyzln6Z-FajaiG-cVFkqW0ZJ8ZbnCP30xXj6xFK6QxaAcqy_9Pej8jhEnxS9E61ftQGPg Auth=EUBBIacAAADK-kNxvRVmcQghpt3cqSMfEooLNMflLNIQqwgP9OrZS83gs-KSdTNeXhxsET7FYePWmaD8Vsy1V4LSUGMUP48Je2TO8OcjBj6HgAtPhiZeX-gKDfagZDK44j4n-Tkb44nhOnp2_QPSnBj3Z2vYwOEDjjG3Q53aQVC2132JKOuGh
Подробную информацию о параметрах, использованных в этом запросе, см. в документации ClientLogin. В этом примере мы используем API данных Picasa Web Albums. Имя сервиса ( service
) — lh2
. Имена других сервисов Google Data можно найти на странице часто задаваемых вопросов по API Google Data .
Значение токена Auth
в приведённом выше ответе — единственное значение, необходимое для аутентификации в сервисах Google Data. Значение этого токена формируется в HTTP-заголовок, который затем используется для каждого запроса к сервису Google Data.
curl --silent --header "Authorization: GoogleLogin auth=EUBBIacAAADK\ -kNxvRVmcQghpt3cqSMfEooLNMflLNIQqwgP9OrZS83gs-KSdTNeXhxs\ ET7FYePWmaD8Vsy1V4LSUGMUP48Je2TO8OcjBj6HgAtPhiZeX-gKDfag\ ZDK44j4n-Tkb44nhOnp2_QPSnBj3Z2vYwOEDjjG3Q53aQVC2132JKOuGh" \ "http://picasaweb.google.com/data/feed/api/user/default"
Примечание : Описанный выше метод экранирования символов новой строки с помощью символов обратной косой черты ('\') не работает в командной оболочке Windows, поэтому при запуске curl
в Windows необходимо ввести всю команду в одну строку.
Получение каналов и записей
В API данных Google получение каналов и записей осуществляется посредством выполнения HTTP- GET
к URL-адресу с необязательным набором параметров запроса. Поскольку мы выполняем GET
-запрос, в curl
необходимо передать только заголовок авторизации и URL-адрес. В примере ниже будет использоваться API данных веб-альбомов Picasa, и он будет использоваться для получения списка альбомов, принадлежащих аутентифицированному пользователю. Обратите внимание, что в этом примере мы сократили токен авторизации до ABCDEFG
, но вместо него следует использовать полный токен (например, EUBBIacA
... 32JKOuGh
, как указано выше).
curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/default"
Это вернет неформатированный фрагмент XML:
<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:geo='http://www.w3.org/2003/01/geo/wgs84_pos#' xmlns:gml='http://www.opengis.net/gml' xmlns:georss='http://www.georss.org/georss' xmlns:photo='http://www.pheed.com/pheed/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:batch='http://schemas.google.com/gdata/batch' xmlns:gphoto='http://schemas.google.com/photos/2007'><id>http://picasaweb.google.com/data/feed/base/user/brad.gushue</id><updated>2007-09-13T21:30:21.454Z</updated>...</entry></feed>
Существует несколько хороших инструментов для форматирования вывода, чтобы сделать его более удобным для восприятия, включая tidy . Проще всего использовать tidy — передать вывод команды curl в tidy, как показано ниже:
curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/default" | tidy -xml -indent -quiet
В результате лента становится гораздо более читабельной, например, такой:
<?xml version='1.0' encoding='utf-8'?> <feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:geo='http://www.w3.org/2003/01/geo/wgs84_pos#' xmlns:gml='http://www.opengis.net/gml' xmlns:georss='http://www.georss.org/georss' xmlns:photo='http://www.pheed.com/pheed/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:batch='http://schemas.google.com/gdata/batch' xmlns:gphoto='http://schemas.google.com/photos/2007'> <id>http://picasaweb.google.com/data/feed/api/user/brad.gushue</id> <updated>2007-09-13T21:47:07.337Z</updated> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#user' /> <title type='text'>brad.gushue</title> <subtitle type='text'></subtitle> <icon> http://lh6.google.com/brad.gushue/AAAAj9zigp4/AAAAAAAAAAA/RiMAlXV4MFI/s64-c/brad.gushue</icon> <link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://picasaweb.google.com/data/feed/api/user/brad.gushue' /> <link rel='alternate' type='text/html' href='http://picasaweb.google.com/brad.gushue' /> <link rel='self' type='application/atom+xml' href='http://picasaweb.google.com/data/feed/api/user/brad.gushue?start-index=1&max-results=1000' /> <author> <name>Brad</name> <uri>http://picasaweb.google.com/brad.gushue</uri> </author> <generator version='1.00' uri='http://picasaweb.google.com/'> Picasaweb</generator> <openSearch:totalResults>8</openSearch:totalResults> <openSearch:startIndex>1</openSearch:startIndex> <openSearch:itemsPerPage>1000</openSearch:itemsPerPage> <gphoto:user>brad.gushue</gphoto:user> <gphoto:nickname>Brad</gphoto:nickname> <gphoto:thumbnail> http://lh6.google.com/brad.gushue/AAAAj9zigp4/AAAAAAAAAAA/RiMAlXV4MFI/s64-c/brad.gushue</gphoto:thumbnail> <entry> <id> http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593</id> <published>2007-05-23T04:55:52.000Z</published> <updated>2007-05-23T04:55:52.000Z</updated> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#album' /> <title type='text'>Trip To Italy</title> <summary type='text'>This was the recent trip I took to Italy.</summary> <rights type='text'>public</rights> <link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://picasaweb.google.com/data/feed/api/user/brad.gushue/albumid/9810315389720904593' /> <link rel='alternate' type='text/html' href='http://picasaweb.google.com/brad.gushue/TripToItalyV2' /> <link rel='self' type='application/atom+xml' href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593' /> <link rel='edit' type='application/atom+xml' href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456' /> <author> <name>Brad</name> <uri>http://picasaweb.google.com/brad.gushue</uri> </author> <gphoto:id>9810315389720904593</gphoto:id> <media:group> ... </media:group> </entry> <entry> ... </entry> </feed>
Отдельные записи можно получить таким же образом, указав URL-адрес записи, а не URL-адрес канала.
Обновление записей
Записи в API данных Google обновляются путем выполнения HTTP PUT
на URL-адрес редактирования с новой копией XML записи в теле запроса.
- Получите запись, используя значение URL
atom:link/@rel='self'
- Обновите запись локально, чтобы внести необходимые изменения.
-
PUT
запись на сервер, используя значение URLatom:link/@rel='edit'
1. Получение записи
Запись можно получить, используя один из двух URL-адресов, выделенных жирным шрифтом в блоке ленты выше. Необходимый URL-адрес — это значение href
для элемента link
с атрибутом rel='self'
.
curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593"
2. Обновление записи локально
После извлечения записи её необходимо обновить с помощью локального текстового редактора или приложения, чтобы внести необходимые изменения. В приведённой выше команде для извлечения записи мы не передавали результаты в tidy
, как в предыдущих примерах. Результатом является XML, представляющий те же данные, но с другим форматированием, чем версия, переданная в tidy
. При ручном редактировании записи использование tidy
часто может упростить работу с XML.
Примечание : Не забудьте включить все определения пространств имён XML, которые используются в качестве атрибутов элемента atom:entry
при публикации новой записи. Отсутствие этих определений приведёт к исключениям при парсинге. Кроме того, tidy
заменит пробелы между определениями пространств имён символами новой строки. Хотя это допустимый XML, сервисы Google Data в настоящее время его не принимают. Если вы используете tidy
, обязательно добавьте дополнительные пробелы между этими атрибутами в элементе entry
.
3. Обновление записи на сервере
Используя URL-адрес edit
, необходимо PUT
копию записи на сервис с помощью cURL. Необходимо добавить заголовок, указывающий тип контента, отправляемого на сервер. В следующем фрагменте кода предполагается, что файл с обновлённой записью сохранён в updated_entry.xml.
curl --silent --data-binary "@updated_entry.xml" --request PUT --header "Content-Type: application/atom+xml" --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456"
Создание записей
Записи в API Google Data создаются путём выполнения HTTP POST
к URL-адресу записи с новой записью. atom:id
назначается сервером, поэтому его не обязательно включать в новые записи. Самый простой способ создать новую запись — взять старую и изменить её. Следующий пример как раз это и делает.
- Получите запись шаблона, используя
atom:link/@rel='self'
- Измените запись шаблона локально, чтобы удалить ненужную информацию и внести необходимые изменения.
-
POST
запись обратно на сервер методом POST, используя URL-адресpost
фида. Он указан либо в полученном фиде в качестве значенияhref
для элементаlink
сrel='http://schemas.google.com/g/2005#post'
, либо в документации сервиса на сайте http://code.google.com .
1. Получить шаблон записи
Отдельную запись можно извлечь, используя значение href
элемента link
с rel='self'
таким же образом, как запись была извлечена до ее обновления в приведенном выше примере.
curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593" | tidy -xml -indent -quiet > template_entry.xml
Ответ после использования tidy
будет выглядеть примерно так:
<entry xmlns='http://www.w3.org/2005/Atom' xmlns:exif='http://schemas.google.com/photos/exif/2007' xmlns:geo='http://www.w3.org/2003/01/geo/wgs84_pos#' xmlns:gml='http://www.opengis.net/gml' xmlns:georss='http://www.georss.org/georss' xmlns:photo='http://www.pheed.com/pheed/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:batch='http://schemas.google.com/gdata/batch' xmlns:gphoto='http://schemas.google.com/photos/2007'> <id> http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389741123981</id> <published>2007-05-23T04:55:52.000Z</published> <updated>2007-05-23T04:55:52.000Z</updated> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#album' /> <title type='text'>Trip To Italy</title> <summary type='text'>This was the recent trip I took to Italy.</summary> <rights type='text'>public</rights> <link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://picasaweb.google.com/data/feed/api/user/brad.gushue/albumid/9810315389741123981' /> <link rel='alternate' type='text/html' href='http://picasaweb.google.com/brad.gushue/TripToItaly' /> <link rel='self' type='application/atom+xml' href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389741123981' /> <link rel='edit' type='application/atom+xml' href='http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389741123981/1179896152905401' /> <author> <name>Brad</name> <uri>http://picasaweb.google.com/brad.gushue</uri> </author> <gphoto:id>9810315389741123981</gphoto:id> <gphoto:name>TripToItaly</gphoto:name> <gphoto:location></gphoto:location> <gphoto:access>public</gphoto:access> <gphoto:timestamp>1179896152000</gphoto:timestamp> <gphoto:numphotos>0</gphoto:numphotos> <gphoto:numphotosremaining>500</gphoto:numphotosremaining> <gphoto:bytesUsed>0</gphoto:bytesUsed> <gphoto:user>brad.gushue</gphoto:user> <gphoto:nickname>Brad</gphoto:nickname> <gphoto:commentingEnabled>true</gphoto:commentingEnabled> <gphoto:commentCount>0</gphoto:commentCount> <media:group> <media:title type='plain'>Trip To Italy</media:title> <media:description type='plain'>This was the recent trip I took to Italy.</media:description> <media:keywords></media:keywords> <media:content url='http://lh5.google.com/brad.gushue/ADFUFKqeA5E/AAAAAAAAABc/V6Sga_Z03WU/TripToItaly.jpg' type='image/jpeg' medium='image' /> <media:thumbnail url='http://lh5.google.com/brad.gushue/ADFUFKqeA5E/AAAAAAAAABc/V6Sga_Z03WU/s160-c/TripToItaly.jpg' height='160' width='160' /> <media:credit>Brad</media:credit> </media:group> </entry>
2. Измените запись шаблона.
Мы хотим создать альбом под названием «Кёрлинг в Канаде» с фотографиями с нашего недавнего матча по кёрлингу. Google Data позволяет удалять элементы Atom, значения для которых предоставляет сервер, поэтому для создания этого простого шаблона записи мы удалим atom:id
, atom:published
, atom:updated
, atom:author
и различные элементы atom:link
из ленты. Это позволит нам получить урезанную запись шаблона. Затем запись нужно изменить, чтобы она соответствовала новому альбому, который мы создаём:
<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gphoto='http://schemas.google.com/photos/2007'> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#album' /> <title type='text'>Curling in Canada</title> <summary type='text'>Pictures of all my curling matches in Canada.</summary> <gphoto:location>Canada</gphoto:location> <gphoto:access>public</gphoto:access> <gphoto:commentingEnabled>true</gphoto:commentingEnabled> </entry>
Примечание : Не забудьте включить все определения пространств имён XML, которые используются в качестве атрибутов элемента atom:entry
при публикации новой записи. Отсутствие этих определений приведёт к исключениям при парсинге. Кроме того, tidy
заменит пробелы между определениями пространств имён символами новой строки. Хотя это допустимый XML, сервисы Google Data в настоящее время его не принимают. Если вы используете tidy
, обязательно добавьте дополнительные пробелы между этими атрибутами в элементе entry
.
3. Размещение новой записи на сервере
Команда curl
для публикации новой записи на сервере очень похожа на обновление существующей записи, за исключением того, что URL-адрес отличается:
curl --silent --request POST --data-binary "@template_entry.xml" --header "Content-Type: application/atom+xml" --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/brad.gushue" | tidy -xml -indent -quiet
Если публикация прошла успешно, полученный XML-файл будет копией только что созданной записи. Эта запись будет содержать данные, сгенерированные сервером во время её создания, включая значения элементов atom:id
, atom:published
, atom:updated
и atom:link
. Полученные значения link
можно использовать для редактирования или удаления записи, если за это время не будут внесены дополнительные изменения.
Удаление записей
Удаление записей очень похоже на обновление, за исключением того, что вместо HTTP-метода HTTP PUT
метод HTTP DELETE
, и отправка данных не требуется. Как и в случае с запросом на обновление, в качестве цели HTTP-запроса используется URL-адрес edit
.
curl --silent --request DELETE --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456"
Загрузка медиа-объектов
Важной функцией API данных веб-альбомов Picasa и API данных списка документов является возможность загрузки двоичных объектов. cURL легко справляется с загрузкой двоичных данных и заголовка-слага. Однако API данных списка документов в настоящее время требует отправки XML вместе с двоичными данными в виде составного сообщения MIME. Формирование составного сообщения выходит за рамки данной статьи.
В примере ниже показано, как загрузить изображение с названием sweeping_the_rock.png
в веб-альбом Picasa под названием «Sweeping the rock»:
curl --silent --request POST --data-binary "@sweeping_the_rock.png" --header "Slug: Sweeping the rock" --header "Content-Type: image/png" --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/brad.gushue/albumid/5113621341847124417" | tidy -xml -indent -quiet
Другие инструменты командной строки
Некоторые разработчики предпочитают изучать или отлаживать код, используя другие инструменты командной строки.
Популярные инструменты включают в себя:
- Telnet и OpenSSL используются для создания сырых сокет-подключений (обычного текстового и SSL-подключений соответственно) к веб-серверам и могут использоваться для взаимодействия со службами Google Data. Обратите внимание, что не все службы Google Data поддерживают SSL. Вот как открыть соединения:
-
telnet picasaweb.google.com 80
(API данных веб-альбомов Picasa) -
openssl s_client -connect www.google.com:443
(API данных Календаря Google и других служб на www.google.com)
При отправке необработанных HTTP-данных имейте в виду, что операцииPOST /data/feed/api/user/brad.gushue HTTP/1.1 Host: picasaweb.google.com Authorization: GoogleLogin auth=ABCDEFG Content-Length: 493 <entry xmlns='http://www.w3.org/2005/Atom' xmlns:gphoto='http://schemas.google.com/photos/2007'> <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/photos/2007#album' /> <title type='text'>Curling in Canada</title> <summary type='text'>Pictures of all my curling matches in Canada.</summary> <gphoto:location>Canada</gphoto:location> <gphoto:access>public</gphoto:access> <gphoto:commentingEnabled>true</gphoto:commentingEnabled> </entry>
POST
иPUT
потребуют вычисления значения заголовкаContent-Length
. Для вычисления этого значения можно использовать UNIX-утилитуwc
. Поместите всё содержимое тела HTTP-запроса в текстовый файл, например,template_entry.xml
(пример приведен выше), и выполните командуwc -c template_entry.xml
. Отладка часто бывает затруднительной, если вы случайно используете неверное значение заголовкаContent-Length
. -
- wget обычно используется для загрузки данных с веб-сервера в локальный файл. Однако
wget
обладает множеством возможностей, позволяющих ему выполнять все типы запросов, необходимые для взаимодействия со службами Google Data. Вот пример использованияwget
для отправки новой записи альбома в Picasa Web Albums методомPOST
:wget --post-file template_entry.xml --header "Authorization: GoogleLogin auth=ABCDEFG" --header "Content-Type: application/atom+xml" "http://picasaweb.google.com/data/feed/api/user/brad.gushue"
- xsltproc — это инструмент для применения XSL-преобразований ( XSLT ) к XML-документам. Его можно использовать для простого извлечения нужных фрагментов данных из XML-записи или фида, возвращаемых API Google Data, а также для создания новых или обновлённых записей.
Заключение
Как вы уже видели, cURL и ряд других инструментов командной строки можно использовать для лёгкого взаимодействия со службами Google Data с помощью необработанного XML и HTTP. Если у вас есть вопросы об использовании этих инструментов с вашим любимым API Google Data, присоединяйтесь к нам на форумах, посвящённых API.