Использование cURL для взаимодействия со службами данных Google

Предупреждение . Эта страница посвящена старым API Google, API данных Google; это относится только к API, которые перечислены в каталоге API данных Google , многие из которых были заменены более новыми API. Для получения информации о конкретном новом API см. документацию по новому API. Информацию об авторизации запросов с помощью более нового API см. в разделе Аутентификация и авторизация учетных записей Google .

Райан Бойд, команда Google Data API
сентябрь 2007 г.

Введение

По сути, Google Data API используют фиды и записи Atom (XML) в качестве формата данных и HTTP в качестве протокола для передачи данных, расширяя протокол публикации Atom . Мы публикуем ряд клиентских библиотек , чтобы упростить взаимодействие с Google Data API. Тем не менее, вы всегда можете использовать инструменты более низкого уровня для работы с нашими службами, и это довольно легко сделать с небольшим руководством.

cURL — это приложение командной строки для выполнения запросов с использованием различных протоколов, включая HTTP. cURL часто используется разработчиками для тестирования сервисов данных Google, поскольку он поддерживает функции HTTP, необходимые для взаимодействия с API на низком уровне.

cURL поддерживает только HTTP-связь, поэтому знание протокола Google Data , протокола для конкретной службы и используемого формата данных XML является необходимым условием для работы с приложением. В этой статье упоминаются некоторые другие инструменты для облегчения этих задач.

В этой статье используются примеры, основанные на API данных Веб-альбомов Picasa. Однако все эти примеры можно легко применить к другим API данных Google .

Получение и установка cURL

cURL обычно доступен при установке по умолчанию на многих платформах UNIX/Linux. Попробуйте ввести curl в вашей любимой оболочке, чтобы увидеть, установлен ли инструмент и находится ли он в вашем PATH . Если у вас не установлен этот инструмент, посетите страницу загрузки на веб-сайте cURL , чтобы получить официальный исходный код или двоичный пакет, созданный пользователем. Обратите внимание, что инструмент командной строки использует библиотеку libcurl , которая может быть предложена как отдельный загружаемый пакет, поэтому, если вы не компилируете из исходного кода, обязательно загрузите «двоичный» пакет вместо пакета «libcurl». . Пакеты с поддержкой SSL необходимы, если вы хотите использовать cURL для получения токенов аутентификации или для доступа к некоторым службам данных Google, которые требуют использования SSL для запросов.

Аутентификация в службе данных Google

Аутентифицированные запросы данных Google выполняются путем добавления заголовка HTTP к запросу, который содержит токен аутентификации ClientLogin (настольные/мобильные приложения) или AuthSub (веб-приложения). В целях тестирования с использованием cURL ClientLogin является более простым методом и описан ниже. Заголовки аутентификации AuthSub можно использовать с cURL, но более сложный процесс получения токенов выходит за рамки этой статьи.

Использование ClientLogin

ClientLogin предназначен для установленных (настольных/мобильных) приложений. При использовании этого метода аутентификации приложение, использующее API данных Google, напрямую обрабатывает имя пользователя и пароль пользователя.

Запрос проверки подлинности для ClientLogin принимает имя пользователя, пароль и имя службы в качестве переменных сообщения формы. Эти переменные передаются как аргументы Email , Passwd и service соответственно. Этот запрос дает ответ с несколькими токенами, один из которых можно использовать для запросов к службе данных Google. Обратите внимание, что аргументы данных, передаваемые с помощью 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. Имя службы ( service ) -- lh2 . Названия служб для других служб данных Google можно найти на странице часто задаваемых вопросов API данных Google .

Значение токена Auth в приведенном выше ответе — единственное значение, необходимое для аутентификации в службах данных Google. Значение этого токена формируется в заголовок HTTP, который затем используется для каждого запроса к службе данных Google.

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-адрес фида.

Обновление записей

Записи в Google Data API обновляются путем выполнения HTTP PUT для URL редактирования с новой копией XML записи в теле запроса.

  1. Получить запись, используя значение URL-адреса atom:link/@rel='self'
  2. Обновите запись локально, чтобы внести необходимые изменения
  3. PUT запись обратно на сервер, используя значение URL-адреса atom: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 в настоящее время не принимают его. Если вы используете 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"

Создание записей

Записи в Google Data API создаются путем выполнения HTTP POST к URL-адресу публикации с новой записью. atom:id назначается сервером, и поэтому нет необходимости включать его в новые записи. Самый простой способ создать новую запись — взять старую запись и изменить ее. Следующий пример сделает именно это.

  1. Получить запись шаблона с помощью atom:link/@rel='self'
  2. Измените запись шаблона локально, чтобы удалить ненужную информацию и внести необходимые изменения.
  3. 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 позволяют вам удалять элементы 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 в настоящее время не принимают его. Если вы используете 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 PUT используется метод HTTP DELETE , и никаких данных отправлять не требуется. Также как и запрос на обновление, URL-адрес edit используется в качестве цели HTTP-запроса.

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 может легко выполнить загрузку двоичных данных и заголовка slug. Однако 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. Обратите внимание, что не все службы данных Google могут поддерживать SSL. Вот как вы открываете соединения:
    • telnet picasaweb.google.com 80 (API данных Веб-альбомов Picasa)
    • openssl s_client -connect www.google.com:443 (API данных Календаря Google и другие службы на www.google.com)
    После установления соединения необходимо отправить необработанный HTTP-запрос. Этот запрос включает глагол 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>
    
    При отправке необработанных данных HTTP имейте в виду, что операции POST и PUT потребуют вычисления значения заголовка Content-Length . Вы можете использовать инструмент UNIX wc для вычисления этого значения. Поместите все содержимое тела HTTP в текстовый файл, такой как template_entry.xml (пример, использованный выше), и запустите wc -c template_entry.xml . Часто трудно отладить, если вы случайно используете неправильное значение для заголовка Content-Length .
  • wget обычно используется для загрузки данных с веб-сервера в локальный файл. Тем не менее, wget есть множество опций, которые позволяют ему выполнять все типы запросов, необходимых для взаимодействия со службами данных Google. Вот пример того, как использовать wget для POST новой записи альбома в Веб-альбомы Picasa:
    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, или для создания новых или обновленных записей.

Заключение

Как вы видели, cURL и несколько других инструментов командной строки можно использовать для простого взаимодействия со службами данных Google с использованием необработанного XML и HTTP. Присоединяйтесь к нам на форумах, посвященных API, если у вас есть какие-либо вопросы об использовании этих инструментов с вашим любимым API данных Google.