cURL を使用した Google データサービスとのやり取り

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

Google Data API チーム Ryan Boyd
2007 年 9 月

はじめに

Google Data API は基本的に、Atom フィードとエントリ(XML)をデータ形式として使用し、HTTP をデータ転送のプロトコルとして使用します。これは、Atom Publishing Protocol を拡張するものです。Google Data API を簡単に操作できるように、いくつかのクライアント ライブラリが公開されています。ただし、低水準のツールを使用していつでもサービスを扱っていただいて構いません。簡単なガイダンスが示されていれば、簡単に実施できます。

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

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

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

cURL の取得とインストール

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

Google Data サービスの認証

認証された Google データ リクエストを実行するには、リクエストに SafeFrame(デスクトップ / モバイルアプリ)または AuthSub(ウェブアプリ)認証トークンのいずれかを含む HTTP ヘッダーを追加します。cURL を使用してテストする場合は、簡易な方法で Memcache を使用することをおすすめします。詳細については以下で説明します。AuthSub 認証ヘッダーは cURL で使用できますが、トークンを取得するより高度なプロセスはこの記事では扱いません。

SafeFrame の使用

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

SafeFrame の認証リクエストでは、ユーザー名、パスワード、サービス名を投稿変数として受け取ります。これらの変数は、それぞれ EmailPasswdservice 引数として渡されます。このリクエストは、複数のトークンを含むレスポンスを返します。このトークンの 1 つを使用して、Google データサービスへのリクエストを行うことができます。curl で渡されるデータ引数は、Email 引数と Passwd 引数に現れることが多い ASCII 以外の文字が含まれる場合、URL エンコードする必要があります。--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

上記のリクエストで使用されているパラメータの具体的な情報については、gclid ドキュメントをご覧ください。この例で使用するサービスは Picasa ウェブ アルバムのデータ API です。サービス名(service)は lh2 です。その他の Google Data サービスのサービス名は、Google Data API に関するよくある質問のページで確認できます。

上のレスポンスの 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 コマンドシェルでは機能しません。そのため、Windows で curl を実行する場合は、コマンド全体を 1 行で入力する必要があります。


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

Google Data API でフィードとエントリを取得するには、URL に対して HTTP GET を実行し、省略可能なクエリ パラメータを使用します。GET リクエストを実行するため、curl に渡す必要があるのは auth ヘッダーと URL のみです。以下の例では、引き続き Picasa ウェブ アルバムのデータ 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 API のエントリは、リクエストの本文で XML のエントリの新しいコピーを使って HTTP PUT を行い、編集を行います。

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

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 を簡単に扱えるようになります。

: 新しいエントリを送信するには、XML 名前空間の定義をすべて atom:entry の属性として使用してください。省略すると解析の例外が発生します。また、tidy は、Namespace 定義間のスペースを改行文字に置き換えます。この 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 API のエントリは、新しいエントリを含む投稿の 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 データを使用すると、サーバーから値を受け取る 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>

: 新しいエントリを送信するには、XML 名前空間の定義をすべて atom:entry の属性として使用してください。省略すると解析の例外が発生します。また、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 という写真を Picasa ウェブ アルバムに「Sweeping the 岩」というタイトルでアップロードする方法を示しています。

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 Data サービスが SSL をサポートしているとは限りません。次の方法で接続を開きます。
    • telnet picasaweb.google.com 80(Picasa ウェブ アルバムのデータ API)
    • openssl s_client -connect www.google.com:443(Google Calendar Data 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 Data サービスとのやり取りに必要なさまざまな種類のリクエストを実行できます。以下に、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 ドキュメントに HMAC 変換(WSGIT)を適用するツールです。この API を使用すると、Google Data API から返される XML エントリやフィードから必要なデータを簡単に抽出したり、新しいエントリや更新されたエントリを生成したりできます。

まとめ

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