<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog do Robson Dantas &#187; Opensocial com PHP</title>
	<atom:link href="http://blogdodantas.dxs.com.br/category/desenvolvimento-opensocial/opensocial-com-php/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogdodantas.dxs.com.br</link>
	<description>Tecnologia, segurança, cotidiano, pesca esportiva e inutilidades</description>
	<lastBuildDate>Tue, 31 Jan 2012 02:31:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.3</generator>
		<item>
		<title>Biblioteca para acesso ao orkut em PHP &#8211; orkut os client php 3legged</title>
		<link>http://blogdodantas.dxs.com.br/2010/06/18/biblioteca-para-acesso-ao-orkut-em-php-orkut-os-client-php-3legged/</link>
		<comments>http://blogdodantas.dxs.com.br/2010/06/18/biblioteca-para-acesso-ao-orkut-em-php-orkut-os-client-php-3legged/#comments</comments>
		<pubDate>Fri, 18 Jun 2010 20:50:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Desenvolvimento de software]]></category>
		<category><![CDATA[Opensocial]]></category>
		<category><![CDATA[Opensocial com PHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[client orkut php]]></category>
		<category><![CDATA[cliente orkut php]]></category>
		<category><![CDATA[orkut 3legged php]]></category>
		<category><![CDATA[orkut client]]></category>
		<category><![CDATA[orkut-os-client]]></category>

		<guid isPermaLink="false">http://blogdodantas.dxs.com.br/?p=413</guid>
		<description><![CDATA[Ufa, faz um bom tempo que não escrevo no blog. A vida no trabalho não está fácil! Hoje, gostaria de anunciar que consegui dedicar uma parte das minhas madrugadas desenvolvendo e ajudando um projeto opensource, que consegue se conectar ao Orkut. Para quem já conhece Opensocial, sabe que é possível desenvolver aplicativos para redes sociais [...]]]></description>
			<content:encoded><![CDATA[<p>Ufa, faz um bom tempo que não escrevo no blog. A vida no trabalho não está fácil!</p>
<p>Hoje, gostaria de anunciar que consegui dedicar uma parte das minhas madrugadas desenvolvendo e ajudando um projeto opensource, que consegue se conectar ao Orkut. Para quem já conhece <a href="http://wiki.opensocial.org" onclick="javascript:pageTracker._trackPageview('out/wiki.opensocial.org');" target="_blank">Opensocial</a>, sabe que é possível desenvolver aplicativos para redes sociais e fazê-los rodar lá dentro. Mas e caso você queira fazer uso da rede social para promover seu aplicativo/site, sem ter necessariamente que produzir um aplicativo Opensocial ?</p>
<p>O Facebook, por exemplo, permite tal interação através do <a title="facebook api" href="http://developers.facebook.com/docs/" onclick="javascript:pageTracker._trackPageview('out/developers.facebook.com');" target="_blank">Facebook Connect</a>, que é basicamente um conjunto de APIs para interagir com a rede, ex: mudar mensagem de status, postar mensagens no mural, buscar amigos, etc &#8230;</p>
<p>Até pouco tempo atrás, a única forma de interagir com o Orkut sem estar necessariamente logado dentro da rede, era usando o <a href="http://sites.google.com/site/oauthgoog/2leggedoauth/2opensocialrestapi" onclick="javascript:pageTracker._trackPageview('out/sites.google.com');" target="_blank">2-legged OAuth</a> que foi disponibilizado a partir da versão 0.8 do Opensocial via REST ou RPC - em poucas palavras, para ter acesso às informações do usuário por fora da rede social, o usuário deve ter um aplicativo seu escrito em Opensocial instalado no perfil. Como parte dos inúmeros processos de melhoria, o time do Orkut desenvolveu um projeto, chamado <a title="orkut os client" href="http://code.google.com/p/orkut-os-client" onclick="javascript:pageTracker._trackPageview('out/code.google.com');" target="_blank">Orkut-os-client</a> &#8211; baseado em 3legged OAuth, e que permite fazer acesso as informações dos usuários dentro do Orkut sem precisar de nenhum aplicativo instalado no perfil.</p>
<p>Mas nem tudo é uma maravilha: A API foi desenvolvida em Java, sendo que a grande maioria das pessoas usam PHP para o desenvolvimento. Depois de um certo tempo lendo usuários solicitando a API em outras linguagens, decidi migrar parte do código para a linguagem PHP, e pesquisando, consegui fazer algo simples e rápido.</p>
<p>A pergunta que você pode estar fazendo é &#8220;como simples e rápido&#8221; ? Bom, primeiro dei uma lida geral no código fonte da API em Java e descobri que todo o processo é um RPC Wrapper, e que as chamadas dos métodos da rede social são exatamente as mesmas usadas no Opensocial, ex: &#8220;messages.get&#8221; .</p>
<p>Com base nisso, fiz download da API já existente &#8211; desenvolvida pelos caras da Google, chamada <a href="http://code.google.com/p/opensocial-php-client/" onclick="javascript:pageTracker._trackPageview('out/code.google.com');" target="_blank">opensocial-php-client </a>-  que possui implementação de 2-legged e 3-legged para uma grande parte das redes sociais.</p>
<p>Apliquei um patch, modificando as url&#8217;s de access token, além de alterar as chamadas JSON que são feitas ao servidor de RPC, e funcionou muito bem. Já há uma versão rodando que permite ler e gravar SCRAPS, além de pegar informações dos seus amigos.</p>
<p>Continuo trabalhando para dar suporte às outras funcionalidades: Álbum, activities, e outros.</p>
<p>O projeto foi disponibilizado no GoogleCode, e criei uma lista de discussão para os interessados no desenvolvimento. Caso queira participar, sua contribuição é bem vinda.</p>
<p>Site do projeto, no Google Code: <a href="http://code.google.com/p/orkut-os-client-php/" onclick="javascript:pageTracker._trackPageview('out/code.google.com');" target="_blank">Orkut-os-client-php</a></p>
<p><a href="http://groups.google.com/group/orkut-php-client/" onclick="javascript:pageTracker._trackPageview('out/groups.google.com');" target="_blank">Grupo de discussão sobre a biblioteca</a></p>
<p>Enjoy!</p>
<p>Robson Dantas</p>
<p class="bookmark-me">Bookmarks<a title="technorati.com" href="http://www.technorati.com/faves?add=http%3A%2F%2Fblogdodantas.dxs.com.br%2F2010%2F06%2F18%2Fbiblioteca-para-acesso-ao-orkut-em-php-orkut-os-client-php-3legged%2F" onclick="javascript:pageTracker._trackPageview('out/www.technorati.com');" target="_blank" rel="nofollow"><img src="http://www.dxs.com.br/wordpress/wp-content/plugins/bookmark-me/images/technorati.png" style="margin:0;border:0;padding:0" alt="bookmark"/></a> <a title="del.icio.us" href="http://del.icio.us/post?url=http%3A%2F%2Fblogdodantas.dxs.com.br%2F2010%2F06%2F18%2Fbiblioteca-para-acesso-ao-orkut-em-php-orkut-os-client-php-3legged%2F&amp;title=Biblioteca+para+acesso+ao+orkut+em+PHP+%26%238211%3B+orkut+os+client+php+3legged" onclick="javascript:pageTracker._trackPageview('out/del.icio.us');" target="_blank" rel="nofollow"><img src="http://www.dxs.com.br/wordpress/wp-content/plugins/bookmark-me/images/delicious.png" style="margin:0;border:0;padding:0" alt="bookmark"/></a> <a title="digg.com" href="http://digg.com/submit?url=http%3A%2F%2Fblogdodantas.dxs.com.br%2F2010%2F06%2F18%2Fbiblioteca-para-acesso-ao-orkut-em-php-orkut-os-client-php-3legged%2F&amp;title=Biblioteca+para+acesso+ao+orkut+em+PHP+%26%238211%3B+orkut+os+client+php+3legged" onclick="javascript:pageTracker._trackPageview('out/digg.com');" target="_blank" rel="nofollow"><img src="http://www.dxs.com.br/wordpress/wp-content/plugins/bookmark-me/images/digg.png" style="margin:0;border:0;padding:0" alt="bookmark"/></a> <a title="www.facebook.com" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblogdodantas.dxs.com.br%2F2010%2F06%2F18%2Fbiblioteca-para-acesso-ao-orkut-em-php-orkut-os-client-php-3legged%2F&amp;t=Biblioteca+para+acesso+ao+orkut+em+PHP+%26%238211%3B+orkut+os+client+php+3legged" onclick="javascript:pageTracker._trackPageview('out/www.facebook.com');" target="_blank" rel="nofollow"><img src="http://www.dxs.com.br/wordpress/wp-content/plugins/bookmark-me/images/facebook.png" style="margin:0;border:0;padding:0" alt="bookmark"/></a> <a title="bookmarks.yahoo.com" href="http://bookmarks.yahoo.com/toolbar/savebm?opener=tb&amp;u=http%3A%2F%2Fblogdodantas.dxs.com.br%2F2010%2F06%2F18%2Fbiblioteca-para-acesso-ao-orkut-em-php-orkut-os-client-php-3legged%2F" onclick="javascript:pageTracker._trackPageview('out/bookmarks.yahoo.com');" target="_blank" rel="nofollow"><img src="http://www.dxs.com.br/wordpress/wp-content/plugins/bookmark-me/images/yahoo.png" style="margin:0;border:0;padding:0" alt="bookmark"/></a> <a title="www.google.com" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fblogdodantas.dxs.com.br%2F2010%2F06%2F18%2Fbiblioteca-para-acesso-ao-orkut-em-php-orkut-os-client-php-3legged%2F&amp;title=Biblioteca+para+acesso+ao+orkut+em+PHP+%26%238211%3B+orkut+os+client+php+3legged" onclick="javascript:pageTracker._trackPageview('out/www.google.com');" target="_blank" rel="nofollow"><img src="http://www.dxs.com.br/wordpress/wp-content/plugins/bookmark-me/images/google.png" style="margin:0;border:0;padding:0" alt="bookmark"/></a> </p><p><script type="text/javascript"><!--
google_ad_client = "pub-3400408440819022";
/* 468x60, criado 02/11/10 */
google_ad_slot = "1718761682";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p>]]></content:encoded>
			<wfw:commentRss>http://blogdodantas.dxs.com.br/2010/06/18/biblioteca-para-acesso-ao-orkut-em-php-orkut-os-client-php-3legged/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Signed requests com Opensocial, PHP e OAuth</title>
		<link>http://blogdodantas.dxs.com.br/2008/12/06/signed-requests-com-opensocial/</link>
		<comments>http://blogdodantas.dxs.com.br/2008/12/06/signed-requests-com-opensocial/#comments</comments>
		<pubDate>Sat, 06 Dec 2008 19:29:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Opensocial]]></category>
		<category><![CDATA[Opensocial com PHP]]></category>
		<category><![CDATA[oauth com php]]></category>
		<category><![CDATA[oauth opensocial]]></category>
		<category><![CDATA[opensocial]]></category>
		<category><![CDATA[signed request]]></category>

		<guid isPermaLink="false">http://blogdodantas.dxs.com.br/?p=170</guid>
		<description><![CDATA[Após ver várias pessoas com dúvidas sobre o assunto, resolvi escrever um pouco como implementar requests assinados, ou seja, signed requests utilizando Opensocial, OAuth e Orkut como container. Para deixar claro o que é o signed request, vamos usar um exemplo bem básico: Você possui um aplicativo Opensocial rodando no Orkut que envia requisições HTTP [...]]]></description>
			<content:encoded><![CDATA[<p>Após ver várias pessoas com dúvidas sobre o assunto, resolvi escrever um pouco como implementar requests assinados, ou seja, signed requests utilizando Opensocial, OAuth e Orkut como container.</p>
<p>Para deixar claro o que é o signed request, vamos usar um exemplo bem básico:</p>
<ul>
<li>Você possui um aplicativo Opensocial rodando no Orkut que envia requisições HTTP para seu servidor;</li>
<li>O seu servidor trata a requisição e salva alguns dados no banco de dados;</li>
<li>Algum momento depois, o seu aplicativo requisita os dados e sua aplicação codifica e transmite de volta;</li>
<li>Você quer garantir que somente o Orkut envie requisições HTTP ( get ou post), garantindo que ninguém manipule os dados, usando um formulário de mentira ou até modificando os parâmetros via Firebug, por exemplo;</li>
</ul>
<p>O último tópico é a chave de tudo. Pois bem, como garantir essa segurança ? Pensando nesse problema, os containers implementaram um modelo baseado no OAuth. Se você nunca ouviu falar de OAuth, sugiro que vá até o site e dê uma olhada &#8211; <a href="http://www.oauth.net" onclick="javascript:pageTracker._trackPageview('out/www.oauth.net');">http://www.oauth.net</a>.</p>
<p>De uma visão bem macro, o container (Orkut, Hi5, MySpace, etc), criptografa os dados, transmite alguns parâmetros através do cabeçalho HTTP e o servidor final, deve ser capaz de decriptografar a mensagem e receber o request. Caso isso não aconteça, o request não é válido e a mensagem não chega ao destino.</p>
<p>Gostaria de deixar claro que isso não é SSL (secure socket layer). É apenas um protocolo para ser usado sob HTTP para melhorar a segurança. Utiliza alguns dos mecanismos de criptografia do SSL, mas não da mesma forma.</p>
<p>Continuando&#8230;</p>
<p>Se você, da mesma forma que eu, gosta de um pouco de teoria, sugiro acessar o site do OAuth e entender um pouco mais como funciona. Muita gente prefere ir direto ao código, portanto vou procurar ser um pouco objetivo aqui.</p>
<p>Para implementar requests assinados no Orkut, primeiramente você precisa baixar a chave pública disponibilizada por eles mesmos. Dessa forma garantimos que conseguimos decriptar a mensagem enviada pelo servidor. <a href="http://sandbox.orkut.com/46/o/pub.1199819524.-1556113204990931254.cer" onclick="javascript:pageTracker._trackPageview('out/sandbox.orkut.com');" target="_blank">Você pode baixar por aqui </a>.</p>
<p>Caso queira a lista completa de todos os certificados, use esse blog do Opensocial Resources que a fonte é confiável. <a href="https://opensocialresources.appspot.com/certificates/" onclick="javascript:pageTracker._trackPageview('out/opensocialresources.appspot.com');">https://opensocialresources.appspot.com/certificates/</a></p>
<p>Depois disso, basta implementar uma receita de bolo. Praticamente todas as linguagens oferecem suporte ao OAuth e eu já implementei tranquilamente usando PHP, .NET e Java. Especificamente para PHP tenho código fonte pronto que vou disponibilizar aqui. Não é nada muito sofisticado, mas dá pra você implementar algo por cima.</p>
<p>1- Implementando um request simples pelo Opensocial. Estou supondo que você saiba como é criar o app.xml e como chamar pelo menos a função init:</p>
<p><em>function criaSignedRequest()<br />
{</em></p>
<p><em>var postdata = {acao: &#8220;retornaJson&#8221;}; // post campo chamado acao<br />
postdata = gadgets.io.encodeValues(postdata);</em></p>
<p><em>var params = {};<br />
// linha abaixo determina que o request é do tipo SIGNED.<br />
params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.SIGNED;<br />
params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;<br />
params[gadgets.io.RequestParameters.POST_DATA]= postdata;</em></p>
<p><em>// envia o request<br />
gadgets.io.makeRequest(&#8216;http://www.meusite.com/acao.php&#8217;, onCallback,params);<br />
}</em></p>
<p><em>function onCallback(ret)<br />
{<br />
//retorna um json convertido para array<br />
var retorno = gadgets.json.parse(gadgets.util.unescapeString(ret.data));</em></p>
<p><em>if(retorno!=null)<br />
{<br />
alert(retorno['mensagem']); // deve imprimir Ola mundo<br />
}</em></p>
<p><em>}</em></p>
<p>2 &#8211; Implementando do lado do PHP</p>
<p>Não vou entrar nos detalhes da implementação do OAuth. Simplesmente baixei uma API pronta, disponibilizada pela própria Google e realizei as alterações necessárias para meu código funcionar.</p>
<p>Mais detalhes do projeto OAuth em PHP você pode ver aqui: <a href="http://code.google.com/p/oauth/" onclick="javascript:pageTracker._trackPageview('out/code.google.com');">http://code.google.com/p/oauth/</a></p>
<p><em>&lt;?php<br />
require_once(&#8220;verifica_certificado.php&#8221;);</em></p>
<p><em>// verifica se o certificado veio correto.<br />
if($payload["auth"]==&#8221;OK&#8221;)<br />
{<br />
$acao = $_POST["acao"]; // recebe o post chamado acao definido no javascript</em></p>
<p><em>if($acao==&#8221;retornaJson&#8221;)<br />
{<br />
$retorno = Array();<br />
$retorno["mensagem"]=&#8221;Ola mundo&#8221;;</em></p>
<p><em>// essa funcao faz a magica de converter um array php em um json que irá virar código javascript<br />
echo json_encode($retorno);</em></p>
<p><em>}<br />
}</em></p>
<p><em>?&gt;</em></p>
<p>Nota: $payload["auth"] é o retorno que está em verifica_certificado.php . Dê uma avaliada no código, que por sinal é bem simples. Brinque também com o Firebug para ver os requests sendo enviados e o retorno do mesmo.</p>
<p><a href="http://www.dxs.com.br/opensocial.zip" >Baixe os códigos necessários para fazer a aplicação rodar</a> (verifica_certificado.php, disable_magic_quotes.php, CertFileAccessor.php, OAuth.php).</p>
<p>Espero ter clareado um pouco e mostrar como é simples. Além disso, não deixe de visitar a wiki do Opensocial sobre Signed Requests que está bem detalhada e possui exemplo em Java. <a href="http://wiki.opensocial.org/index.php?title=Validating_Signed_Requests" onclick="javascript:pageTracker._trackPageview('out/wiki.opensocial.org');">http://wiki.opensocial.org/index.php?title=Validating_Signed_Requests</a></p>
<p>Tem dúvida ? Poste aqui no Blog.</p>
<p>-Robson Dantas, PMP, Opensocial Guru</p>
<p class="bookmark-me">Bookmarks<a title="technorati.com" href="http://www.technorati.com/faves?add=http%3A%2F%2Fblogdodantas.dxs.com.br%2F2008%2F12%2F06%2Fsigned-requests-com-opensocial%2F" onclick="javascript:pageTracker._trackPageview('out/www.technorati.com');" target="_blank" rel="nofollow"><img src="http://www.dxs.com.br/wordpress/wp-content/plugins/bookmark-me/images/technorati.png" style="margin:0;border:0;padding:0" alt="bookmark"/></a> <a title="del.icio.us" href="http://del.icio.us/post?url=http%3A%2F%2Fblogdodantas.dxs.com.br%2F2008%2F12%2F06%2Fsigned-requests-com-opensocial%2F&amp;title=Signed+requests+com+Opensocial%2C+PHP+e+OAuth" onclick="javascript:pageTracker._trackPageview('out/del.icio.us');" target="_blank" rel="nofollow"><img src="http://www.dxs.com.br/wordpress/wp-content/plugins/bookmark-me/images/delicious.png" style="margin:0;border:0;padding:0" alt="bookmark"/></a> <a title="digg.com" href="http://digg.com/submit?url=http%3A%2F%2Fblogdodantas.dxs.com.br%2F2008%2F12%2F06%2Fsigned-requests-com-opensocial%2F&amp;title=Signed+requests+com+Opensocial%2C+PHP+e+OAuth" onclick="javascript:pageTracker._trackPageview('out/digg.com');" target="_blank" rel="nofollow"><img src="http://www.dxs.com.br/wordpress/wp-content/plugins/bookmark-me/images/digg.png" style="margin:0;border:0;padding:0" alt="bookmark"/></a> <a title="www.facebook.com" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblogdodantas.dxs.com.br%2F2008%2F12%2F06%2Fsigned-requests-com-opensocial%2F&amp;t=Signed+requests+com+Opensocial%2C+PHP+e+OAuth" onclick="javascript:pageTracker._trackPageview('out/www.facebook.com');" target="_blank" rel="nofollow"><img src="http://www.dxs.com.br/wordpress/wp-content/plugins/bookmark-me/images/facebook.png" style="margin:0;border:0;padding:0" alt="bookmark"/></a> <a title="bookmarks.yahoo.com" href="http://bookmarks.yahoo.com/toolbar/savebm?opener=tb&amp;u=http%3A%2F%2Fblogdodantas.dxs.com.br%2F2008%2F12%2F06%2Fsigned-requests-com-opensocial%2F" onclick="javascript:pageTracker._trackPageview('out/bookmarks.yahoo.com');" target="_blank" rel="nofollow"><img src="http://www.dxs.com.br/wordpress/wp-content/plugins/bookmark-me/images/yahoo.png" style="margin:0;border:0;padding:0" alt="bookmark"/></a> <a title="www.google.com" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fblogdodantas.dxs.com.br%2F2008%2F12%2F06%2Fsigned-requests-com-opensocial%2F&amp;title=Signed+requests+com+Opensocial%2C+PHP+e+OAuth" onclick="javascript:pageTracker._trackPageview('out/www.google.com');" target="_blank" rel="nofollow"><img src="http://www.dxs.com.br/wordpress/wp-content/plugins/bookmark-me/images/google.png" style="margin:0;border:0;padding:0" alt="bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blogdodantas.dxs.com.br/2008/12/06/signed-requests-com-opensocial/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Opensocial e PHP &#8211; Parceiros inseparáveis</title>
		<link>http://blogdodantas.dxs.com.br/2008/11/10/opensocial-e-php-parceiros-inseparaveis/</link>
		<comments>http://blogdodantas.dxs.com.br/2008/11/10/opensocial-e-php-parceiros-inseparaveis/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 03:02:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Opensocial]]></category>
		<category><![CDATA[Opensocial com PHP]]></category>
		<category><![CDATA[opensocial]]></category>
		<category><![CDATA[opensocial php]]></category>
		<category><![CDATA[opensocial php json]]></category>
		<category><![CDATA[opensocial php post]]></category>

		<guid isPermaLink="false">http://blogdodantas.dxs.com.br/?p=156</guid>
		<description><![CDATA[Tópicos descritos neste post: Validando signed requests em PHP usando OAUTH e containers como orkut, hi5 e myspace; Comunicação entre widget e aplicativo server side usando opensocial, javascript, php e json; Olá! Após alguns dias sem escrever, resolvi voltar ao assunto do Opensocial e postar alguns detalhes importantes sobre como construir uma aplicação e transferir [...]]]></description>
			<content:encoded><![CDATA[<p>Tópicos descritos neste post:</p>
<ul>
<li>Validando signed requests em PHP usando OAUTH e containers como orkut, hi5 e myspace;</li>
<li>Comunicação entre widget e aplicativo server side usando opensocial, javascript, php e json;</li>
</ul>
<p>Olá!</p>
<p>Após alguns dias sem escrever, resolvi voltar ao assunto do Opensocial e postar alguns detalhes importantes sobre como construir uma aplicação e transferir dados entre o widget e uma aplicação server-side, no caso, escrita em PHP.</p>
<p>Recebo várias questões por e-mail sobre qual tecnologia utilizar e o que costumo dizer é: &#8220;A que você melhor souber&#8221;. O processo de comunicação é simples, já que todo o tráfego de dados é feito através de requisições de POST e GET,  e além disso, todo o mecanismo de segurança da aplicação, já está criado nas mais diversas linguagens (estou me referindo aos signed-requests ou requisições seguras).</p>
<p><strong>Introdução:</strong></p>
<p>Se você nunca ouviu falar a respeito dos signed-requests, vou definir em poucas palavras e deixar uma referência do próprio Opensocial para que você possa ver os códigos e implementar.</p>
<p>Imaginemos o seguinte cenário:</p>
<ul>
<li>O aplicativo opensocial (widget), precisa mandar alguns dados para o servidor xyz.com através de um formulário;</li>
<li>O servidor xyz.com deseja aceitar somente requisições que sejam dos servidores do container (Orkut, Hi5, Myspace, etc), garantindo que alguém não possa forjar a transferência dos dados;</li>
</ul>
<p>Como fazer isso ? Simples:</p>
<p>Você precisa de um certificado (uma chave que garante que seu server consiga descobrir que o outro lado é o container) e precisa saber decriptar a mensagem de autenticação. Todo processo de autenticação é realizado através de um protocolo chamado OAUTH, que está descrito no site <a href="http://www.oauth.net" onclick="javascript:pageTracker._trackPageview('out/www.oauth.net');" target="_blank">oauth.net</a> . Procure as bibliotecas nos sites de busca, pois a maioria das linguagens já possuem APIs prontas para trabalhar com o protocolo; seja esperto e não tente reinventar a roda <img src='http://www.dxs.com.br/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  .</p>
<p>Depois disso, você só precisa implementar uma rotina genérica para validar todo o processo de request. Simples, não ? Caso precise de mais detalhes, dê uma verificada no site do Opensocial, onde estão disponíveis exemplos em PHP e Java.</p>
<p><a href="http://wiki.opensocial.org/index.php?title=Validating_Signed_Requests" onclick="javascript:pageTracker._trackPageview('out/wiki.opensocial.org');" target="_blank">http://wiki.opensocial.org/index.php?title=Validating_Signed_Requests</a></p>
<p><strong>Postando dados &#8211; PHP &#8211; JSON e Opensocial</strong></p>
<p>Enfim, agora que você já &#8220;sabe&#8221; como tornar seu aplicativo seguro, vamos ao que interessa: realizar transferência de dados entre o container e seu aplicativo, escrito em PHP.</p>
<p>Antes de começar, vou definir aqui o que é o JSON: Nada, além de javascript serializado em uma string. Isso mesmo, javascript serializado em string. Em php existem duas funções básicas para trabalhar com ele:</p>
<p>json_encode(msg) e json_decode(msg). Só para deixar claro, um array $msg["a"]=&#8221;abc&#8221; e $msg["b"]=&#8221;xyz&#8221;, ao passar por json_encode($msg), retornaria <em>{&#8220;a&#8221;:&#8221;abc&#8221;,&#8221;b&#8221;:&#8221;xyz&#8221;}. </em>Ou seja, um array javascript <img src='http://www.dxs.com.br/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ; continuando&#8230;</p>
<p>O opensocial fornece uma api de IO que encapsula todo o processo de transferência de dados e você não precisa se preocupar se usa AJAX, XMLHTTP ou qualquer outra coisa. Além disso, também não precisa se preocupar com problemas de requests em domínios diferentes e de problemas de segurança nessas transações pois a API trata, usando um mecanismo de proxy.</p>
<p>Vamos imaginar um cenário, onde você queira cadastrar dados de um usuário do seu widget, no Orkut por exemplo, salvando em um banco de dados mySQL, com rotinas escritas em PHP.</p>
<p>app.xml exemplo:</p>
<p><em>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />
&lt;Module&gt;<br />
&lt;ModulePrefs title=&#8221;Meu cadastro&#8221;<br />
description=&#8221;Meu aplicativo teste&#8221;<br />
author_email=&#8221;blogdodantas@dxs.com.br&#8221;<br />
author_location=&#8221;Sao Paulo, Brazil&#8221;&gt;<br />
&lt;Require feature=&#8221;opensocial-0.7&#8243;/&gt;<br />
&lt;Require feature=&#8221;dynamic-height&#8221; /&gt;<br />
&lt;Require feature=&#8221;setprefs&#8221;/&gt;<br />
&lt;Require feature=&#8221;views&#8221; /&gt;<br />
&lt;/ModulePrefs&gt;<br />
&lt;Content type=&#8221;html&#8221;&gt;<br />
&lt;![CDATA[<br />
&lt;script language="javascript"&gt;</em></p>
<p><em>// somente exemplo para lidar com layers<br />
function init()<br />
{<br />
     var cabecalho = document.getElementById("cabecalho");</em></p>
<p><em>     if(cabecalho!=null)<br />
          cabecalho.innerHTML="&lt;center&gt;Meu cabeçalho !!&lt;/center&gt;";<br />
}</em></p>
<p><em>// funcao usada para mandar dados ao servidor<br />
function gravaDados()<br />
{<br />
          // array de parametros para a api<br />
          var params = {};</em></p>
<p><em>          var formulario = document.getElementById("frm");<br />
          var nome="";<br />
          var email="";</em></p>
<p><em>     if(formulario!=null)<br />
     {<br />
          nome = formulario.nome.value;<br />
          email = formulario.email.value;</em></p>
<p><em>          // array de dados do post<br />
          postdata = {<br />
          nomeUsuario: nome,<br />
          emailUsuario: email<br />
          }</em></p>
<p><em>          // codifica os dados do post<br />
          postdata = gadgets.io.encodeValues(postdata);</em></p>
<p><em>          // adiciona os parametros<br />
          params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.SIGNED;<br />
          params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;<br />
          params[gadgets.io.RequestParameters.POST_DATA]= postdata;</em></p>
<p><em>          // define url de destino do post<br />
          var url = &#8220;http://www.meuservidor.com.br/gravadados.php&#8221;;</em></p>
<p><em>          // executa o post para url, com o callback chamado onResposta, passando params<br />
          gadgets.io.makeRequest(url, onResposta, params);<br />
     }<br />
}</em></p>
<p><em>// funcao executada quando o post for enviado<br />
function onResposta(ret)<br />
{<br />
     var dados = ret.data;</em></p>
<p><em>     // verifica o retorno do post, json é transformado em array no PHP<br />
     if(dados!=null)<br />
     {<br />
          // transforma a string em um array. Função nativa<br />
          dados = gadgets.json.parse(gadgets.util.unescapeString(dados));</em></p>
<p><em>          if(dados["mensagem"]==&#8221;ok&#8221;)<br />
          {<br />
               alert(&#8220;Dados gravados com sucesso&#8221;);<br />
          }<br />
     }<br />
     else<br />
     {<br />
          alert(&#8220;Não foi possível gravar&#8221;);<br />
     }<br />
}</em></p>
<p><em>&lt;/script&gt;<br />
&lt;script&gt;<br />
gadgets.util.registerOnLoadHandler(init);<br />
&lt;/script&gt;</em></p>
<p><em>&lt;div id=&#8221;cabecalho&#8221;&gt;&lt;/div&gt;</em></p>
<p><em>&lt;form id=&#8221;frm&#8221;&gt;<br />
Nome: &lt;input type=&#8221;text&#8221; name=&#8221;nome&#8221; id=&#8221;nome&#8221;&gt;&lt;br/&gt;<br />
E-mail: &lt;input type=&#8221;text&#8221; name=&#8221;email&#8221; id=&#8221;email&#8221;&gt;&lt;br/&gt;<br />
&lt;input type=&#8221;button&#8221; value=&#8221;Cadastrar&#8221; onclick=&#8221;gravaDados()&#8221;&gt;<br />
&lt;/form&gt;<br />
]]&gt;<br />
&lt;/Content&gt;<br />
&lt;/Module&gt;</em></p>
<p>Este simples app.xml envia um post para uma página chamada gravadados.php. A página gravadados.php deve tratar o post, salvar no banco e retornar uma string json para que o javascript trate de volta.</p>
<p>Um exemplo básico desse arquivo, poderia ser:</p>
<p><em>&lt;?php<br />
// gravadados.php &#8211; exemplo &#8211; fictício<br />
// blogdodantas.dxs.com.br</em></p>
<p><em>// arquivo que verifica certificado do orkut<br />
require_once(&#8220;verifica_certificado.php&#8221;);</em></p>
<p><em>$msgRetorno["msg"] = &#8220;&#8221;;</em></p>
<p><em>// verifica se o certificado veio correto.<br />
if($payload["auth"]==&#8221;OK&#8221;)<br />
{<br />
</em>     <em>// abrir conexao com banco, etc..</em></p>
<p>     <em>// post enviado pelo javascript &#8211; opensocial<br />
</em>     <em>$nome = $_POST["nomeUsuario"];<br />
</em>     <em>$email = $_POST["emailUsuario"];</em></p>
<p>     <em>$sql = &#8220;INSERT INTO tabela(nome, email) values(&#8216;&#8221;.$nome.&#8221;&#8216;,&#8217;&#8221;.$email.&#8221;&#8216;)&#8221;;<br />
</em>     <em>mysql_query($sql);</em></p>
<p>     <em>$msgRetorno["msg"]=&#8221;ok&#8221;;</em></p>
<p><em>}<br />
else<br />
{<br />
</em>     <em>$msgRetorno["msg"]=&#8221;Problema autenticando&#8221;;<br />
}</em></p>
<p><em>// funcao mágica para retornar json com php<br />
echo json_encode($msgRetorno);</em></p>
<p><em>?&gt;</em></p>
<p>Tranquilo, não ?</p>
<p>Apesar de simples, espero ter ajudado a desvendar esse mistério de transmissão de dados. Uma dica legal é usar o firebug, no firefox. Você consegue debugar toda a transmissão de dados e verificar os post&#8217;s sendo transmitidos.</p>
<p>Além disso, não deixe de consultar a wiki do opensocial. Eu mesmo escrevo algumas coisas e tem muita informação interessante.</p>
<p><a href="http://wiki.opensocial.org" onclick="javascript:pageTracker._trackPageview('out/wiki.opensocial.org');" target="_blank">http://wiki.opensocial.org</a></p>
<p>Até mais!</p>
<p><em>-Robson<br />
Especialista em Opensocial| Opensocial guru</em></p>
<p class="bookmark-me">Bookmarks<a title="technorati.com" href="http://www.technorati.com/faves?add=http%3A%2F%2Fblogdodantas.dxs.com.br%2F2008%2F11%2F10%2Fopensocial-e-php-parceiros-inseparaveis%2F" onclick="javascript:pageTracker._trackPageview('out/www.technorati.com');" target="_blank" rel="nofollow"><img src="http://www.dxs.com.br/wordpress/wp-content/plugins/bookmark-me/images/technorati.png" style="margin:0;border:0;padding:0" alt="bookmark"/></a> <a title="del.icio.us" href="http://del.icio.us/post?url=http%3A%2F%2Fblogdodantas.dxs.com.br%2F2008%2F11%2F10%2Fopensocial-e-php-parceiros-inseparaveis%2F&amp;title=Opensocial+e+PHP+%26%238211%3B+Parceiros+insepar%C3%A1veis" onclick="javascript:pageTracker._trackPageview('out/del.icio.us');" target="_blank" rel="nofollow"><img src="http://www.dxs.com.br/wordpress/wp-content/plugins/bookmark-me/images/delicious.png" style="margin:0;border:0;padding:0" alt="bookmark"/></a> <a title="digg.com" href="http://digg.com/submit?url=http%3A%2F%2Fblogdodantas.dxs.com.br%2F2008%2F11%2F10%2Fopensocial-e-php-parceiros-inseparaveis%2F&amp;title=Opensocial+e+PHP+%26%238211%3B+Parceiros+insepar%C3%A1veis" onclick="javascript:pageTracker._trackPageview('out/digg.com');" target="_blank" rel="nofollow"><img src="http://www.dxs.com.br/wordpress/wp-content/plugins/bookmark-me/images/digg.png" style="margin:0;border:0;padding:0" alt="bookmark"/></a> <a title="www.facebook.com" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblogdodantas.dxs.com.br%2F2008%2F11%2F10%2Fopensocial-e-php-parceiros-inseparaveis%2F&amp;t=Opensocial+e+PHP+%26%238211%3B+Parceiros+insepar%C3%A1veis" onclick="javascript:pageTracker._trackPageview('out/www.facebook.com');" target="_blank" rel="nofollow"><img src="http://www.dxs.com.br/wordpress/wp-content/plugins/bookmark-me/images/facebook.png" style="margin:0;border:0;padding:0" alt="bookmark"/></a> <a title="bookmarks.yahoo.com" href="http://bookmarks.yahoo.com/toolbar/savebm?opener=tb&amp;u=http%3A%2F%2Fblogdodantas.dxs.com.br%2F2008%2F11%2F10%2Fopensocial-e-php-parceiros-inseparaveis%2F" onclick="javascript:pageTracker._trackPageview('out/bookmarks.yahoo.com');" target="_blank" rel="nofollow"><img src="http://www.dxs.com.br/wordpress/wp-content/plugins/bookmark-me/images/yahoo.png" style="margin:0;border:0;padding:0" alt="bookmark"/></a> <a title="www.google.com" href="http://www.google.com/bookmarks/mark?op=edit&amp;output=popup&amp;bkmk=http%3A%2F%2Fblogdodantas.dxs.com.br%2F2008%2F11%2F10%2Fopensocial-e-php-parceiros-inseparaveis%2F&amp;title=Opensocial+e+PHP+%26%238211%3B+Parceiros+insepar%C3%A1veis" onclick="javascript:pageTracker._trackPageview('out/www.google.com');" target="_blank" rel="nofollow"><img src="http://www.dxs.com.br/wordpress/wp-content/plugins/bookmark-me/images/google.png" style="margin:0;border:0;padding:0" alt="bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://blogdodantas.dxs.com.br/2008/11/10/opensocial-e-php-parceiros-inseparaveis/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

