Mit cURL mit Google-Datendiensten interagieren

Warnung: Auf dieser Seite geht es um die älteren Google APIs, die Google Data APIs. Sie ist nur für die APIs relevant, die im Google Data APIs-Verzeichnis aufgeführt sind. Viele davon wurden durch neuere APIs ersetzt. Informationen zu einer bestimmten neuen API finden Sie in der Dokumentation der jeweiligen API. Informationen zum Autorisieren von Anfragen mit einer neueren API finden Sie unter Google-Konten – Authentifizierung und Autorisierung.

Ryan Boyd, Google Data APIs Team
September 2007

Einführung

Im Grunde verwenden Google Data APIs Atom-Feeds und -Einträge (XML) als Datenformat und HTTP als Protokoll für die Datenübertragung. Sie erweitern das Atom Publishing Protocol. Wir veröffentlichen eine Reihe von Clientbibliotheken, um die Interaktion mit Google Data APIs zu erleichtern. Sie können jedoch jederzeit Tools auf niedrigerer Ebene verwenden, um mit unseren Diensten zu arbeiten. Mit ein wenig Anleitung ist das ganz einfach.

cURL ist eine Befehlszeilenanwendung zum Ausführen von Anfragen über verschiedene Protokolle, darunter HTTP. cURL wird häufig von Entwicklern zum Testen von Google-Datendiensten verwendet, da es die HTTP-Funktionen unterstützt, die für die Interaktion mit den APIs auf niedriger Ebene erforderlich sind.

cURL unterstützt nur die HTTP-Kommunikation. Daher sind Kenntnisse des Google Data-Protokolls, des dienstspezifischen Protokolls und des verwendeten XML-Datenformats erforderlich, um mit der Anwendung arbeiten zu können. In diesem Artikel werden einige weitere Tools erwähnt, die diese Aufgaben erleichtern.

In diesem Artikel werden Beispiele auf Grundlage der Picasa Web Albums Data API verwendet. Alle diese Beispiele lassen sich jedoch problemlos auf andere Google Data APIs anwenden.

cURL abrufen und installieren

cURL ist in der Regel bei einer Standardinstallation vieler UNIX-/Linux-Plattformen verfügbar. Geben Sie curl in Ihrer bevorzugten Shell ein, um zu prüfen, ob das Tool installiert ist und sich in Ihrem PATH befindet. Wenn das Tool nicht installiert ist, rufen Sie die Downloadseite auf der cURL-Website auf, um die offizielle Quelle oder ein von Nutzern beigesteuertes binäres Paket zu erhalten. Das Befehlszeilentool verwendet die libcurl-Bibliothek, die möglicherweise als separates Downloadpaket angeboten wird. Wenn Sie also nicht aus der Quelle kompilieren, sollten Sie ein „binäres“ Paket anstelle eines „libcurl“-Pakets herunterladen. Die SSL-fähigen Pakete sind erforderlich, wenn Sie cURL verwenden möchten, um Authentifizierungstokens abzurufen oder auf einige Google-Datendienste zuzugreifen, für die SSL für Anfragen erforderlich ist.

Bei einem Google-Datendienst authentifizieren

Authentifizierte Google-Datenanfragen werden ausgeführt, indem der Anfrage ein HTTP-Header hinzugefügt wird, der entweder ein ClientLogin- (Desktop-/Mobilgeräte-Apps) oder ein AuthSub-Authentifizierungstoken (Web-Apps) enthält. Für Tests mit cURL ist ClientLogin die einfachere Methode. Sie wird unten beschrieben. AuthSub-Authentifizierungsheader können mit cURL verwendet werden. Das komplexere Verfahren zum Abrufen der Tokens wird in diesem Artikel jedoch nicht behandelt.

ClientLogin verwenden

ClientLogin ist für installierte Anwendungen (Desktop/Mobilgeräte) vorgesehen. Bei dieser Authentifizierungsmethode werden der Nutzername und das Passwort des Nutzers direkt von der Anwendung verarbeitet, die Google Data APIs verwendet.

Für eine Authentifizierungsanfrage für ClientLogin werden ein Nutzername, ein Passwort und ein Dienstname als Formular-Post-Variablen verwendet. Diese Variablen werden als die Argumente Email, Passwd und service übergeben. Diese Anfrage führt zu einer Antwort mit mehreren Tokens, von denen eines verwendet werden kann, um Anfragen an den Google Data-Dienst zu senden. Datenargumente, die mit curl übergeben werden, müssen URL-codiert werden, wenn sie Nicht-ASCII-Zeichen enthalten. Das ist häufig bei Email- und Passwd-Argumenten der Fall. Sie können curl bitten, diese Argumente mit dem Flag --data-urlencode URL-zu-codieren.

Beispielanfrage:

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

Beispielantwort:

SID=DQAAAHYBADCv2pSv7nflacDNwz3zEDUGtrSvNVDcpkSfddi77b3U5sEaHmP8YLWhmA36F9rk85mL8J5dqo4apn0T1vKz0fPGI9Xtnuet6cuE2ZzYvrNIwbSC_HjTqF4zudNQnnlDuD2wqZT-g1qXI8KhGAQZV4NexHZoQPlabTsGuRZeIBxj1A
LSID=EUBBBIaBADCl-kNxvRVmcQghpt3cqSMfEooKR9flLOUZqwgP9OrZS83gse-KSdTNeXhxsET7FYenDhceP9lIPOmesH-t9qh-AWUHjjMdZEbUNeF9mWyzln6Z-FajaiG-cVFkqW0ZJ8ZbnCP30xXj6xFK6QxaAcqy_9Pej8jhEnxS9E61ftQGPg
Auth=EUBBIacAAADK-kNxvRVmcQghpt3cqSMfEooLNMflLNIQqwgP9OrZS83gs-KSdTNeXhxsET7FYePWmaD8Vsy1V4LSUGMUP48Je2TO8OcjBj6HgAtPhiZeX-gKDfagZDK44j4n-Tkb44nhOnp2_QPSnBj3Z2vYwOEDjjG3Q53aQVC2132JKOuGh

Weitere Informationen zu den Parametern, die in der oben genannten Anfrage verwendet werden, finden Sie in der ClientLogin-Dokumentation. In diesem Beispiel verwenden wir die Picasa Web Albums Data API. Der Dienstname (service) ist lh2. Die Dienstnamen für andere Google Data-Dienste finden Sie auf der Seite Häufig gestellte Fragen zu Google Data APIs.

Der Wert des Auth-Tokens in der obigen Antwort ist der einzige Wert, der für die Authentifizierung bei Google-Datendiensten erforderlich ist. Der Wert dieses Tokens wird in einen HTTP-Header umgewandelt, der dann für jede Anfrage an einen Google-Datendienst verwendet wird.

curl --silent --header "Authorization: GoogleLogin auth=EUBBIacAAADK\
-kNxvRVmcQghpt3cqSMfEooLNMflLNIQqwgP9OrZS83gs-KSdTNeXhxs\
ET7FYePWmaD8Vsy1V4LSUGMUP48Je2TO8OcjBj6HgAtPhiZeX-gKDfag\
ZDK44j4n-Tkb44nhOnp2_QPSnBj3Z2vYwOEDjjG3Q53aQVC2132JKOuGh" \
"http://picasaweb.google.com/data/feed/api/user/default"

Hinweis: Die oben beschriebene Methode zum Escapen von Zeilenumbruchzeichen mit Backslash-Zeichen („\“) funktioniert nicht in der Windows-Befehlsshell. Wenn Sie curl unter Windows ausführen, müssen Sie den gesamten Befehl in einer Zeile eingeben.


Feeds und Einträge abrufen

In Google Data APIs werden Feeds und Einträge durch Ausführen eines HTTP-GET-Vorgangs für eine URL mit einer optionalen Gruppe von Suchparametern abgerufen. Da wir eine GET-Anfrage ausführen, müssen nur der Autorisierungsheader und die URL an curl übergeben werden. Im folgenden Beispiel wird weiterhin die Picasa Web Albums Data API verwendet, um eine Liste der Alben abzurufen, die dem authentifizierten Nutzer gehören. Hinweis: In diesem Beispiel haben wir das Authentifizierungstoken auf ABCDEFG gekürzt. Stattdessen sollte jedoch das vollständige Token (z. B. EUBBIacA...32JKOuGh aus dem obigen Beispiel) verwendet werden.

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

Dadurch wird ein unformatiertes XML-Blob zurückgegeben:

<?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>

Es gibt einige gute Tools, mit denen sich diese Ausgabe formatieren lässt, damit sie besser lesbar ist, z. B. tidy. Am einfachsten ist es, die Ausgabe des curl-Befehls an tidy weiterzuleiten:

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

Das Ergebnis ist ein viel besser lesbarer Feed, wie der folgende:

<?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>

Einzelne Einträge können auf dieselbe Weise abgerufen werden, indem Sie die URL für den Eintrag anstelle einer Feed-URL angeben.

Einträge aktualisieren

Einträge in Google Data APIs werden aktualisiert, indem eine HTTP PUT-Anfrage an die Bearbeitungs-URL mit einer neuen Kopie des XML-Codes des Eintrags im Anfragetext gesendet wird.

  1. Eintrag mit dem URL-Wert atom:link/@rel='self' abrufen
  2. Aktualisieren Sie den Eintrag lokal, um die erforderlichen Änderungen vorzunehmen.
  3. PUT den Eintrag zurück an den Server, wobei der URL-Wert atom:link/@rel='edit' verwendet wird.

1. Eintrag abrufen

Der Eintrag kann über eine der beiden fett gedruckten URLs im Feedblock oben abgerufen werden. Die erforderliche URL ist der href-Wert für das link-Element mit einem rel='self'.

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

2. Eintrag lokal aktualisieren

Nachdem Sie den Eintrag abgerufen haben, müssen Sie ihn mit einem lokalen Texteditor oder einer Anwendung aktualisieren, um die erforderlichen Änderungen vorzunehmen. Im obigen Befehl zum Abrufen eines Eintrags haben wir die Ergebnisse nicht an tidy weitergeleitet, wie in den vorherigen Beispielen. Das Ergebnis ist XML, das dieselben Daten darstellt, aber eine andere Formatierung als die Version hat, die an tidy weitergeleitet wird. Wenn Sie einen Eintrag manuell bearbeiten möchten, kann die Verwendung von tidy die Arbeit mit dem XML-Code oft erleichtern.

Hinweis: Denken Sie daran, alle XML-Namespace-Definitionen einzufügen, die als Attribute für das atom:entry verwendet werden, wenn Sie Ihren neuen Eintrag posten. Wenn Sie diese weglassen, werden Parsing-Ausnahmen ausgelöst. Außerdem werden die Leerzeichen zwischen den Namespace-Definitionen durch Zeilenumbruchzeichen ersetzt.tidy Das ist zwar gültiges XML, wird von Google Data-Diensten aber derzeit nicht akzeptiert. Wenn Sie tidy verwenden, fügen Sie bitte zusätzliche Leerzeichen zwischen diesen Attributen im entry-Element ein.

3. Eintrag auf dem Server aktualisieren

Mit der edit-URL müssen Sie mit cURL eine PUT des Eintrags an den Dienst senden. Es muss ein Header hinzugefügt werden, der den Typ der an den Server gesendeten Inhalte angibt. Im folgenden Snippet wird davon ausgegangen, dass die Datei mit dem aktualisierten Eintrag in „updated_entry.xml“ gespeichert ist.

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"

Einträge erstellen

Einträge in Google Data APIs werden erstellt, indem ein HTTP POST mit einem neuen Eintrag an die Post-URL gesendet wird. Die atom:id wird vom Server zugewiesen und muss daher nicht in neuen Einträgen enthalten sein. Am einfachsten erstellen Sie einen neuen Eintrag, indem Sie einen alten Eintrag ändern. Das folgende Beispiel zeigt, wie das geht.

  1. Einen Vorlageneintrag mit atom:link/@rel='self' abrufen
  2. Bearbeiten Sie den Vorlageneintrag lokal, um unnötige Informationen zu entfernen und die erforderlichen Änderungen vorzunehmen.
  3. POST der Eintrag zurück zum Server, wobei die post-URL für den Feed verwendet wird. Dieser Wert ist entweder im abgerufenen Feed als href-Wert für das link-Element mit einem rel='http://schemas.google.com/g/2005#post' oder in der Dokumentation für den Dienst unter http://code.google.com zu finden.

1. Vorlageneintrag abrufen

Ein einzelner Eintrag kann mit dem href-Wert eines link-Elements mit einem rel='self' abgerufen werden, so wie ein Eintrag vor der Aktualisierung im obigen Beispiel abgerufen wurde.

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

Die Antwort nach Verwendung von tidy sieht etwa so aus:

<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. Vorlageneintrag ändern

Wir möchten ein Album mit dem Namen „Curling in Canada“ mit Bildern von unserem letzten Curling-Spiel erstellen. Mit Google Data können Sie Atom-Elemente entfernen, für die der Server Werte liefert. Um diesen einfachen Vorlageneintrag zu erstellen, entfernen wir die Elemente atom:id, atom:published, atom:updated, atom:author und die verschiedenen atom:link-Elemente im Feed. Dadurch erhalten wir einen reduzierten Vorlageneintrag. Der Eintrag muss dann so geändert werden, dass er das neue Album repräsentiert, das wir erstellen:

<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>

Hinweis: Denken Sie daran, alle XML-Namespace-Definitionen einzufügen, die als Attribute für das atom:entry verwendet werden, wenn Sie Ihren neuen Eintrag posten. Wenn Sie diese weglassen, werden Parsing-Ausnahmen ausgelöst. Außerdem werden die Leerzeichen zwischen den Namespace-Definitionen durch tidy durch Zeilenumbruchzeichen ersetzt. Das ist zwar gültiges XML, wird von Google Data-Diensten aber derzeit nicht akzeptiert. Wenn Sie tidy verwenden, fügen Sie bitte zusätzliche Leerzeichen zwischen diesen Attributen im entry-Element ein.

3. Neuen Eintrag auf dem Server posten

Der curl-Befehl zum Posten eines neuen Eintrags auf dem Server ähnelt dem Aktualisieren eines vorhandenen Eintrags, nur die URL ist anders:

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

Wenn der Beitrag erfolgreich war, ist die resultierende XML-Ausgabe eine Kopie des neu erstellten Eintrags. Dieser Eintrag enthält Elemente, die vom Server zum Zeitpunkt der Erstellung des Eintrags generiert wurden, einschließlich der Werte für die Elemente atom:id, atom:published, atom:updated und atom:link. Die resultierenden link-Werte können verwendet werden, um den Eintrag zu bearbeiten oder zu löschen, sofern in der Zwischenzeit keine zusätzlichen Änderungen vorgenommen werden.

Einträge löschen

Das Löschen von Einträgen ähnelt dem Aktualisieren von Einträgen. Es wird jedoch eine HTTP DELETE-Methode anstelle einer HTTP PUT-Methode verwendet und es müssen keine Daten gesendet werden. Wie bei der Aktualisierungsanfrage wird die edit-URL als Ziel der HTTP-Anfrage verwendet.

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

Media-Objekte hochladen

Ein wichtiges Feature der Picasa Web Albums Data API und der Documents List Data API ist die Möglichkeit, binäre Objekte hochzuladen. Mit cURL können binäre Daten und ein Slug-Header problemlos hochgeladen werden. Für die Documents List Data API ist es derzeit jedoch erforderlich, das XML zusammen mit den Binärdaten als MIME-Multipart-Nachricht zu posten. Das Erstellen der mehrteiligen Nachricht wird in diesem Artikel nicht behandelt.

Im folgenden Beispiel wird gezeigt, wie Sie das Bild sweeping_the_rock.png in ein Picasa-Webalbum mit dem Titel „Sweeping the rock“ hochladen:

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

Andere Befehlszeilentools

Einige Entwickler bevorzugen es, mit anderen Befehlszeilentools zu lernen oder zu debuggen.

Beliebte Tools sind unter anderem:

  • telnet, openssl werden verwendet, um Raw-Socket-Verbindungen (jeweils Nur-Text- und SSL-basiert) zu Webservern herzustellen und mit Google-Datendiensten zu interagieren. Beachten Sie, dass möglicherweise nicht alle Google-Datendienste SSL unterstützen. So öffnen Sie die Verbindungen:
    • telnet picasaweb.google.com 80 (Picasa Web Albums Data API)
    • openssl s_client -connect www.google.com:443 (Google Calendar Data API und andere Dienste auf www.google.com)
    Nachdem die Verbindung hergestellt wurde, muss eine Roh-HTTP-Anfrage gesendet werden. Diese Anfrage enthält das HTTP-Verb, den relativen Pfad, die Version, alle Header und den Text der Anfrage. Beispiel:
    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>
    
    Wenn Sie HTTP-Rohdaten senden, müssen Sie für die Vorgänge POST und PUT den Wert für einen Content-Length-Header berechnen. Sie können diesen Wert mit dem UNIX-Tool wc berechnen. Fügen Sie den gesamten Inhalt des HTTP-Bodys in eine Textdatei wie template_entry.xml (Beispiel oben) ein und führen Sie wc -c template_entry.xml aus. Es ist oft schwierig, Fehler zu beheben, wenn Sie versehentlich einen falschen Wert für den Content-Length-Header verwenden.
  • wget wird in der Regel verwendet, um Daten von einem Webserver in eine lokale Datei herunterzuladen. wget bietet jedoch viele Optionen, mit denen alle verschiedenen Arten von Anfragen ausgeführt werden können, die für die Interaktion mit Google-Datendiensten erforderlich sind. Hier ist ein Beispiel für die Verwendung von wget zum POST eines neuen Albumeintrags in Picasa-Webalben:
    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 ist ein Tool zum Anwenden von XSL-Transformationen (XSLT) auf XML-Dokumente. Damit lassen sich ganz einfach gewünschte Daten aus einem XML-Eintrag oder -Feed extrahieren, der von Google Data APIs zurückgegeben wird, oder neue oder aktualisierte Einträge generieren.

Fazit

Wie Sie gesehen haben, können Sie mit cURL und einigen anderen Befehlszeilentools ganz einfach mit Google-Datendiensten interagieren, indem Sie rohes XML und HTTP verwenden. Wenn Sie Fragen zur Verwendung dieser Tools mit Ihrer bevorzugten Google Data API haben, wenden Sie sich bitte an die API-spezifischen Foren.