cURL を使用して Google Data サービスとやり取りする

警告: このページでは、Google の古い API である Google Data APIs について説明します。このページは、Google Data APIs ディレクトリに記載されている API にのみ関連しています。これらの API の多くは、新しい API に置き換えられています。特定の新しい API については、その API のドキュメントをご覧ください。新しい API でリクエストを承認する方法については、Google アカウントの認証と認可をご覧ください。

Ryan Boyd、Google Data APIs チーム
2007 年 9 月

はじめに

Google Data APIs は、データ形式として Atom フィードとエントリ(XML)を、データ送信のプロトコルとして HTTP を使用し、Atom Publishing Protocol を拡張しています。Google Data APIs とのやり取りを簡単にするために、さまざまなクライアント ライブラリを公開しています。ただし、下位レベルのツールを使用して Google のサービスを操作することはいつでも可能です。少しのガイダンスがあれば、簡単に操作できます。

cURL は、HTTP などのさまざまなプロトコルを使用してリクエストを実行するためのコマンドライン アプリケーションです。cURL は、API と低レベルでやり取りするために必要な HTTP 機能をサポートしているため、Google Data サービスのテストでデベロッパーがよく使用します。

cURL は HTTP 通信の実行のみをサポートしているため、アプリケーションを操作するには、Google Data プロトコル、サービス固有のプロトコル、使用される XML データ形式に関する知識が必要です。この記事では、これらのタスクを簡単に行うためのツールもいくつか紹介します。

この記事では、Picasa ウェブ アルバム データ API に基づく例を使用します。ただし、これらの例はすべて、他の Google Data API に簡単に適用できます。

cURL の取得とインストール

cURL は、多くの UNIX/Linux プラットフォームのデフォルトのインストールで一般的に使用できます。お気に入りのシェルに curl と入力して、ツールがインストールされ、PATH にあるかどうかを確認します。ツールがインストールされていない場合は、cURL ウェブサイトダウンロード ページにアクセスして、公式ソースまたはユーザー提供のバイナリ パッケージを入手してください。コマンドライン ツールは libcurl ライブラリを使用します。これは別のダウンロード パッケージとして提供される場合があります。ソースからコンパイルしない場合は、libcurl パッケージではなくバイナリ パッケージをダウンロードしてください。cURL を使用して認証トークンを取得する場合や、リクエストに SSL の使用が必要な一部の Google データサービスにアクセスする場合は、SSL 対応パッケージが必要です。

Google Data Service への認証

認証済みの Google データ リクエストは、ClientLogin(デスクトップ/モバイルアプリ)または AuthSub(ウェブアプリ)認証トークンを含む HTTP ヘッダーをリクエストに追加することで実行されます。cURL を使用したテストでは、ClientLogin の方が簡単です。以下にその方法を説明します。AuthSub 認証ヘッダーは cURL で使用できますが、トークンを取得するより高度なプロセスはこの記事の範囲外です。

ClientLogin の使用

ClientLogin は、インストールされた(デスクトップ/モバイル)アプリケーションを対象としています。この認証方法では、Google Data API を使用するアプリケーションがユーザーのユーザー名とパスワードを直接処理します。

ClientLogin の認証リクエストでは、ユーザー名、パスワード、サービス名がフォーム投稿変数として使用されます。これらの変数は、それぞれ EmailPasswdservice の引数として渡されます。このリクエストは、複数のトークンを含むレスポンスを返します。そのうちの 1 つを使用して、Google Data サービスにリクエストを行うことができます。curl で渡されるデータ引数に非 ASCII 文字が含まれている場合は、URL エンコードする必要があります。非 ASCII 文字は Email 引数と Passwd 引数でよく使用されます。--data-urlencode フラグを使用すると、curl にこれらの引数を URL エンコードするように指示できます。

リクエストの例:

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 のドキュメントをご覧ください。この例では、Picasa ウェブ アルバム データ API を使用しています。サービス名(service)は lh2 です。他の Google Data サービスのサービス名は、Google Data APIs のよくある質問ページで確認できます。

上記のレスポンスの Auth トークンの値は、Google データ サービスに対する認証に必要な唯一の値です。このトークンの値は 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 コマンド シェルでは機能しません。そのため、Windows で curl を実行する場合は、コマンド全体を 1 行で入力する必要があります。


フィードとエントリの取得

Google Data APIs では、URL に対して HTTP GET を実行し、必要に応じて一連のクエリ パラメータを指定することで、フィードとエントリを取得します。GET リクエストを実行するため、認証ヘッダーと URL のみが curl に渡される必要があります。以下の例では、引き続き Picasa Web Albums Data API を使用して、認証済みユーザーが所有するアルバムのリストを取得します。この例では認証トークンを ABCDEFG に短縮していますが、実際には完全なトークン(上記の EUBBIacA...32JKOuGh など)を使用する必要があります。

curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/default"

これにより、フォーマットされていない XML の blob が返されます。

<?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 APIs のエントリは、リクエストの本文にエントリの XML の新しいコピーを指定して編集 URL に HTTP PUT を実行することで更新されます。

  1. atom:link/@rel='self' URL 値を使用してエントリを取得する
  2. エントリをローカルで更新して必要な変更を行う
  3. atom:link/@rel='edit' URL 値を使用して、エントリをサーバーに PUT します。

1. エントリを取得する

エントリは、上記のフィード ブロックで太字で示されている 2 つの URL のいずれかを使用して取得できます。必要な URL は、rel='self' を含む link 要素の href 値です。

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 の操作が簡単になることがよくあります。

: 新しいエントリを投稿する際は、atom:entry の属性として使用されるすべての XML 名前空間定義を含めるようにしてください。これらを省略すると、解析例外が発生します。また、tidy は、名前空間定義間のスペースを改行文字に置き換えます。これは有効な XML ですが、現時点では Google Data サービスでは受け付けられません。tidy を使用している場合は、entry 要素でこれらの属性の間にスペースを追加してください。

3. サーバー上のエントリを更新する

edit URL を使用して、cURL でエントリのコピーをサービスに PUT します。サーバーに送信されるコンテンツのタイプを示すヘッダーを追加する必要があります。次のスニペットは、更新されたエントリを含むファイルが 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 APIs のエントリは、新しいエントリを使用して投稿 URL に HTTP POST を行うことで作成されます。atom:id はサーバーによって割り当てられるため、新しいエントリに含める必要はありません。新しいエントリを作成する最も簡単な方法は、古いエントリを取得して変更することです。次の例では、まさにそれを行います。

  1. atom:link/@rel='self' を使用してテンプレート エントリを取得します。
  2. テンプレート エントリをローカルで変更して、不要な情報を削除し、必要な変更を加えます。
  3. POST フィードの post URL を使用して、エントリをサーバーに返します。これは、取得したフィードの rel='http://schemas.google.com/g/2005#post' を含む link 要素の href 値として、または http://code.google.com のサービスのドキュメントに記載されています。

1. テンプレート エントリを取得する

単一のエントリは、上記の例で更新前にエントリを取得したのと同じ方法で、rel='self' を含む link 要素の href 値を使用して取得できます。

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:idatom:publishedatom:updatedatom: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>

: 新しいエントリを投稿する際は、atom:entry の属性として使用されるすべての XML 名前空間定義を含めるようにしてください。これらを省略すると、解析例外が発生します。また、tidy は、Namespace 定義間のスペースを改行文字に置き換えます。これは有効な 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:idatom:publishedatom:updatedatom:link 要素の値が含まれます。結果の link 値は、その間に追加の変更が行われない限り、エントリの編集または削除に使用できます。

エントリの削除

エントリの削除はエントリの更新とよく似ていますが、HTTP PUT の代わりに HTTP DELETE メソッドが使用され、送信するデータは必要ありません。更新リクエストと同様に、edit URL が HTTP リクエストのターゲットとして使用されます。

curl --silent --request DELETE --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456"

メディア オブジェクトのアップロード

Picasa ウェブアルバム データ API とドキュメント リスト データ API の重要な機能は、バイナリ オブジェクトをアップロードできることです。cURL を使用すると、バイナリデータとスラッグ ヘッダーを簡単にアップロードできます。ただし、Documents List データ API では現在、XML とバイナリデータを MIME マルチパート メッセージとして投稿する必要があります。マルチパート メッセージの作成は、この記事の対象外です。

次の例は、sweeping_the_rock.png という名前の写真を「Sweeping the rock」というタイトルの Picasa ウェブ アルバムにアップロードする方法を示しています。

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(Picasa ウェブ アルバム データ API)
    • openssl s_client -connect www.google.com:443(Google カレンダー データ API と 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 を使用して新しいアルバム エントリを Picasa ウェブ アルバムに 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 は、XML ドキュメントに XSL 変換(XSLT)を適用するツールです。このライブラリを使用すると、Google Data API から返された XML エントリやフィードから必要なデータを簡単に抽出したり、新しいエントリや更新されたエントリを生成したりできます。

まとめ

ご覧のとおり、cURL やその他のコマンドライン ツールを使用すると、未加工の XML と HTTP を使用して Google Data サービスを簡単に操作できます。お気に入りの Google Data API でこれらのツールを使用する方法についてご不明な点がある場合は、API 固有のフォーラムにご参加ください。