Korzystanie z cURL do interakcji z usługami Google Data Data

Ostrzeżenie: ta strona dotyczy starszych interfejsów API Google – interfejsów API danych Google – dotyczy tylko interfejsów API wymienionych w katalogu interfejsów API danych Google, z których wiele zostało zastąpionych nowszych. Informacje na temat konkretnego nowego interfejsu API można znaleźć w dokumentacji nowego interfejsu API. Informacje o autoryzowaniu żądań za pomocą nowszego interfejsu API znajdziesz w artykule Uwierzytelnianie i autoryzacja kont Google.

Ryan Boyd, zespół Google Data API
Wrzesień 2007 r.

Wprowadzenie

Interfejsy API danych Google korzystają z plików danych i wpisów Atom (w formacie XML), a protokołu HTTP – jako protokołu transmisji danych. Rozszerzają one protokół Atom Publishing Protocol. Aby ułatwić obsługę interfejsów API danych Google, publikujemy wiele bibliotek klienckich. Zawsze jednak możesz korzystać z narzędzi niższego poziomu, aby współpracować z naszymi usługami. Są tam proste wskazówki.

cURL to aplikacja wiersza poleceń umożliwiająca wykonywanie żądań za pomocą różnych protokołów, w tym HTTP. cURL jest często używany przez deweloperów do testowania usług danych Google, ponieważ obsługuje on funkcję HTTP wymaganą do interakcji z interfejsami API na niskim poziomie.

cURL obsługuje tylko połączenia HTTP, więc znajomość protokołu danych Google, protokołu dotyczącego danej usługi i używanego formatu danych XML jest warunkiem wstępnym do pracy z aplikacją. Inne, o których mowa w tym artykule, ułatwiają te zadania.

W tym artykule użyto przykładów opartych na interfejsie API danych usługi Picasa Web Albums. Wszystkie te przykłady można z łatwością zastosować do innych interfejsów API danych Google.

Uzyskiwanie i instalowanie cURL

cURL jest często dostępny podczas instalacji domyślnej na wielu platformach UNIX/Linux. Wpisz curl w ulubionej powłoce, aby sprawdzić, czy narzędzie jest zainstalowane i czy znajduje się w: PATH. Jeśli nie masz tego narzędzia, odwiedź stronę pobierania w witrynie cURL, aby pobrać oficjalne źródło lub plik binarny przesłany przez użytkownika. Pamiętaj, że narzędzie wiersza poleceń korzysta z biblioteki libcurl, która może być dostępna jako oddzielny pakiet do pobrania, więc jeśli nie kompilujesz kodu ze źródła, pamiętaj, aby pobrać pakiet „binarny” zamiast pakietu „libcurl”. Pakiety z obsługą SSL są wymagane, jeśli chcesz używać cURL do pozyskiwania tokenów uwierzytelniania lub do korzystania z niektórych usług danych Google, które wymagają żądań SSL.

Uwierzytelnianie w usłudze danych Google

Żądania uwierzytelniania danych Google są realizowane przez dodanie do żądania nagłówka HTTP, który zawiera token uwierzytelniania ClientLogin (aplikacje na komputery/aplikacje mobilne) lub AuthSub (aplikacje internetowe). Do testowania za pomocą narzędzia cURL użyj interfejsu ClientLogin. Jest to łatwiejsza metoda, którą można znaleźć poniżej. Z nagłówków uwierzytelniania AuthSub można korzystać w przypadku obiektu cURL, ale zaawansowane procedury pozyskiwania tokenów są poza zakresem tego artykułu.

Przy użyciu ClientLogin

Usługa ClientLogin jest przeznaczona do zainstalowanych aplikacji (na komputery/urządzenia mobilne). W przypadku tej metody uwierzytelniania aplikacja korzystająca z interfejsów Google Data API bezpośrednio obsługuje nazwę użytkownika i hasło.

Żądanie uwierzytelniania ClientLogin używa nazwy użytkownika, hasła i nazwy usługi jako zmiennych posta formularza. Zmienne te są przekazywane odpowiednio jako argumenty Email, Passwd i service. To żądanie zwraca odpowiedź z kilkoma tokenami. Jeden z nich może służyć do wysyłania żądań do usługi danych Google. Pamiętaj, że argumenty danych przekazywane z funkcją curl muszą być zakodowane w adresie URL, jeśli zawierają znaki spoza zestawu ASCII, które często występują w argumentach Email i Passwd. Możesz poprosić curl o zakodowanie adresu URL w tych argumentach, używając flagi --data-urlencode.

Przykładowe żądanie:

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

Przykładowa odpowiedź:

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

Szczegółowe informacje o parametrach używanych w powyższym żądaniu znajdziesz w dokumentacji ClientLogin. W tym przykładzie korzystamy z interfejsu API danych usługi Picasa Web Albums. Nazwa usługi (service) to lh2. Nazwy usług dla innych usług związanych z danymi Google znajdziesz na stronie z najczęstszymi pytaniami dotyczącymi interfejsów API danych Google.

Token Auth w odpowiedzi powyżej to jedyna wartość potrzebna do uwierzytelnienia w usługach danych Google. Wartość tego tokena jest tworzona w nagłówku HTTP, który jest następnie używany w przypadku każdego żądania do usługi danych Google.

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

Uwaga: metoda zmiany znaczenia znaków nowego wiersza przy użyciu znaków ukośnika („/”) powyżej nie działa w powłoce polecenia systemu Windows, więc jeśli używasz systemu curl w Windows, musisz wpisać całe polecenie w jednym wierszu.


Pobieranie kanałów i wpisów

W interfejsach Google Data API pobieranie kanałów i wpisów odbywa się przez przekierowanie HTTP GET na adres URL z opcjonalnym zestawem parametrów zapytania. Wysyłamy żądanie GET, więc do nagłówka curl należy przesłać tylko nagłówek autoryzacji i adres URL. W poniższym przykładzie nadal będzie używany interfejs API danych usługi Picasa Web Albums. Służy on do pobierania listy albumów należących do uwierzytelnionego użytkownika. W tym przykładzie skróciliśmy token uwierzytelniania do ABCDEFG, ale zamiast niego należy używać pełnego tokena (np. EUBBIacA...32JKOuGh powyżej).

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

Zwraca niesformatowany obiekt blob 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>

Istnieją pewne narzędzia, które umożliwiają formatowanie tych danych wyjściowych, by były bardziej zrozumiałe dla człowieka, np. uporządkowany. Najprostszym sposobem korzystania ze porządku jest zapewnienie potoku danych wyjściowych polecenia z adresu curl w taki sposób:

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

Dzięki temu plik danych jest znacznie bardziej czytelny, np. wygląda tak:

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

Poszczególne pozycje można pobierać w ten sam sposób, podając ich adresy URL, a nie adresy URL kanałów.

Aktualizowanie wpisów

Pozycje w interfejsach Google Data API są aktualizowane przez wprowadzenie HTTP PUT do edytowanego adresu URL w treści z nową kopią kodu XML wpisu.

  1. Pobierz wpis za pomocą wartości adresu URL atom:link/@rel='self'
  2. Zaktualizuj wpis lokalnie, aby wprowadzić niezbędne zmiany
  3. PUT wpis z powrotem na serwer, używając wartości adresu URL atom:link/@rel='edit'.

1. Pobieram wpis

Ten wpis można pobrać przy użyciu jednego z 2 adresów URL pogrubionych w powyższym bloku pliku danych. Wymagany adres URL to wartość elementu href elementu link z właściwością rel='self'.

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

2. Lokalna aktualizacja wpisu

Po pobraniu wpisu musisz go zaktualizować przy użyciu lokalnego edytora tekstu lub aplikacji, aby wprowadzić w nim zmiany. W powyższym poleceniu nie pobieramy danych do tidy, jak to robiliśmy w poprzednich przykładach. W rezultacie powstaje plik XML, który reprezentuje te same dane, ale różni się formatem niż wersja przystosowana do tidy. W przypadku ręcznego edytowania wpisu użycie tidy może często ułatwić pracę z plikiem XML.

Uwaga: pamiętaj, aby podczas publikowania nowego wpisu podać wszystkie definicje przestrzeni nazw XML, które są używane jako atrybuty atom:entry. Pominięcie ich spowoduje wyjątki analizy. Ponadto tidy zastąpi spacje między definicjami przestrzeni nazw znakami nowego wiersza. Mimo że jest to prawidłowy kod XML, usługi danych Google obecnie go nie akceptują. Jeśli używasz atrybutu tidy, pamiętaj o dodaniu dodatkowych spacji między tymi atrybutami w elemencie entry.

3. Aktualizowanie wpisu na serwerze

Używając adresu URL edit, musisz PUT kopia kopii wpisu do usługi za pomocą cURL. Nagłówek wskazujący typ treści wysyłanych na serwer musi zostać dodany. W poniższym fragmencie założono, że plik ze zaktualizowanym wpisem jest zapisany w pliku update_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"

Tworzenie wpisów

Wpisy w interfejsach Google Data API tworzy się, wykonując dla adresu URL posta HTTP POST z nowym wpisem. Serwer atom:id jest przypisywany przez serwer, więc nie ma potrzeby dodawania go do nowych wpisów. Najprostszym sposobem utworzenia nowego wpisu jest pobranie starego wpisu i zmodyfikowanie go. Właśnie do tego służy ten przykład.

  1. Pobierz wpis szablonu za pomocą atom:link/@rel='self'
  2. Zmodyfikuj wpis szablonu lokalnie, aby usunąć zbędne informacje i wprowadzić niezbędne zmiany.
  3. POST wpis z powrotem na serwer, używając adresu URL post kanału. Można ją znaleźć w pobranym pliku danych jako wartość href elementu link z elementem rel='http://schemas.google.com/g/2005#post' lub w dokumentacji usługi na stronie http://code.google.com.

1. Pobieranie wpisu szablonu

Pojedynczy wpis można pobrać przy użyciu wartości href elementu link z elementem rel='self' w taki sam sposób jak wpis został pobrany przed aktualizacją w powyższym przykładzie.

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

Odpowiedź po użyciu polecenia tidy będzie wyglądać mniej więcej tak:

<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. Zmodyfikuj wpis szablonu

Chcemy utworzyć album „Curling in Canada” ze zdjęciami z naszego ostatniego meczu curlingu. Dane Google umożliwiają pomijanie elementów Atom, które są dostarczane przez serwer. Aby utworzyć prosty wpis szablonu, usuniemy elementy atom:id, atom:published, atom:updated, atom:author i różne elementy atom:link z pliku danych. Daje to nam obcięty obraz szablonu. Wpis należy wtedy dostosować do nowego albumu, który tworzymy:

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

Uwaga: pamiętaj, aby podczas publikowania nowego wpisu podać wszystkie definicje przestrzeni nazw XML, które są używane jako atrybuty atom:entry. Pominięcie ich spowoduje wyjątki analizy. Oprócz tego tidy zastępuje spacje między definicjami przestrzeni nazw, a następnie znakami nowego wiersza. Mimo że jest to prawidłowy kod XML, usługi danych Google obecnie go nie akceptują. Jeśli używasz atrybutu tidy, pamiętaj o dodaniu dodatkowych spacji między tymi atrybutami w elemencie entry.

3. Publikowanie nowego wpisu na serwerze

Polecenie curl do publikowania nowego wpisu na serwerze jest bardzo podobne do aktualizowania istniejącego wpisu z wyjątkiem adresu 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

Jeśli uda się opublikować posta, wynikowy plik XML będzie kopią nowo utworzonego wpisu. Będzie on zawierał elementy wygenerowane przez serwer w momencie jego utworzenia, w tym wartości elementów atom:id, atom:published, atom:updated i atom:link. Otrzymane wartości link mogą być używane do edytowania lub usuwania wpisu, o ile nie zostaną wprowadzone żadne dodatkowe zmiany tymczasowo.

Usuwanie wpisów

Usuwanie wpisów jest bardzo podobne do aktualizowania wpisów. Różnica polega na tym, że zamiast HTTP PUT stosowana jest metoda HTTP DELETE, a wysyłanie danych nie jest wymagane. Podobnie jak w przypadku żądania aktualizacji adres URL w formacie edit jest używany jako cel żądania HTTP.

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

Przesyłanie obiektów multimedialnych

Ważną funkcją interfejsów API danych usługi Picasa Web Albums i interfejsu Documents List Data API jest możliwość przesyłania obiektów binarnych. Funkcja cURL umożliwia łatwe przesyłanie danych binarnych oraz nagłówka końcówki ślimaka. Jednak obecnie interfejs Documents List Data API wymaga publikowania pliku XML wraz z danymi binarnymi w postaci wieloczęściowej wiadomości MIME. Tworzenie wiadomości wieloczęściowej nie obejmuje tego artykułu.

Przykład poniżej pokazuje, jak przesłać zdjęcie o nazwie sweeping_the_rock.png do albumu Picasa Web Albums pod tytułem „Miazga”:

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

Inne narzędzia wiersza poleceń

Niektórzy deweloperzy wolą uczyć się lub debugować za pomocą innych narzędzi wiersza poleceń.

Popularne narzędzia obejmują:

  • Metody telnet, opensl służą do wykonywania nieprzetworzonych połączeń gniazdowych (odpowiednio w postaci zwykłego tekstu i protokołu SSL) na potrzeby serwerów WWW i można ich używać do interakcji z usługami danych Google. Pamiętaj, że nie wszystkie usługi danych Google obsługują protokół SSL. Aby otworzyć połączenia:
    • telnet picasaweb.google.com 80 (interfejs API danych usługi Picasa Web Albums)
    • openssl s_client -connect www.google.com:443 (interfejs API danych Kalendarza Google i inne usługi na www.google.com)
    Po nawiązaniu połączenia musisz wysłać nieprzetworzone żądanie HTTP. To żądanie zawiera czasownik HTTP, ścieżkę względną, wersję, wszystkie nagłówki i treści żądania. Oto przykład:
    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>
    
    Wysyłając nieprzetworzone dane HTTP, pamiętaj, że operacje POST i PUT będą wymagały obliczenia wartości nagłówka Content-Length. Do obliczenia tej wartości możesz użyć narzędzia UNIX wc. Umieść całą zawartość HTTP w pliku tekstowym takim jak template_entry.xml (przykład powyżej) i uruchom wc -c template_entry.xml. Debugowanie często jest trudne, jeśli przypadkowo użyjesz nieprawidłowej wartości nagłówka Content-Length.
  • Parametr wget zwykle służy do pobierania danych z serwera WWW do pliku lokalnego. wget ma jednak wiele opcji, które pozwalają wykonywać różne typy żądań potrzebnych do interakcji z usługami dotyczącymi danych Google. Oto przykład, w jaki sposób użyć funkcji wget do POST dodania nowego wpisu albumu do Picasa Web Albums:
    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"
    
  • gcloudtproc to narzędzie do przekształcania plików XSL (XSLT) z dokumentami XML. Można go użyć do łatwego wyodrębniania wybranych fragmentów danych z wpisu XML lub kanału zwracanego przez interfejsy API danych Google, a także do generowania nowych lub zaktualizowanych wpisów.

Podsumowanie

Jak wiesz, można użyć narzędzia cURL i kilku innych narzędzi wiersza poleceń do interakcji z usługami Google Data przy użyciu nieprzetworzonych plików XML i HTTP. Jeśli masz pytania dotyczące korzystania z tych narzędzi w ulubionym interfejsie API danych Google, odwiedź nasze fora poświęcone interfejsowi API.