Combinar APIs de mídia e formatos de dados baseados em XML

Programa para APIs de provedor de mídia social usando dialetos de XML

Explore os conceitos, o projeto e os detalhes da implementação que dizem respeito à interação com sites de mídia social, usando várias APIs e vários formatos de dados baseados em XML, como Really Simple Syndication (RSS), Atom, Facebook Markup Language (FBML), OpenSocial Markup Language (OSML), SOAP e Plain Old XML (POX).

J. Jeffrey Hanson, Chief Architect, eReinsure.com, Inc.

Photo of Jeff HansonJeff Hanson tem mais de 20 anos de experiência como engenheiro de software e arquiteto, incluindo trabalhar como CTO da Max International, arquiteto sênior da Financial Fusion, arquiteto-chefe da plataforma Zareus SOA e arquiteto-chefe de eReinsure.com. Jeff projetou e implementou sistemas para bancos, mercados globais, sistemas de hipoteca, publicação de jornais, operadoras de resseguro, entre outros. Ele é membro do grupo de especialistas para a especificação Java Management Extensions Remote API e membro da International Association of Software Architects (IASA). Jeff é autor de muitos artigos e livros no setor de softwares, incluindo Pro JMX, Mashups: Strategies for the Modern Enterprise e Messaging Technology IASA IT Architect Skills Library.


nível de autor Contribuidor do
        developerWorks

16/Dez/2009

Este artigo é para desenvolvedores que buscam entender o ambiente de mídia social e como aplicar formatos de dados baseados em XML em várias APIs. Isso é interessante porque esses dados estão presentes em qualquer lugar nas APIs de mídia social. Os formatos de dados baseados em XML ajudam a padronizar e simplificar o modelo de programação HTTP em sites e serviços heterogêneos.

Introdução à mídia social

O termo mídia social se refere a sites e serviços que permitem que os usuários compartilhem mídia, conteúdo, dados, etc. Alguns dos sites e serviços de mídia social mais conhecidos são LinkedIn, Facebook, Twitter, MySpace e a ampla gama de sites e serviços oferecidos pelo Google. Novas mídias estão rapidamente sendo transformadas em um modelo de entrega de mídia social também.

Acrônimos frequentemente usados

  • API: application program interfaces
  • HTML: Hypertext Markup Language
  • HTTP: Hypertext Transfer Protocol
  • URI: Uniform Resource Identifier
  • URI: Uniform Resource Locator
  • XML: Extensible Markup Language

Os veículos de fornecimento de mídia social incluem fóruns on-line, blogs, wikis, compartilhamento de imagens, compartilhamento de vídeos, favoritos e fluxos de atividades sociais.

XML exerce uma grande função na troca de dados na comunidade de mídia social. Os provedores de mídia social usam dialetos baseados em XML bastante nas APIs que eles fornecem para permitir o acesso aos seus serviços.


Introdução a formatos de dados baseados em XML

XML é uma linguagem de marcação baseada em texto usado para estruturar dados em muitos dialetos diferentes. Os dialetos de XML são definidos por esquemas que podem ser integrados a um documento XML associado. A maioria das linguagens de programação comuns fornece suporte para a criação, atualização e análise de documentos XML.

Os dialetos baseados em XML são usados por uma ampla variedade de serviços da Web. Alguns dos dialetos mais comuns usados nos serviços da Web incluem POX, RSS, Atom e SOAP. Outros dialetos estão surgindo com grande aceitação. A Tabela 1 lista e descreve alguns dos dialetos de XML mais comuns usados nos serviços da Web.

Tabela 1. Dialetos de XML comuns usados em serviços da Web
DialetoDescrição
SOAP

SOAP significava Simple Object Access Protocol, mas não é mais um acrônimo. SOAP é uma especificação de protocolo baseada em XML para trocar dados estruturados no contexto dos serviços da Web. Destinava-se originalmente a Remote Procedure Call (RPC) e à troca de mensagens orientadas a documento. SOAP evoluiu em complexidade com a introdução de várias especificações adicionais que definem seu formato, os padrões de troca, as ligações em nível de transporte etc. Essa complexidade o impediu de ser adotado amplamente por provedores de serviço e provedores de mídia social.

RSSRSS significa Really Simple Syndication ou Rich Site Summary. É um dialeto baseado em XML para estruturar dados fornecidos por Web feeds, como blogs, notícias e outras fontes de dados on-line. Um documento RSS permite que os editores organizem o conteúdo de maneira padrão e imediata. Os consumidores de RSS usam aplicativos em um desktop do computador, em um navegador ou em um dispositivo móvel para recuperar atualizações de sites RSS automaticamente em intervalos específicos. O consumidor de RSS se inscreve em um feed RSS inserindo o endereço do feed em um determinado aplicativo leitor de RSSs.
AtomO Atom Syndication Format é um dialeto baseado em XML usado por Web feeds da mesmíssima forma que RSS. Um feed Atom é um pouco mais abrangente que RSS, já que o elemento Atom pode conter imagens, links externos para conteúdo, metadados, etc.
FBMLFBML significa Facebook Markup Language. É um subconjunto de HTML apresentado pelo Facebook para permitir que desenvolvedores de aplicativos criem sites HTML executados em servidores do Facebook.
OST e OSMLOpenSocial Template (OST) e OpenSocial Markup Language (OSML) são dialetos baseados em XML definidos pelo Google e outros membros da rede OpenSocial para permitir que os desenvolvedores criem aplicativos e sites de mídia social usando padrões defendidos pelo mercado e executados nos contêineres compatíveis com OpenSocial. OST e OSML incentiva o desenvolvimento orientado a dados de aplicativos e serviços durante a promoção de uma separação clara de preocupações entre lógica de marcação e programação.

Aplicando formatos de dados XML a APIs de mídia social

A API de mídia social é uma estrutura de interações de pedido/resposta fornecidas por um provedor de mídia social que permite que sites de terceiros criem sites, páginas, serviços etc. que interajam com a funcionalidade do provedor de mídia social. O eBay, Amazon, Google, Facebook, Twitter e OpenSocial são alguns exemplos dos provedores que expõem APIs para criar aplicativos e serviços de mídia social. As seções seguintes mostra alguns exemplos simples dessas APIs baseadas em XML.


eBay

O eBay fornece APIs que permitem que os desenvolvedores enviem itens para exibição no eBay, recuperem uma lista atual de categorias do eBay, exibam informações sobre itens listados no eBay, recuperem informações de arrematadores de itens, recuperem listas de itens sendo vendidos por um determinado usuário, recuperem listas de itens para os quais um determinado usuário fez oferta, exibam listagens do eBay em outros sites e deixem feedback sobre vendedores.

Recuperando informações básicas do usuário como um documento XML

A

Listagem 1 é um exemplo de um pedido de HTTP que recupera o conjunto padrão/básico de informações para um usuário do eBay como um documento XML.

Listagem 1. GetUserProfile do eBay
http://open.api.ebay.com/shopping?callname=GetUserProfile
   &responseencoding=XML
   &appid=johndoesAppID
   &siteid=0
   &version=525
   &UserID=johndoesUserID

A

Listagem 2 mostra o mesmo pedido no formato XML que pode ser transmitido com o uso de HTTP POST.

Listagem 2. GetUserProfile do eBay como XML
<?xml version="1.0" encoding="utf-8"?>
<GetUserProfileRequest xmlns="urn:ebay:apis:eBLBaseComponents">
  <UserID>johndoesUserID</UserID>
</GetUserProfileRequest>

Recuperando Informações do Usuário Estendidas como um Documento XML

Para se recuperar informações adicionais sobre um determinado usuário, a API do eBay fornece o parâmetro IncludeSelector.

A

Listagem 3 é um exemplo do formato URL de um pedido de HTTP GET que recupera informações detalhadas de um determinado usuário.

Listagem 3. GetUserProfile do eBay com detalhes
http://open.api.ebay.com/shopping?callname=GetUserProfile
   &responseencoding=XML
   &appid=johndoesAppID
   &siteid=0
   &version=525
   &UserID=johndoesUserID
   &IncludeSelector=Details

A

Listagem 4 mostra o mesmo pedido de informações detalhadas do usuário no formato XML que pode ser transmitido com o uso de HTTP POST.

Listagem 4. GetUserProfile do eBay com detalhes como XML
<?xml version="1.0" encoding="utf-8"?>
<GetUserProfileRequest xmlns="urn:ebay:apis:eBLBaseComponents">
  <UserID>hypothetical-user</UserID>
  <IncludeSelector>Details</IncludeSelector>
</GetUserProfileRequest>

A

Listagem 5 mostra um exemplo de resposta típica recuperada com os pedidos de HTTP mostrados na Listagem 3 e na Listagem 4. Essa resposta inclui informações detalhadas sobre o usuário.

Listagem 5. Resposta do GetUserProfile do eBay
<?xml version="1.0" encoding="utf-8"?>
<GetUserProfileResponse xmlns="urn:ebay:apis:eBLBaseComponents">
  <Timestamp>2007-11-09T21:05:05.781Z</Timestamp> 
  <Ack>Success</Ack> 
  <Build>e525_core_APILW_5028523_R1</Build> 
  <Version>525</Version> 
  <User>
    <FeedbackScore>1054</FeedbackScore> 
    <FeedbackPrivate>false</FeedbackPrivate> 
    <FeedbackRatingStar>Red</FeedbackRatingStar> 
    <NewUser>false</NewUser> 
    <RegistrationDate>2005-11-01T20:50:00.000Z</RegistrationDate> 
    <RegistrationSite>US</RegistrationSite> 
    <Status>Confirmed</Status> 
    <SellerBusinessType>Undefined</SellerBusinessType> 
    <UserID>johndoesUserID</UserID> 
    <StoreURL>http://stores.ebay.com/johndoesStore</StoreURL> 
    <StoreName>John Doe's Store</StoreName> 
    <SellerItemsURL>
      http://search.ebay.com/_W0LMsarsrjohndoesUserIDQQhtZ-1
    </SellerItemsURL> 
    <AboutMeURL>http://members.ebay.com/aboutme/johndoesUserID</AboutMeURL> 
    <MyWorldURL>http://myworld.ebay.com/johndoesUserID</MyWorldURL> 
    <MyWorldSmallImage>
      http://i2.ebayimg.ebay.com/01/u/000/00/23/animage.JPG?set_id=34
    </MyWorldSmallImage> 
    <MyWorldLargeImage>
      http://i2.ebayimg.ebay.com/01/u/000/77/23/anotherimage.JPG?set_id=34
    </MyWorldLargeImage> 
    <ReviewsAndGuideURL>
      http://search.reviews.us.ebay.com/members/johndoesUserID
    </ReviewsAndGuideURL> 
    <FeedbackDetailsURL>
      http://feedback.ebay.com?ViewFeedback&userid=johndoesUserID&...
    </FeedbackDetailsURL> 
  </User>
</GetUserProfileResponse>

Recuperando informações básicas do usuário como um envelope SOAP

A

Listagem 6 mostra um exemplo de um pedido de API HTTP do eBay que recupera as informações básicas de um determinado usuário fornecidas como um pedido de SOAP.

Listagem 6. GetUserProfile do eBay solicitando resposta de SOAP
http://open.api.ebay.com/shopping?callname=GetUserProfile
   &responseencoding=SOAP
   &appid=johndoesAppID
   &siteid=0
   &version=525
   &UserID=johndoesUserID
   &IncludeSelector=Details

A

Listagem 7 mostra o mesmo pedido de API de eBay para informações detalhadas do usuário como um envelope SOAP.

Listagem 7. Pedido de GetUserProfile do eBay como um envelope SOAP
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope
  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
    <GetUserProfileRequest xmlns="urn:ebay:apis:eBLBaseComponents">
      <UserID>johndoesUserID</UserID>
      <IncludeSelector>Details</IncludeSelector>
    </GetUserProfileRequest>
  </soapenv:Body>
</soapenv:Envelope>

A

Listagem 8 mostra a resposta das informações detalhadas do usuário retornadas como um envelope SOAP

Listagem 8. Resposta de SOAP do GetUserProfile do eBay
<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<GetUserProfileResponse xmlns="urn:ebay:apis:eBLBaseComponents">
<Timestamp>2009-11-09T20:01:05.781Z</Timestamp> 
<Ack>Success</Ack> 
<Build>e525_core_APILW_5028523_R1</Build> 
<Version>525</Version> 
<User>
<FeedbackScore>1047</FeedbackScore> 
<FeedbackPrivate>false</FeedbackPrivate> 
<FeedbackRatingStar>Red</FeedbackRatingStar> 
<NewUser>false</NewUser> 
<RegistrationDate>2009-10-12T10:10:00.000Z</RegistrationDate> 
<RegistrationSite>US</RegistrationSite> 
<Status>Confirmed</Status> 
<SellerBusinessType>Undefined</SellerBusinessType> 
<UserID>johndoesUserID</UserID> 
<StoreURL>http://stores.ebay.com/johndoesStore</StoreURL> 
<StoreName>John Does Store</StoreName> 
<SellerItemsURL>
http://search.ebay.com/_W0LMsarsrjohndoesUserIDQQhtZ-1
</SellerItemsURL> 
<AboutMeURL>http://members.ebay.com/aboutme/johndoesUserID</AboutMeURL>
<MyWorldURL>http://myworld.ebay.com/johndoesUserID</MyWorldURL> 
<MyWorldSmallImage>
http://i2.ebayimg.ebay.com/01/u/000/00/23/animage.JPG?set_id=23
</MyWorldSmallImage> 
<MyWorldLargeImage>
http://i2.ebayimg.ebay.com/01/u/000/77/23/anotherimage.JPG?set_id=23
</MyWorldLargeImage> 
<ReviewsAndGuideURL>
http://search.reviews.us.ebay.com/members/johndoesUserID
</ReviewsAndGuideURL> 
<FeedbackDetailsURL>
http://feedback.ebay.com/ws?ViewFeedback&userid=johndoesUserID&...
</FeedbackDetailsURL> 
</User>
</GetUserProfileResponse>
</soapenv:Body>
</soapenv:Envelope>

Amazon

O Amazon fornece inúmeras APIs de serviço da Web—de maneira conveniente com relação aos serviços da Web do Amazon—para expor a funcionalidade de acessar a infraestrutura de serviços do Amazon. Esses serviços incluem, sem limitação, os listados e descritos na Tabela 2.

Tabela 2. Alguns dos serviços da Web do Amazon
Descrição doserviço
Elastic Compute Cloud (EC2)Um serviço da Web que fornece capacidade de computação redimensionável na nuvem
Simple Storage Service (S3)Uma interface de serviços da Web simples que pode ser usada para armazenar e recuperar grandes quantidades de dados, a qualquer momento, de qualquer parte da Web.
CloudFrontUm serviço da Web para fornecimento de conteúdo
SimpleDBUm serviço da Web para execução de consultas em dados estruturados na nuvem
Simple Queue Service (SQS)Uma fila hospedada em nuvem para mover mensagens entre aplicativos distribuídos
E-Commerce Service (ECS)Fornece recursos para a criação de sites ou aplicativos Web que integrem ECS a outros serviços do Amazon para recuperação de dados do produto, conteúdo de clientes, informações do vendedor, listagens de produtos, carrinhos de compra, etc.

Recuperando informações públicas do usuário como um documento XML

O exemplo a seguir usa os serviços Amazon ECS para recuperar informações públicas sobre um determinado cliente. Essa API requer que cada pedido seja autenticado com o uso de uma assinatura de pedido. Uma assinatura de pedido é criada pela codificação base 64 do tipo de pedido, domínio, a URI e a cadeia de caractere classificada de todo parâmetro do pedido que usa uma chave secreta do serviço da Web do Amazon.

A

Listagem 9 é um exemplo de um pedido assinado típico para um pedido de ECS API do Amazon.

Listagem 9. Pedido de CustomerContentSearch do Amazon
  http://webservices.amazon.com/onca/xml?
  Service=AWSECommerceService
  &AWSAccessKeyId=johndoesAccessKeyID
  &AssociateTag=johndoesAssociateID
  &Operation=CustomerContentSearch
  &Name=Jane%20Doe

É possível criar o pedido assinado na Listagem 9 usando as seguintes etapas:

  1. Anexe o registro de data e hora ao URL:
    http://ecs.amazonaws.com/onca/xml?
    Service=AWSECommerceService
    &AWSAccessKeyId=johndoesAccessKeyID
    &AssociateTag=johnDoesAssociateID
    &Operation=CustomerContentSearch
    &Name=Jane%20Doe
  2. URL codifica o pedido.

    Codificar um pedido por URL significa converter a cadeia de caractere do pedido em formato URL válido, convertendo caracteres não compatíveis com URL em caracteres compatíveis com URL. A maioria das linguagens de programação tem bibliotecas padrão e/ou funções para fazer isso. Para uma explicação completa da codificação URL, consulte Recursos.

  3. Extraia os parâmetros de consulta e remova os caracteres de "e" comercial (&):
    Service=AWSECommerceService
    AWSAccessKeyId=johndoesAccessKeyID
    AssociateTag=johnDoesAssociateID
    Operation=CustomerContentSearch
    Name=Jane%20Doe
  4. Classifique os parâmetros da consulta por valor do byte ASCII:
    AssociateTag=johnDoesAssociateID
    AWSAccessKeyId=johndoesAccessKeyID
    Name=Jane%20Doe
    Operation=CustomerContentSearch
    Service=AWSECommerceService
  5. Reconecte a lista classificada de parâmetros da consulta com "e's" comerciais (&). O resultado é uma cadeia de caractere canônica:
    AssociateTag=johnDoesAssociateID
    &AWSAccessKeyId=johndoesAccessKeyID
    &Name=Jane%20Doe
    &Operation=CustomerContentSearch
    &Service=AWSECommerceService
  6. Pré-anexe o cabeçalho de tipo de pedido com as quebras de linhas à cadeia de caractere canônica:

A cadeia de caractere que precisa ser assinada será similar à Listagem 10.

Listagem 10. Cadeia de caractere de assinatura de CustomerContentSearch do Amazon
  GET
  ecs.amazonaws.com
  /onca/xml
  AssociateTag=johnDoesAssociateID
  &AWSAccessKeyId=johndoesAccessKeyID
  &Name=Jane%20Doe
  &Operation=CustomerContentSearch
  &Service=AWSECommerceService

HMAC e SHA-256

Hash-based Message Authentication Code (HMAC) é um mecanismo criptográfico usado para autenticação de mensagem usando uma função hash em conjunto com uma chave secreta.

Secure Hash Algorithm 256 (SHA-256) é uma função hash criptográfica de 32 bits usada em autenticação de mensagem para validar a autenticidade de um bloco de dados.

Para mais informações, consulte Recursos.

Agora, crie um código HMAC compatível com a Request for Comments (RFC) 2104 a partir da cadeia de caractere na Listagem 10 usando SHA-256 e sua chave de acesso secreta do Amazon. A cadeia de caractere assinada será similar à Listagem 11.

Listagem 11. Cadeia de caractere assinada de CustomerContentSearch do Amazon
 Nace+U3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg=

Agora, o URL codifica a assinatura, como na Listagem 12.

Listagem 12. Cadeia de caractere assinada e codificada de CustomerContentSearch do Amazon
 Nace%2BU3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg%3D

A assinatura codificada por URL é anexada ao URL para o pedido de API, como na Listagem 13.

Listagem 13. Pedido CustomerContentSearch do Amazon com assinatura
  http://ecs.amazonaws.com/onca/xml?Service=AWSECommerceService
  &AWSAccessKeyId=johndoesAccessKeyID
  &AssociateTag=johnDoesAssociateID
  &Name=Jane%20Doe
  &Operation=CustomerContentSearch

A quantidade de informações recuperada por CustomerContentSearch é determinada pelos grupos de resposta especificados no pedido e pelos dados disponibilizados pelo cliente. A Listagem 14 é uma resposta típica que inclui um conjunto completo de dados do cliente XML.

Listagem 14. Resposta XML de CustomerContentSearch do Amazon
  <CustomerContentSearchResponse
  xmlns="http://webservices.amazon.com/AWSECommerceService/2005-10-05">
  <OperationRequest>
  <HTTPHeaders>
  <Header Name="UserAgent" Value="Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) 
  AppleWebKit/532.0 (KHTML, like Gecko) Chrome/3.0.195.27 Safari/532.0"></Header>
  </HTTPHeaders>
  <RequestId>0RXAHS524460FBBFDMGJ</RequestId>
  <Arguments>
  <Argument Name="Service" Value="AWSECommerceService"></Argument>
  <Argument Name="Name" Value="Jane Doe"></Argument>
  <Argument Name="Operation" Value="CustomerContentSearch"></Argument>
  <Argument Name="AssociateTag" Value="johnDoesAssociateID"></Argument>
  <Argument Name="Signature" 
  Value="SOWM2hnR8zF5b9tyXQEsO0oG0crM7rbSwy1QL7UDfT0="></Argument>
  <Argument Name="AWSAccessKeyId" Value="johndoesAccessKeyID"></Argument>
  </Arguments>
  <RequestProcessingTime>0.104732990264893</RequestProcessingTime>
  </OperationRequest>
  <Customers>
  <Request>
  <IsValid>True</IsValid>
  <CustomerContentSearchRequest>
  <Name>Jane Doe</Name>
  </CustomerContentSearchRequest>
  </Request>
  <TotalResults>1</TotalResults>
  <TotalPages>1</TotalPages>
  <Customer>
  <CustomerId>janedoesCustomerID</CustomerId>
  </Customer>
  </Customers>
  </CustomerContentSearchResponse>

Recuperando informações públicas do usuário como um envelope SOAP

Os pedidos SOAP do Amazon especificam terminais de pedido por código do idioma e se o pedido deve ser feito ou não em uma conexão segura. Os terminais SOAP listados na Tabela 3 estão disponíveis para uso para os pedidos de API SOAP de divulgação de produtos do Amazon.

Tabela 3. Terminais SOAP de serviços da Web do Amazon
Código do idiomaTerminal
CAhttp://ecs.amazonaws.ca/onca/soap
https://aws.amazonaws.ca/onca/soap
DEhttp://ecs.amazonaws.de/onca/soap
https://aws.amazonaws.de/onca/soap
FRhttp://ecs.amazonaws.fr/onca/soap
https://aws.amazonaws.fr/onca/soap
JPhttp://ecs.amazonaws.jp/onca/soap
https://aws.amazonaws.jp/onca/soap
RUhttp://ecs.amazonaws.co.uk/onca/soap
https://aws.amazonaws.co.uk/onca/soap
EUAhttp://ecs.amazonaws.com/onca/soap
https://aws.amazonaws.com/onca/soap

A

Listagem 15 mostra um exemplo de envelope SOAP enviado a uma chamada da operação ItemSearch do Amazon.

Listagem 15. Resposta de CustomerContentSearch do Amazon como SOAP
  <?xml version="1.0" encoding="UTF-8" ?>
  <soapenv:Envelope
  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
  <ItemSearch xmlns="http://ecs.amazonaws.com/AWSECSCommerce/onca/soap">
  <AWSAccessKeyId>johndoesAccessKeyID</AWSAccessKeyId>
  <Request>
  <SearchIndex>Books</SearchIndex>
  <Keywords>Lord%20of%20the%20Rings</Keywords>
  </Request>
  </ItemSearch>
  </soapenv:Body>
  </soapenv:Envelope>

Google

O Google expõe uma grande variedade de serviços on-line habilitados com APIs de serviço da Web. A maioria dessas APIs foi habilitada com um formato de pedido/resposta baseado em XML. Google Apps é um exemplo de serviço Google que permite interações baseadas em XML nos confins da infraestrutura do Google.

Autenticando um pedido de API

Muitos serviços Google solicitam acesso autorizado antes de permitir a troca de informações. Um mecanismo usado com uma API conhecida como a API ClientLogin. O acesso fornecido sob a autorização da API ClientLogin envolve um token emitido pelo Google que pode ser usado em todos os pedidos subsequentes.

A

Listagem 16 mostra um pedido para o Google de um token ClientLogin.

Listagem 16. Pedido de ClientLogin do Google
  https://www.google.com/accounts/ClientLogin?
  accountType=HOSTED_OR_GOOGLE
  &Email=johndoe@example.com
  &Passwd=foobar
  &service=apps
  &source=mytestapp

Uma resposta de sucesso do pedido na Listagem 16 resulta em uma resposta similar à Listagem 17.

Listagem 17. Resposta de ClientLogin do Google
  SID=ABCDE...
  LSID= ABCDE...
  Auth= ABCDE...

Para as finalidades deste artigo, é possível ignorar dois dos códigos ilustrados na resposta na Listagem 17: SID e LSID. Entretanto, o valor Auth é o token de autorização que pode ser usado nos pedidos de API Google subsequentes.

Os pedidos de API assegurados exigem que o cabeçalho de autorização seja definido com o token retornado de uma resposta ClientLogin com êxito, como na Listagem 18.

Listagem 18. Cabeçalho de autorização do Google para pedido de API Google assegurado
Authorization: GoogleLogin auth=ABCDE...

Recuperando Informações de Perfil do Usuário como um Feed Atom

cURL

O cURL é uma ferramenta de linha de comando para realizar pedidos on-line com a sintaxe URL, com suporte para FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS e outros. O cURL também suporta certificados SSL, HTTP POST, HTTP PUT, upload de FTP, upload baseado em formulários HTTP, proxies, cookies, autenticação usuário+senha, etc.

Google Apps fornece informações de perfil do usuário em um feed de perfil. Você pode usar um feed de perfil para ver e modificar os perfis de usuários associados à conta Google Apps. Os feeds de perfil são recuperados usando a API de dados de perfis.

A

Listagem 19 mostra um exemplo de um pedido HTTP GET para recuperar o perfil de um usuário do Google Apps, johndoe@exemplo.com. O pedido é transmitido como uma linha de comando cURL e transmite um token de autenticação recuperado anteriormente.

Listagem 19. Google recupera pedido de feed de perfil do usuário
curl -k --header "Authorization: GoogleLogin auth=ABCDE..." \
https://apps-apis.google.com/a/feeds/example.com/user/2.0/johndoe

O comando cURL anterior inclui o token Auth retornado de um pedido ClientLogin anterior realizado com êxito. Na execução com êxito desse comando, uma entrada similar de Atom no exemplo na Listagem 20 deve ser retornada.

Listagem 20. Google recupera resposta de feed Atom de perfil do usuário
<?xml version='1.0' encoding='UTF-8'?>
<entry xmlns='http://www.w3.org/2005/Atom'
       xmlns:apps='http://schemas.google.com/apps/2006'
       xmlns:gd='http://schemas.google.com/g/2005'>
  <id>https://apps-apis.google.com/a/feeds/example.com/user/2.0/johndoe</id>
  <updated>1970-01-01T00:00:00.000Z</updated>
  <category
    scheme='http://schemas.google.com/g/2005#kind'
    term='http://schemas.google.com/apps/2006#user'/>
  <title type='text'>John Doe</title>
  <link
    rel='self'
    type='application/atom+xml'
    href='https://apps-apis.google.com/a/feeds/example.com/user/2.0/johndoe'/>
  <link
    rel='edit'
    type='application/atom+xml'
    href='https://apps-apis.google.com/a/feeds/example.com/user/2.0/johndoe'/>
  <apps:login
    userName='johndoe'
    suspended='false'
    ipWhitelisted='false'
    admin='true'
    changePasswordAtNextLogin='false'
    agreedToTerms='true'/>
  <apps:quota limit='7168'/>
  <apps:name familyName='Doe' givenName='John'/>
  <gd:feedLink
    rel='http://schemas.google.com/apps/2006#user.nicknames'
    href='https://apps-
apis.google.com/a/feeds/example.com/nickname/2.0?username=johndoe'/>
  <gd:feedLink
    rel='http://schemas.google.com/apps/2006#user.emailLists'
    href='https://apps-
apis.google.com/a/feeds/example.com/emailList/2.0?recipient=johndoe%example.com'/>
</entry>

Recuperando informações de perfil do usuário como um feed RSS

É possível parametrizar muitas das APIs do Google para retornar RSS como o formato de resultado. Isso geralmente envolve a configuração de um parâmetro no pedido de entrada.

Para recuperar o mesmo perfil para johndoe@exemplo.com como um item RSS usando cURL, execute a linha de comando na Listagem 21.

Listagem 21. Google recupera pedido de feed RSS de perfil do usuário
curl -k --header "Authorization: GoogleLogin auth=ABCDE..." \
https://apps-apis.google.com/a/feeds/example.com/user/2.0/johndoe?alt=rss

Após o sucesso do comando cURL anterior, uma entrada RSS similar à Listagem 22 deve ser retornada como resposta.

Listagem 22. Google recupera resposta de feed RSS de perfil do usuário
<?xml version='1.0' encoding='UTF-8'?>
<item xmlns:atom='http://www.w3.org/2005/Atom'
      xmlns:apps='http://schemas.google.com/apps/2006'
      xmlns:gd='http://schemas.google.com/g/2005'>
  <guid isPermaLink='false'>
    https://apps-apis.google.com/a/feeds/example.com/user/2.0/johndoe
  </guid>
  <atom:updated>1970-01-01T00:00:00.000Z</atom:updated>
  <category domain='http://schemas.google.com/g/2005#kind'>
    http://schemas.google.com/apps/2006#user
  </category>
  <title>John Doe</title>
  <apps:login
    userName='johndoe'
    suspended='false'
    ipWhitelisted='false'
    admin='true'
    changePasswordAtNextLogin='false'
    agreedToTerms='true'/>
  <apps:quota limit='7168'/>
  <apps:name familyName='Doe' givenName='John'/>
  <gd:feedLink
    rel='http://schemas.google.com/apps/2006#user.nicknames'
    href='https://apps-
apis.google.com/a/feeds/example.com/nickname/2.0?username=johndoe'/>
  <gd:feedLink
    rel='http://schemas.google.com/apps/2006#user.emailLists'
    href='https://apps-
apis.google.com/a/feeds/example.com/emailList/2.0?recipient=johndoe%40example.com'/>
</item>

Facebook

O Facebook lançou a Facebook Platform para permitir que os desenvolvedores criem aplicativos que permitam aos usuários compartilhar informações e permanecer conectados. Os aplicativos executados no Facebook podem ser construídos com o uso da linguagem de marcação FBML descrita anteriormente na Tabela 1.

Página de botão de login usando FBML

O Facebook fornece FBML como um mecanismo para criar páginas que interagem com serviços e dados do Facebook. A página habilitada para FBML na Listagem 23 cria um botão de login que autentica um usuário para a plataforma do Facebook. É possível integrar esse botão a qualquer página HTML.

Listagem 23. Página habilitada para FBML
<html>
<head>
<title>test</title>
</head>
<body>
<script
src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php/en_US"
type="text/javascript">
</script>
<script type="text/javascript">
  FB.init("ff60291faf5de5c350fab4d4cc84b9cb");
</script>
 
 <fb:login-button length="short" size="medium"></fb:login-button>
 <br/>
 <fb:profile-pic uid="loggedinuser" size="square" facebook-logo="true">
 </fb:profile-pic>
 <br/> 
 <fb:name uid="loggedinuser" useyou="false" linked="true"></fb:profile-pic>
 <br/> 
 <div id="profile_pics"></div>
<script type="text/javascript">
var widget_div = document.getElementById("profile_pics");
FB.ensureInit(function () {
  FB.Facebook.get_sessionState().waitUntilReady(function() {
  FB.Facebook.apiClient.friends_get(null, function(result) {
    var markup = "";
    var num_friends = result ? Math.min(5, result.length) : 0;
    if (num_friends > 0) {
      for (var i=0; i<num_friends; i++) {
        markup += 
          '<fb:profile-pic
             size="square"
             uid="'+result[i]+'"
             facebook-logo="true"></fb:profile-pic>';
      }
    }
    widget_div.innerHTML = markup;
    FB.XFBML.Host.parseDomElement(widget_div);
  });
  });
});
</script>
</body>
</html>

A resposta gerada para análise do formulário FBML na Listagem 23 está ilustrada na Figura 1.

Figura 1. Resposta gerada para FBML
Screen capture of FBML-rendered response that shows the Facebook login button page

Página do botão de login usando XFBML

O Facebook apresentou XFBML como um subconjunto de FBML que permite que as páginas baseadas em FBML sejam incorporadas a uma página HTML usando o Facebook Connect ou FBML em um iframe.

A

Listagem 24 constrói um botão de login que autentica um usuário para a plataforma Facebook Connect. É possível integrar esse botão a qualquer página HTML.

Listagem 24. Página habilitada para XFBML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" 
xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
<title>test</title>
</head>
<body>
 <script 
src="http://static.ak.connect.facebook.com/js/api_lib/v0.4/FeatureLoader.js.php/en_US" 
type="text/javascript"></script>
 <fb:login-button></fb:login-button>
 <script type="text/javascript">  FB.init("ff60291faf5de5c350fab4d4cc84b9cb", 
"xd_receiver.htm"); </script>
</body>
</html>

A resposta gerada para análise do formulário XFBML na Listagem 24 está ilustrada na Figura 2.

Figura 2. Resposta gerada para XFBML
Screen capture of XFBML-rendered response that shows the Facebook login button

Twitter

REST

Representational State Transfer (REST) é uma arquitetura de software e um modelo de conversação para sistemas distribuídos. O termo Representational State Transfer foi apresentado e definido por Roy Fielding (um dos autores de Hypertext Transfer Protocol versões 1.0 e 1.1) em sua dissertação de doutorado. Consulte Recursos para mais informações.

A presença do Twitter está aumentando na Web. Isso se deve, em grande parte, à facilidade com a qual o Twitter oferece seus serviços a desenvolvedores por meio de suas APIs. As APIs do Twitter são baseadas em REST e podem retornar resultados como XML, JavaScript Serialized Object Notation (JSON), RSS e formatos de feed Atom.

Recuperando a linha de tempo pública do Twitter como um feed RSS

O Twitter permite recuperar respostas de API em muitos formatos, incluindo RSS. A Listagem 25 mostra um exemplo de pedido de API de Twitter que recupera a linha de tempo pública do Twitter como um feed RSS que usa uma linha de comando de cURL.

Listagem 25. Pedido de linha de tempo pública do Twitter

Após o sucesso do comando cURL anterior, um feed RSS similar ao exemplo na Listagem 26 deve ser retornado como resposta.

Listagem 26. Resposta de linha de tempo pública do Twitter
<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title>Twitter public timeline</title>
    <link>http://twitter.com/public_timeline</link>
    <atom:link type="application/rss+xml" 
href="http://twitter.com/statuses/public_timeline.rss" rel="self"/>
    <description>Twitter updates from everyone!</description>
    <language>en-us</language>
    <ttl>40</ttl>
  <item>
    <title>Here is a tweet title</title>
    <description>Here is a tweet description</description>
    <pubDate>Tue, 10 Nov 2009 18:28:16 +0000</pubDate>
    <guid>http://twitter.com/astrogerly/statuses/1234567890</guid>
    <link>http://twitter.com/astrogerly/statuses/1234567890</link>
  </item>
  <item>
    <title>Here is another tweet title</title>
    <description>Here is another tweet description</description>
    <pubDate>Tue, 9 Nov 2009 14:32:11 +0000</pubDate>
    <guid>http://twitter.com/astrogerly/statuses/6789012345</guid>
    <link>http://twitter.com/astrogerly/statuses/6789012345</link>
  </item>
  ...
  </channel>
</rss>

Recuperando uma linha de tempo de um amigo como XML

As APIs do Twitter podem retornar resultados como Plain Old XML, se necessário. Isso pode ser feito adicionando xml no final do URL do pedido.

Algumas APIs solicitam autenticação antes de serem acessadas. A autenticação é um par simples de nome de usuário/senha passado junto com o pedido.

Para recuperar a linha de tempo dos amigos de Twitter de um determinado usuário como XML usando cURL, execute a linha de comando na Listagem 27.

Listagem 27. Pedido de linha de tempo de amigo do Twitter

Observe o par username:password na linha de comando da API na Listagem 27.

Em caso de sucesso do comando cURL anterior, um documento XML similar ao exemplo na Listagem 28 deverá ser retornado como resposta.

Listagem 28. Resposta de linha de tempo de amigo do Twitter
<?xml version="1.0" encoding="UTF-8"?>
<statuses type="array">
  <status>
    <created_at>Tue Nov 10 16:50:40 +0000 2009</created_at>
    <id>1234567890</id>
    <text>Tweet shown here</text>
    <source>web</source>
    <user>
      <id>7654321</id>
      <name>atwitterusername</name>
      <screen_name>atwitterscreenname</screen_name>
      <location>Worldwide...</location>
      <description>User description</description>
      ...
    </user>
  </status>
  <status>
    <created_at>Tue Nov 9 14:33:22 +0000 2009</created_at>
    <id>1234567890</id>
    <text>Another tweet shown here</text>
    <source>web</source>
    <user>
      <id>1234567</id>
      <name>anothertwitterusername</name>
      <screen_name>anothertwitterscreenname</screen_name>
      <location>Worldwide...</location>
      <description>Another user description</description>
      ...
    </user>
  </status>
  ...
</statuses>

Recuperando a linha de tempo pública do Twitter como um feed Atom

As APIs do Twitter podem retornar resultados também no formato Atom. Novamente, isso é feito adicionando-se "atom" ao final do URL do pedido, conforme mostrado na linha de comando de cURL na Listagem 29.

Listagem 29. Linha de tempo pública do Twitter como pedido de feed Atom
curl http://twitter.com/statuses/public_timeline.atom

No sucesso do comando cURL anterior, um feed Atom similar à Listagem 30 deve ser retornado como resposta.

Listagem 30. Linha de tempo pública do Twitter como resposta de feed Atom
<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>Twitter public timeline</title>
  <id>tag:twitter.com,2007:Status</id>
  <link type="text/html"
        href="http://twitter.com/public_timeline"
        rel="alternate"/>
  <link type="application/atom+xml"
        href="http://twitter.com/statuses/public_timeline.atom"
        rel="self"/>
  <updated>2009-11-10T18:48:25+00:00</updated>
  <subtitle>Twitter updates from everyone!</subtitle>
    <entry>
      <title>username: @Here is a tweet</title>
      <content type="html">username: @Here is a tweet</content>
      <id>
        tag:twitter.com,2007:http://twitter.com/username/statuses/1234567890
      </id>
      <published>2009-11-10T18:48:25+00:00</published>
      <updated>2009-11-10T18:48:25+00:00</updated>
      <link type="text/html"
            href="http://twitter.com/username/statuses/1234567890"
            rel="alternate"/>
      <link type="image/jpeg"
            href="http://a3.twimg.com/profile_images/1234567890/userimage.JPG"
            rel="image"/>
      <author>
        <name>User Name</name>
      </author>
    </entry>
    <entry>
      <title>anotherusername: @Here is another tweet</title>
      <content type="html">anotherusername: @Here is another tweet</content>
      <id>
        tag:twitter.com,2007:http://twitter.com/anotherusername/statuses/6789012345
      </id>
      <published>2009-11-09T16:42:15+00:00</published>
      <updated>2009-11-09T16:42:15+00:00</updated>
      <link type="text/html"
            href="http://twitter.com/anotherusername/statuses/6789012345"
            rel="alternate"/>
      <link type="image/jpeg"
            href="http://a3.twimg.com/profile_images/6789012345/userimage.JPG"
            rel="image"/>
      <author>
        <name>Anotheruser Name</name>
      </author>
    </entry>
</feed>

OpenSocial

OpenSocial é um consórcio de organizações (Google, MySpace e outros) que buscam definir APIs comuns e linguagens de marcação para criação de aplicativos e serviços de mídia social. As linguagens de marcação principais definidas pelo grupo OpenSocial são OpenSocial Markup Language (OSML) e OpenSocial Template (OST).

Marcação declarativa com OST

OST é uma linguagem de marcação declarativa desenvolvida para desenvolvedores de dispositivos para permitir que eles criem modelos reutilizáveis que possam ser usados para criar sites e aplicativos direcionados a dados. Uma implementação de OST analisa e executa código OST antes de chegar ao navegador de um cliente. Esse processo permite que os dados sejam recuperados, armazenados, injetados etc. antes da apresentação em um navegador.

Usando OSML em OST

O OSML define um conjunto de tags que cada contêiner compatível com OpenSocial pode analisar e renderizar. As tags de OSML em uma página OST são usadas para recuperar dados como as informações de perfil de um usuário, listas de amigos etc.

Recuperando os amigos de um usuário com OST/OSML

O exemplo de um dispositivo OST/OSML na Listagem 31 mostra o uso da tag PeopleRequest de OSML para recuperar os amigos de um usuário. Os atributos de userId: userId e groupId especificam qual lista de amigos recuperar. A lista de amigos é apresentada pelo contêiner OST à medida que a página é executada.

Listagem 31. O dispositivo OpenSocial OST/OSML
<?xml version="1.0" encoding="UTF-8"?>
<Module>
  <ModulePrefs title="Server-side Template">
    <Require feature="opensocial-data" />
    <Require feature="opensocial-templates">
    </Require>
  </ModulePrefs>
  <Content type="html">
    <![CDATA[      
      <script xmlns:os="http://ns.opensocial.org/2008/markup" type="text/os-data">
        <os:PeopleRequest key="friends" userId="@viewer" groupId="@friends"/>
      </script>
 
      <script type="text/os-template">
        <ul>
          <li repeat="${friends}">
            <span id="id${Context.Index}">${Cur.name.givenName}</span>
          </li>
        </ul>
     </script>
    ]]>
  </Content>
</Module>

Resumo

A mídia social está rapidamente se tornando uma onda de tecnologia, técnicas e APIs que permitem aos usuários compartilhar conteúdo, mídia e muito mais. Você certamente não quer ignorá-la. A mídia social prevalece em sites como LinkedIn, Facebook, Twitter e muitos sites e serviços diferentes oferecidos pelo Google.

Neste artigo, você reviu os conceitos, o projeto e os detalhes de implementação pertencentes à interação com sites de mídia social que usam várias APIs e formatos de dados baseados em XML, como RSS, Atom, FBML, OSML, SOAP e XML simples.

Recursos

Aprender

Obter produtos e tecnologias

Discutir

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Software livre
ArticleID=457148
ArticleTitle=Combinar APIs de mídia e formatos de dados baseados em XML
publish-date=12162009