Aviso: esta página é sobre as APIs mais antigas do Google, as APIs de dados do Google. Relevante apenas para as APIs listadas no diretório das APIs de dados do Google, muitas delas foram substituídas por APIs mais recentes. Para mais informações sobre uma nova API específica, consulte a documentação da nova API. Para informações sobre autorização de solicitações com uma API mais recente, consulte Autenticação e autorização de Contas do Google.
Ryan Boyd, Equipe de APIs de dados do GoogleSetembro de 2007
- Introdução
- Como instalar e instalar o cURL
- Como autenticar em um serviço de dados do Google
- Recuperar feeds e entradas
- Atualizar entradas
- Como criar entradas
- Excluir entradas
- Como fazer upload de objetos de mídia
- Outras ferramentas de linha de comando
- Conclusão
Introdução
Em essência, as APIs de dados do Google usam feeds e entradas Atom (XML) como um formato de dados, e HTTP como um protocolo para transmissão de dados, estendendo o protocolo Atom Publishing. Publicamos várias bibliotecas de cliente para facilitar a interação com as APIs de dados do Google. No entanto, você pode usar ferramentas de nível inferior para trabalhar com nossos serviços, e é muito fácil fazer isso com um pouco de orientação.
O cURL é um aplicativo de linha de comando usado para realizar solicitações usando uma variedade de protocolos, incluindo o HTTP. O cURL é usado com frequência por desenvolvedores para testar serviços de dados do Google, porque é compatível com a funcionalidade HTTP necessária para interagir com as APIs em um nível baixo.
O cURL só oferece suporte à comunicação HTTP. Portanto, o conhecimento sobre o protocolo de dados do Google, o protocolo específico do serviço e o formato de dados XML usado é um pré-requisito para trabalhar com o aplicativo. Algumas outras ferramentas são mencionadas neste artigo para facilitar essas tarefas.
Este artigo usa exemplos baseados na API de dados dos Álbuns da web do Picasa. No entanto, todos esses exemplos podem ser aplicados facilmente a outras APIs de dados do Google.
Como obter e instalar o cURL
O cURL normalmente está disponível na instalação padrão de muitas plataformas UNIX/Linux. Tente digitar curl
no shell favorito para ver se a ferramenta está instalada e está no PATH
. Se você não tiver a ferramenta instalada, acesse a página de download no site do cURL para ver a fonte oficial ou um pacote binário criado pelo usuário. Observe que a ferramenta de linha de comando usa a biblioteca libcurl
, que pode ser oferecida como um pacote de download separado. Portanto, se você não estiver compilando da origem, faça o download de um pacote "binário" em vez de um pacote "libcurl". Os pacotes ativados por SSL serão necessários se você quiser usar o cURL para adquirir tokens de autenticação ou acessar alguns serviços de dados do Google que exigem o uso do SSL para solicitações.
Como autenticar em um serviço de dados do Google
As solicitações de dados do Google autenticadas são realizadas com a adição de um cabeçalho HTTP à solicitação. Esse cabeçalho contém um token de autenticação ClientLogin (apps para computador/dispositivo móvel) ou XPN (apps da Web). Para fins de teste usando cURL, ClientLogin é o método mais fácil e está documentado abaixo. Os cabeçalhos de autenticação tmp podem ser usados com cURL, mas o processo mais avançado para conseguir os tokens está fora do escopo deste artigo.
Como usar o ClientLogin
O ClientLogin é destinado a aplicativos instalados (computador/móvel). Com esse método de autenticação, o aplicativo que usa as APIs de dados do Google lida diretamente com o nome de usuário e a senha do usuário.
Uma solicitação de autenticação para ClientLogin recebe um nome de usuário, uma senha e um nome de serviço como variáveis de postagem de formulário. Essas variáveis são transmitidas como os argumentos Email
, Passwd
e service
, respectivamente. Essa solicitação gera uma resposta com vários tokens. Um deles pode ser usado para fazer solicitações ao serviço de dados do Google. Os argumentos de dados transmitidos com curl
precisam ser codificados em URL se tiverem caracteres não ASCII, que geralmente aparecem nos argumentos Email
e Passwd
. É possível solicitar que curl
codifique esses URLs com URL usando a sinalização --data-urlencode
.
Exemplo de solicitação:
curl https://www.google.com/accounts/ClientLogin \ --data-urlencode [email protected] --data-urlencode Passwd=new+foundland \ -d accountType=GOOGLE \ -d source=Google-cURL-Example \ -d service=lh2
Exemplo de resposta:
SID=DQAAAHYBADCv2pSv7nflacDNwz3zEDUGtrSvNVDcpkSfddi77b3U5sEaHmP8YLWhmA36F9rk85mL8J5dqo4apn0T1vKz0fPGI9Xtnuet6cuE2ZzYvrNIwbSC_HjTqF4zudNQnnlDuD2wqZT-g1qXI8KhGAQZV4NexHZoQPlabTsGuRZeIBxj1A LSID=EUBBBIaBADCl-kNxvRVmcQghpt3cqSMfEooKR9flLOUZqwgP9OrZS83gse-KSdTNeXhxsET7FYenDhceP9lIPOmesH-t9qh-AWUHjjMdZEbUNeF9mWyzln6Z-FajaiG-cVFkqW0ZJ8ZbnCP30xXj6xFK6QxaAcqy_9Pej8jhEnxS9E61ftQGPg Auth=EUBBIacAAADK-kNxvRVmcQghpt3cqSMfEooLNMflLNIQqwgP9OrZS83gs-KSdTNeXhxsET7FYePWmaD8Vsy1V4LSUGMUP48Je2TO8OcjBj6HgAtPhiZeX-gKDfagZDK44j4n-Tkb44nhOnp2_QPSnBj3Z2vYwOEDjjG3Q53aQVC2132JKOuGh
Consulte a documentação do ClientLogin para ver informações específicas sobre os parâmetros usados na solicitação acima. Neste exemplo, o serviço que estamos usando é a API de dados dos Álbuns da web do Picasa. O nome do serviço (service
) é lh2
. Os nomes dos outros serviços de dados do Google podem ser encontrados na página Perguntas frequentes sobre as APIs de dados do Google.
O token Auth
na resposta acima é o único necessário para a autenticação nos serviços de dados do Google. O valor desse token é formado em um cabeçalho HTTP, que é usado em cada solicitação para um serviço de dados do Google.
curl --silent --header "Authorization: GoogleLogin auth=EUBBIacAAADK\ -kNxvRVmcQghpt3cqSMfEooLNMflLNIQqwgP9OrZS83gs-KSdTNeXhxs\ ET7FYePWmaD8Vsy1V4LSUGMUP48Je2TO8OcjBj6HgAtPhiZeX-gKDfag\ ZDK44j4n-Tkb44nhOnp2_QPSnBj3Z2vYwOEDjjG3Q53aQVC2132JKOuGh" \ "http://picasaweb.google.com/data/feed/api/user/default"
Observação: o método de escape de caracteres de nova linha com caracteres de barra invertida ('\") acima não funciona no shell do comando Windows. Por isso, digite o comando inteiro em uma linha se estiver executando curl
no Windows.
Como recuperar feeds e entradas
Nas APIs de dados do Google, a recuperação de feeds e entradas é feita com um GET
HTTP em um URL, com um conjunto opcional de parâmetros de consulta. Como estamos fazendo uma solicitação GET
, apenas o cabeçalho de autenticação e o URL precisam ser transmitidos para curl
. O exemplo abaixo continuará usando a API de dados dos Álbuns da web do Picasa e será usada para recuperar uma lista de álbuns de propriedade do usuário autenticado. Neste exemplo, encurtamos o token de autenticação para ABCDEFG
, mas o token completo (por exemplo, EUBBIacA
...32JKOuGh
acima) precisa ser usado no lugar dele.
curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/default"
Isso retornará um blob não formatado de 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>
Existem algumas ferramentas decentes para formatar essa saída de modo a torná-la mais legível, incluindo tidy. A maneira mais fácil de usar o tidy é canalizar a saída do comando curl para arrumar como este:
curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/feed/api/user/default" | tidy -xml -indent -quiet
Isso resulta em um feed muito mais legível, como o seguinte:
<?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>
As entradas individuais podem ser recuperadas da mesma forma fornecendo o URL da entrada, em vez do URL do feed.
Atualizando entradas
As entradas nas APIs de dados do Google são atualizadas com uma HTTP PUT
para o URL de edição com uma nova cópia do XML da entrada no corpo da solicitação.
- Recuperar a entrada usando o valor de URL
atom:link/@rel='self'
. - Atualizar a entrada localmente para fazer as mudanças necessárias
PUT
a entrada de volta para o servidor, usando o valor de URLatom:link/@rel='edit'
.
1. Como recuperar a entrada
A entrada pode ser recuperada usando um dos dois URLs em negrito no bloco de feed acima. O URL necessário é o valor href
do elemento link
com um rel='self'
.
curl --silent --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593"
2. Como atualizar a entrada localmente
Depois de recuperar a entrada, ela vai precisar ser atualizada usando um editor de texto ou aplicativo local para fazer as mudanças necessárias. No comando acima, para recuperar uma entrada, não canalizamos os resultados para tidy
, como fizemos nos exemplos anteriores. O resultado é um XML que representa os mesmos dados, mas tem uma formatação diferente da versão transmitida para tidy
. Para editar manualmente uma entrada, usar tidy
pode facilitar o trabalho com o XML.
Observação: lembre-se de incluir todas as definições de namespace XML que são usadas como atributos para o atom:entry
ao publicar sua nova entrada. A omissão delas causa exceções de análise. Além disso, tidy
substituirá os espaços entre as definições de namespace por caracteres de nova linha. Embora esse XML seja válido, os serviços de dados do Google não o aceitam no momento. Se você usar tidy
, adicione espaços entre esses atributos no elemento entry
.
3. Como atualizar a entrada no servidor
Usando o URL edit
, você precisa PUT
uma cópia da entrada para o serviço usando cURL. Um cabeçalho para indicar o tipo de conteúdo que está sendo enviado ao servidor precisa ser adicionado. O snippet a seguir pressupõe que o arquivo com a entrada atualizada é salvo em updated_input.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"
Criando entradas
As entradas nas APIs de dados do Google são criadas com uma HTTP POST
para o URL de postagem com uma nova entrada. O atom:id
é atribuído pelo servidor e, portanto, não é necessário incluir novas entradas. A maneira mais fácil de criar uma nova entrada é usar uma entrada antiga e modificá-la. O exemplo a seguir faz isso.
- Recuperar uma entrada de modelo usando a função
atom:link/@rel='self'
. - Modifique a entrada do modelo localmente para remover informações desnecessárias e fazer as mudanças necessárias.
POST
a entrada de volta para o servidor, usando o URLpost
para o feed. Isso pode ser encontrado no feed recuperado como o valorhref
do elementolink
com umrel='http://schemas.google.com/g/2005#post'
ou na documentação do serviço em http://code.google.com.
1. Recuperar uma entrada de modelo
Uma única entrada pode ser recuperada usando o valor href
de um elemento link
com um rel='self'
da mesma forma que uma entrada foi recuperada antes de atualizá-la no exemplo acima.
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
Depois de usar tidy
, a resposta será parecida com esta:
<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. Modificar a entrada do modelo
Queremos criar um álbum chamado "Curling in Canada" com fotos da nossa recente partida de curling. Os dados do Google permitem que você descarte elementos do Atom para os quais o servidor fornece valores. Por isso, para criar essa entrada de modelo simples, removeremos a atom:id
, atom:published
, atom:updated
, atom:author
e os vários elementos atom:link
do feed. Isso nos dá uma entrada de modelo reduzida. A entrada precisa ser modificada para representar o novo álbum que estamos criando:
<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>
Observação: lembre-se de incluir todas as definições de namespace XML que são usadas como atributos para o atom:entry
ao publicar sua nova entrada. A omissão delas causa exceções de análise. Além disso, tidy
substituirá os espaços entre as definições de namespace e caracteres de nova linha. Embora esse XML seja válido, os serviços de dados do Google não o aceitam no momento. Se você usar tidy
, adicione espaços entre esses atributos no elemento entry
.
3. Como publicar a nova entrada no servidor
O comando curl
para postar uma nova entrada no servidor é muito semelhante a atualizar uma entrada atual, exceto que o URL é diferente:
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
Se a publicação for bem-sucedida, a saída XML resultante será uma cópia da entrada recém-criada. Essa entrada incluirá itens gerados pelo servidor no momento da criação da entrada, incluindo os valores dos elementos atom:id
, atom:published
, atom:updated
e atom:link
. Os valores link
resultantes podem ser usados para editar ou excluir a entrada, desde que nenhuma alteração adicional seja feita temporariamente.
Excluindo entradas
A exclusão de entradas é muito semelhante à atualização de entradas, com a exceção de que um método HTTP DELETE
é usado em vez de um HTTP PUT
, e nenhum dado é necessário para enviar. Assim como a solicitação de atualização, o URL edit
é usado como destino da solicitação HTTP.
curl --silent --request DELETE --header "Authorization: GoogleLogin auth=ABCDEFG" "http://picasaweb.google.com/data/entry/api/user/brad.gushue/albumid/9810315389720904593/123456"
Como fazer upload de objetos de mídia
Um recurso importante da API de dados dos Álbuns da web do Picasa e da API de dados da Lista de documentos é a capacidade de carregar objetos binários. O cURL pode facilmente fazer upload de dados binários e um cabeçalho slug. No entanto, a API de dados da lista de documentos atualmente exige a postagem do XML junto com os dados binários como uma mensagem MIME multiparte. A criação da mensagem de várias partes está fora do escopo deste artigo.
O exemplo abaixo mostra como fazer upload de uma imagem chamada sweeping_the_rock.png
em um Álbum da Web do Picasa com o título "Sweepping rock":
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
Outras ferramentas de linha de comando
Alguns desenvolvedores preferem aprender ou depurar usando outras ferramentas de linha de comando.
As ferramentas mais usadas são:
- telnet, openssl são usados para fazer conexões de soquete brutas (texto simples e baseados em SSL, respectivamente) com servidores da Web e podem ser usados para interagir com os serviços de dados do Google. Nem todos os serviços de dados do Google são compatíveis com SSL. Veja como abrir as conexões:
telnet picasaweb.google.com 80
(API de dados dos Álbuns do Picasa)openssl s_client -connect www.google.com:443
(API de dados do Google Agenda e outros serviços em www.google.com)
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>
Ao enviar dados HTTP brutos, lembre-se de que as operaçõesPOST
ePUT
exigirão calcular o valor de um cabeçalhoContent-Length
. Use a ferramenta UNIXwc
para calcular esse valor. Coloque todo o conteúdo do corpo HTTP em um arquivo de texto comotemplate_entry.xml
(exemplo usado acima) e executewc -c template_entry.xml
. Muitas vezes, é difícil depurar se você usar acidentalmente um valor incorreto para o cabeçalhoContent-Length
. - O wget normalmente é usado para fazer o download de dados de um servidor da Web para um arquivo local. No entanto, o
wget
tem muitas opções que possibilitam executar todos os diferentes tipos de solicitações necessários para interagir com os serviços de dados do Google. Veja um exemplo de como usarwget
paraPOST
uma nova entrada de álbum nos Álbuns do Picasa: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"
- O xlsxtproc é uma ferramenta para aplicar transformações XSL (XSLT) em documentos XML. Ele pode ser usado para extrair facilmente os dados desejados de uma entrada ou feed XML retornado pelas APIs de dados do Google ou para gerar entradas novas ou atualizadas.
Conclusão
Como você viu, o cURL e várias outras ferramentas de linha de comando podem ser usadas para interagir facilmente com os serviços de dados do Google usando XML e HTTP brutos. Junte-se a nós nos fóruns específicos da API se tiver dúvidas sobre como usar essas ferramentas com sua API de dados do Google favorita.