cURL für die Interaktion mit Google Data-Diensten verwenden

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

Ryan Boyd, Google Data APIs-Team
September 2007

Einführung

Google Data APIs verwenden im Kern Atom-Feeds und -Einträge (XML) als Datenformat und HTTP als Protokoll für die Datenübertragung. Dadurch wird das Atom Publishing Protocol erweitert. Wir veröffentlichen eine Reihe von Clientbibliotheken, um die Interaktion mit Google Data APIs zu vereinfachen. Für die Arbeit mit unseren Diensten können Sie jedoch jederzeit gerne mit Tools unterer Ebenen arbeiten. Das lässt sich leicht umsetzen.

cURL ist eine Befehlszeilenanwendung zum Ausführen von Anfragen mit einer Vielzahl von Protokollen, einschließlich HTTP. cURL wird häufig von Entwicklern zum Testen von Google Data-Diensten verwendet, da es die HTTP-Funktionalität unterstützt, die für die Interaktion mit den APIs auf niedriger Ebene erforderlich ist.

cURL unterstützt nur die HTTP-Kommunikation. Kenntnisse über das Google-Datenprotokoll, das dienstspezifische Protokoll und das verwendete XML-Datenformat sind daher eine Voraussetzung für die Arbeit mit der Anwendung. Einige andere Tools werden in diesem Artikel erwähnt, um diese Aufgaben zu vereinfachen.

In diesem Artikel werden Beispiele verwendet, die auf der Daten-API von Picasa-Webalben basieren. Alle diese Beispiele lassen sich jedoch problemlos auf andere Google Data APIs anwenden.

cURL abrufen und installieren

cURL ist in der Regel auf vielen UNIX- und Linux-Plattformen verfügbar. Gib curl in deiner bevorzugten Shell ein, um herauszufinden, ob das Tool in deinem PATH installiert ist. Wenn das Tool nicht installiert ist, rufen Sie die Downloadseite auf der cURL-Website auf, um die offizielle Quelle oder ein von Nutzern bereitgestelltes Binärpaket zu erhalten. Beachten Sie, dass das Befehlszeilentool die Bibliothek libcurl verwendet. Diese kann als separates Downloadpaket angeboten werden. Wenn Sie also nicht aus der Quelle kompilieren, müssen Sie ein Binärpaket anstelle eines libcurl-Pakets herunterladen. Die SSL-fähigen Pakete sind erforderlich, wenn Sie cURL verwenden möchten, um Authentifizierungstokens zu erhalten oder um auf einige Google Data-Dienste zuzugreifen, für die SSL für Anfragen erforderlich ist.

Bei einem Google Data-Dienst authentifizieren

Bei authentifizierten Google-Datenanfragen wird der Anfrage ein HTTP-Header hinzugefügt, der entweder ein ClientLogin-Authentifizierungstoken (für Computer und mobile Apps) oder ein AuthSub-Authentifizierungstoken für Webanwendungen enthält. Zum Testen mit cURL ist ClientLogin die einfachere Methode und wird unten dokumentiert. AuthSub-Authentifizierungsheader können mit cURL verwendet werden. Der erweiterte Prozess zum Abrufen der Tokens wird in diesem Artikel jedoch nicht behandelt.

ClientLogin verwenden

ClientLogin ist für installierte (Desktop-/mobile) Anwendungen vorgesehen. Bei dieser Authentifizierungsmethode verarbeitet die Anwendung, die Google Data APIs verwendet, direkt den Nutzernamen und das Passwort des Nutzers.

Für eine Authentifizierungsanfrage für ClientLogin werden ein Nutzername, ein Passwort und ein Dienstname als Formularpostvariablen verwendet. Diese Variablen werden als Argumente Email, Passwd bzw. service übergeben. Diese Anfrage gibt eine Antwort mit mehreren Tokens zurück, von denen eines für Anfragen an den Google Data-Dienst verwendet werden kann. Beachten Sie, dass mit curl übergebene Datenargumente URL-codiert sein müssen, wenn sie Nicht-ASCII-Zeichen enthalten. Diese sind häufig in den Argumenten Email und Passwd enthalten. Sie können curl bitten, diese Argumente mit dem Flag --data-urlencode als 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 in der obigen Anfrage verwendeten Parametern finden Sie in der ClientLogin-Dokumentation. In diesem Beispiel verwenden wir die Daten-API von Picasa-Webalben. Der Dienstname (service) ist lh2. Die Dienstnamen für andere Google Data-Dienste finden Sie auf der Seite mit den häufig gestellten 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 Data-Diensten erforderlich ist. Der Wert dieses Tokens wird in einem HTTP-Header erzeugt, der dann für jede Anfrage an einen Google Data-Dienst 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 Methode zum Umschreiben von Zeilenumbruchzeichen mit umgekehrtem Schrägstrich (\) oben funktioniert nicht in der Windows-Befehlsshell, sodass Sie den gesamten Befehl in einer Zeile eingeben müssen, wenn Sie curl unter Windows ausführen.


Feeds und Einträge abrufen

In Google Data APIs werden Feeds und Einträge abgerufen, indem eine HTTP-GET für eine URL mit einem optionalen Satz von Abfrageparametern ausgeführt wird. 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 Daten-API von Picasa-Webalben verwendet, um eine Liste der Alben des authentifizierten Nutzers abzurufen. In diesem Beispiel wurde das Authentifizierungstoken auf ABCDEFG gekürzt. Statt dessen sollte jedoch das vollständige Token verwendet werden (z. B. EUBBIacA...32JKOuGh).

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, um die Ausgabe zu formatieren, damit sie besser lesbar sind, z. B. aufgeräumt. Am einfachsten verwenden Sie für die Aufräumung die Ausgabe vom Befehl „curl“ in den folgenden Zustand:

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

Der Feed ist dadurch besser lesbar, etwa so:

<?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 im Gegensatz zu einer Feed-URL die URL für den Eintrag angegeben wird.

Einträge aktualisieren

Einträge in Google Data APIs werden aktualisiert, indem ein HTTP PUT an die Bearbeitungs-URL gesendet wird. Dabei wird eine neue Kopie des XML-Eintrags des Eintrags in den Hauptteil der Anfrage aufgenommen.

  1. Rufen Sie den Eintrag mit dem URL-Wert atom:link/@rel='self' ab
  2. Aktualisieren Sie den Eintrag lokal, um die erforderlichen Änderungen vorzunehmen
  3. PUT gibt den Eintrag mithilfe des URL-Werts atom:link/@rel='edit' zurück zum Server

1. Eintrag abrufen

Der Eintrag kann mit einer der beiden URLs abgerufen werden, die im Feedblock oben fett formatiert sind. 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, muss er mit einem lokalen Texteditor oder einer Anwendung aktualisiert werden, um die erforderlichen Änderungen am Eintrag vorzunehmen. Im obigen Befehl zum Abrufen eines Eintrags wurden die Ergebnisse nicht wie in den vorherigen Beispielen an tidy übergeben. Das Ergebnis ist XML, das dieselben Daten darstellt, aber eine andere Formatierung aufweist als die an tidy gesendete Version. Wenn Sie einen Eintrag manuell bearbeiten, kann die Arbeit mit XML oft mit tidy vereinfacht werden.

Hinweis: Bitte denken Sie daran, alle XML-Namespace-Definitionen anzugeben, die beim Posten des neuen Eintrags als Attribute zu atom:entry verwendet werden. Wenn Sie sie weglassen, werden Ausnahmen geparst. Außerdem ersetzt tidy die Leerzeichen zwischen den Namespace-Definitionen durch Zeilenumbruchzeichen. Dies ist zwar ein gültiger XML-Code, wird aber von Google Data-Diensten derzeit nicht akzeptiert. Wenn Sie tidy verwenden, achten Sie darauf, dass Sie zwischen diesen Attributen für das entry-Element zusätzliche Leerzeichen einfügen.

3. Eintrag auf dem Server aktualisieren

Mit der URL edit müssen Sie eine Kopie des Eintrags für den Dienst mithilfe von cURL PUT. Ein Header, der die Art der an den Server gesendeten Inhalte angibt, muss hinzugefügt werden. Im folgenden Snippet wird davon ausgegangen, dass die Datei mit dem aktualisierten Eintrag in der Datei 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 an die Post-URL mit einem neuen Eintrag vorgenommen 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 ihn bearbeiten. Hier ein Beispiel:

  1. 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, um den Eintrag mithilfe der post-URL für den Feed an den Server zurückzugeben. Diese finden Sie 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 auf http://code.google.com.

1. Vorlageneintrag abrufen

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

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 in 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 aus unserem aktuellen Curling-Spiel erstellen. Mit Google-Daten können Sie Atom-Elemente ablegen, für die der Server Werte bereitstellt. Um diesen einfachen Vorlageneintrag zu erstellen, entfernen wir die atom:id-, atom:published-, atom:updated-, atom:author- und die verschiedenen atom:link-Elemente aus dem Feed. Dadurch erhalten wir einen vereinfachten Vorlageneintrag. Der Eintrag muss dann so geändert werden, dass er das von uns erstellte neue Album darstellt:

<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: Bitte denken Sie daran, alle XML-Namespace-Definitionen anzugeben, die beim Posten des neuen Eintrags als Attribute zu atom:entry verwendet werden. Wenn Sie sie weglassen, werden Ausnahmen geparst. Außerdem ersetzt tidy die Leerzeichen zwischen den Namespace-Definitionen und ersetzt sie durch Zeilenumbruchzeichen. Dies ist zwar ein gültiger XML-Code, wird aber von Google Data-Diensten derzeit nicht akzeptiert. Wenn Sie tidy verwenden, achten Sie darauf, dass Sie zwischen diesen Attributen für das entry-Element zusätzliche Leerzeichen einfügen.

3. Neuer Eintrag auf dem Server posten

Der Befehl curl zum Posten eines neuen Eintrags auf dem Server ähnelt der Aktualisierung eines vorhandenen Eintrags, nur dass sich die URL unterscheidet:

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 Post erfolgreich war, ist die daraus resultierende XML-Ausgabe eine Kopie des neu erstellten Eintrags. Dieser Eintrag enthält Elemente, die der Server bei seiner Erstellung generiert hat, einschließlich der Werte für die Elemente atom:id, atom:published, atom:updated und atom:link. Die link-Werte können zum Bearbeiten oder Löschen des Eintrags verwendet werden, sofern bis dahin keine weiteren Änderungen vorgenommen wurden.

Einträge löschen

Das Löschen von Einträgen ist sehr ähnlich wie das Aktualisieren von Einträgen, außer dass eine HTTP DELETE-Methode anstelle einer HTTP PUT-Methode verwendet wird und keine Daten gesendet werden müssen. Ebenso wie die Aktualisierungsanfrage wird die URL edit 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"

Medienobjekte hochladen

Eine wichtige Funktion der Picasa Web Albums Data API und der Documents List Data API ist die Möglichkeit, binäre Objekte hochzuladen. cURL kann problemlos das Hochladen von binären Daten und einem Slug-Header durchführen. Für die Documents List Data API ist es allerdings derzeit erforderlich, XML und die Binärdaten als mehrteilige MIME-Nachricht zu posten. Das Erstellen der mehrteiligen Nachricht wird in diesem Artikel nicht behandelt.

Das folgende Beispiel zeigt, wie Sie ein Bild namens 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

Weitere Befehlszeilentools

Einige Entwickler bevorzugen das Lernen oder Debugging mit anderen Befehlszeilentools.

Beliebte Tools:

  • telnet, openssl werden für die Herstellung von RAW-Socket-Verbindungen (nur Text und ssl-basiert) zu Webservern verwendet und können für die Interaktion mit Google Data-Diensten verwendet werden. SSL wird möglicherweise nicht von allen Google-Datendiensten unterstützt. So öffnen Sie die Verbindungen:
    • telnet picasaweb.google.com 80 (Daten-API für Picasa-Webalben)
    • 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 HTTP-Rohanfrage gesendet werden. Diese Anfrage enthält das HTTP-Verb, den relativen Pfad, die Version, alle Header und den Text der Anfrage. Hier ein 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>
    
    Beachten Sie, dass beim Senden von HTTP-Rohdaten für die Vorgänge POST und PUT der Wert für einen Content-Length-Header berechnet werden muss. Sie können das UNIX-Tool wc verwenden, um diesen Wert zu berechnen. Fügen Sie den gesamten Inhalt des HTTP-Textkörpers in eine Textdatei wie template_entry.xml ein (siehe Beispiel oben) und führen Sie wc -c template_entry.xml aus. Die Fehlerbehebung ist oft schwierig, wenn Sie für den Content-Length-Header versehentlich einen falschen Wert verwenden.
  • wget wird normalerweise verwendet, um Daten von einem Webserver in eine lokale Datei herunterzuladen. wget bietet jedoch viele Optionen, mit denen alle Arten von Anfragen ausgeführt werden können, die für die Interaktion mit Google Data-Diensten erforderlich sind. Hier ein Beispiel für die Verwendung von wget, um einen neuen Albumeintrag in Picasa-Webalben POST zu erstellen:
    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, um XSL-Transformationen (XSLT) auf XML-Dokumente anzuwenden. Sie können damit problemlos gewünschte Bits 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 cURL und einige andere Befehlszeilentools verwenden, um über rohe XML und HTTP mit Google Data-Diensten zu interagieren. Wenn Sie Fragen zur Verwendung dieser Tools mit Ihrer bevorzugten Google Data API haben, können Sie sich in den API-spezifischen Foren anmelden.