Comunidad de diseño web y desarrollo en internet online

Aplicacion con google blogger

Citar            
MensajeEscrito el 11 Feb 2011 07:13 am
Hola amigos, mi nombre José Olmos y soy nuevo por estos lares.

Tengo un par de meses utilizando flex, he decidido hacer una aplicación en AIR para ver y crear posts en un blog (google blogger) he estado leyendo su api y he determinado que sería muy facil implementar HTTPSERVICE dado que uno de los métodos de conexión es por medio de protocolos http.

Todo esta fácil dado que como ya sabrán es puro implementar XML, el problema que tengo en este momento es la autenticación, que la verdad nunca me había topado con esta forma de datos y no se como manipularla en el httpservice aquí esta mi problema...

Para enviar la información a google ocupo a hacer un posting (o envío), pero no entiendo donde poner cada dato en su lugar.

Sé que (obvio) el método es post, que el tipo de contenido o formato de los datos es application/x-www-form-urlencoded, pero lo demás no tengo ni la menor idea donde va.

Código :

POST /accounts/ClientLogin HTTP/1.0
Content-type: application/x-www-form-urlencoded

accountType=HOSTED_OR_GOOGLE&[email protected]&Passwd=north23AZ&service=cl&
   source=Gulp-CalGulp-1.05


Más info sobre el método de conexión en aplicaciones de escritorio: http://code.google.com/intl/es-ES/apis/accounts/docs/AuthForInstalledApps.html#Request

Espero que me puedan ayudar, muchas gracias.

Saludos.

Por JOlmos

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Feb 2011 01:18 am
Hola José!

Pues mira podrias empezar con un ejemplo sencillo como este, no soy desarrollador flex, pero he trabajado con la api "data export" de google en otros lenguajes:


espero que este ejemplo te ayude, creo se entiende por si solo si ya eres familiar con flex, el ejemplo que te pongo es con google calendar (no tengo blogs), que funciona igual que la api de blogger, al menos la autentificacion es exactamente igual, solo cambiando el codigo de servicio por el correspondiente en blogger, eso te lo dice la documentacion, como ves el de google calendar es "cl".. bueno si necesitaras ayuda con el ejemplo me dices!

Saludos!

Código ActionScript :

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
                  xmlns:s="library://ns.adobe.com/flex/spark" 
                  xmlns:mx="library://ns.adobe.com/flex/mx" height="300" width="600" backgroundColor="#232222">
   <fx:Style source="GoogleData.css"/>
   
   <fx:Declarations>
      <s:HTTPService id="gdataService" result="gdataService_resultHandler(event)"
                  fault="gdataService_faultHandler(event)" showBusyCursor="true"
                  url="https://www.google.com/calendar/feeds/default/private/full"/>
   </fx:Declarations>
   
   <fx:Script>
      <![CDATA[
         import mx.collections.XMLListCollection;
         import mx.controls.Alert;
         import mx.rpc.events.FaultEvent;
         import mx.rpc.events.ResultEvent;

         protected function gdataService_resultHandler(event:ResultEvent):void
         {
            
         }


         protected function gdataService_faultHandler(event:FaultEvent):void
         {
            Alert.show('Error');
         }


         protected function Get_clickHandler(event:MouseEvent):void
         {
            autorizar('[email protected]', 'xxxxxx', 'cl', function (resultado:Object):void
            {
               gdataService.headers = 'GoogleLogin Auth='+resultado.auth;
               gdataService.send();
            });
         }

         protected function autorizar(usuario:String, passwd:String, servicio:String, callback:Function):void
         {
            var cargador:URLLoader = new URLLoader();
            
            cargador.addEventListener( Event.COMPLETE, function (e:Event):void { 
               var tmp:Array = cargador.data.split('\n');
               callback.call(null, {'sid':tmp.replace('SID=', ''), 'lsid':tmp.replace('LSID=', ''),'auth':tmp.replace('Auth=', '') }); } );
            
            var solicitud:URLRequest = new URLRequest( 'https://google.com/accounts/ClientLogin' );
            
            solicitud.method = URLRequestMethod.POST;
            solicitud.data = 
               'Email='+usuario+'&'+
               'Passwd='+passwd+'&service='+servicio+'&source=mi-app-1.0';
            
            cargador.load( solicitud );
         }
      ]]>
   </fx:Script>
   
   <s:Button id="Get" label="Cargar" click="Get_clickHandler(event)"  x="534.65" y="265"/>
   
   <mx:DataGrid dataProvider="{gdataService.lastResult.feed.entry}" x="10" y="43" width="580" height="214" fontFamily="Arial">
      <mx:columns>
         <mx:DataGridColumn headerText="Evento" dataField="title"/>
         <mx:DataGridColumn headerText="Descripción" dataField="content"/>
      </mx:columns>
   </mx:DataGrid>
   <s:Label x="10" y="10" text="Mis Calendarios" fontSize="30" color="#E0E726" fontFamily="segoeui"/>
   

</s:WindowedApplication>

Por dual3nigma

6 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 12 Feb 2011 02:37 am
Hola dual3nigma:

Muchisimas gracias por el codigo, habla por si solo. Me encanto como implementaste la callback, te felicito.

Solo tengo una simple duda, donde puedo obtener el codigo del servicio?

Una cosa mas, no me gusta quedarme solo con la respuesta, me gustaria saber como aprendiste a manejar tan bien la autenticacion d google, he leido mucho sobre eso, pero su documentacion esta algo desorganizada y a veces parece ser un infierno! :P

De nuevo muchas gracias.

Saludos.

Por JOlmos

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Feb 2011 03:31 am
Que bueno que te sirviera!

Mira aqui vienen los códigos de todos los servicios de google http://code.google.com/apis/gdata/faq.html#clientlogin, pero de una vez te comento que el de blogger es blogger - - ' jaja, ese link trae mucha info util.

Si la verdad que la documentacion está bastante desorganizada, y cambia constantemente, la verdad se trata mas de entender bien HTTP y los metodos de autentificacion en general, por que como te habras dado cuenta hay varios, OAuth, AuthSub, ClientLogin que se pueden utilizar con las API's de Google. Lo bueno es que son metodos estandar al igual que HTTP, solo es cuestion de aprender las particularidades de cada servicio, por que asi como te lo puse no es la unica manera de hacerlo, yo por diversion cuando trabajo con servicios RESTful me gusta mas usar sockets, tu sabes poner los headers asi
"GET / HTTP/1.1" .. bla bla, por que siento que resulta mas claro, te recomiendo que tu trates de hacerlo por que asi te quedara mas claro y se te hara mucho pero mucho mas facil manejar otras API's como la de facebook, twitter, aws, etc. y bueno por otro lado tambien es entender bien xml, ah! y te paso un tip para cuando te estes adentrando mas en lo de crear entradas en blogger, etc. te recomiendo siempre incluir en el query "prettyprint=true"
, en el ejemplo lo pondrias asi:

Código ActionScript :

gdataService.send('prettyprint=true'); 

eso lo que hace es que la respuesta del xml te la devuelva asi bien formateadita para que sea muy facil de leer, si no te la devuelve sin espacios ni saltos de linea, y asi en un textarea que la pongas la copias, o la guardas directamente a un archivo y ya sabes bien de que va el xml, aunque eso si viene en la referencia muy claro.... puff creo que ya me excedi, jajaja pero es que una de las cosas con las que me gusta mas trabajar es con web services RESTful, en fin pues si necesitas mas ayuda solo dime, vale?

Saludos!

Por dual3nigma

6 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 12 Feb 2011 07:48 pm
Muchas gracias por los consejos, estoy interesado en tratar de hacer una autenticacion hibrida, con oauth y openid, haber q tal me va.

Saludos!

Por JOlmos

11 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.