API Google. Ejemplos

API Google. Ejemplos

Postby softruz » Tue Jan 15, 2013 8:32 am

Muy buenas Compañeros,
abro este hilo para compartir todo lo que sepamos sobre la API de Google, en este caso comparto una pequeña parte de la API de Google Calendar, para poder leer y insertar eventos en nuestros calendarios.

Teneis que configurar las variables myEmail (email de gmail),myPassword (password del email)

Si teneis mas informacion



////////////////////////////////
// Codigo Fuente
////////////////////////////

#include "FiveWin.ch"

Function Main()
local strURL:= "https://www.google.com/accounts/ClientLogin",AuthCode:=""
local strFormData,myEmail:="",myPassword:="",mySource:="project-example-1",cRespone:=""
strFormData = "Email=" + myEmail + "&Passwd=" + myPassword + "&source=" + mySource + "&service=cl"
cResponse:=SendPostToUrl( strURL, strFormData )
AuthCode = Right(cResponse, Len(cResponse) - at("Auth=",cResponse) - 4)

cEventCode:=getEventCode(date(),"Test Event","Event Description","Your Name","Email","Cordoba")

// Añadir un nuevo evento
strURL = "http://www.google.com/calendar/feeds/default/private/full"
strFormData = cEventCode
cResponse:=SendPostToUrl( strURL, strFormData,"application/atom+xml","GoogleLogin auth=" + AuthCode)

// Recivir los calendarios
strURL:="https://www.google.com/calendar/feeds/default/allcalendars/full"
strFormData = cEventCode
cResponse:=SendPostToUrl( strURL, strFormData,"application/atom+xml","GoogleLogin auth=" + AuthCode)
msginfo(cResponse)
Return Nil

Function SendPostToUrl( cUrl, cParams,cContentType,cAuthorization )
Local oOle,cRet:='',uRet
default cContentType:="application/x-www-form-urlencoded"
default cAuthorization:=""
Try
oOle := CreateObject( 'MSXML2.XMLHTTP' )
Catch
oOle := CreateObject( 'Microsoft.XMLHTTP' )
End
oOle:Open( 'POST', cUrl, .f. )

oOle:SetRequestHeader( "Content-Type",cContentType)
if !empty(cAuthorization)
oOle:SetRequestHeader( "Authorization",cAuthorization)
end if

oOle:Send( cParams )
SysRefresh()

#ifdef __XHARBOUR__
cRet := oOle:ResponseBody
#else
AEval(oOle:ResponseBody,{|uRet|cRet+=Chr(uRet)})
#endif
Return cRet

function dtos_format(fecha)
local cadena
if valtype(fecha) = "D"
cadena:=dtos(fecha)
if !empty(cadena)
return substr(cadena,1,4) + "-" + substr(cadena,5,2) + "-" + substr(cadena,7,2)
else
return "0000-00-00"
end if
else
return "0000-00-00"
end if
return "0000-00-00"

static function getEventCode(dDate,cEventName,cEventDescription,cYourName,cEmailAddress,cLocation,cStartTime,cEndTime)
local formattedDate:=""
default cStartTime:="17:00:00",cEndTime:="18:00:00"

// 'change the date into Google's yyyy-mm-dd format
formattedDate = dtos_format(dDate)

getEventCode = "<entry xmlns='http://www.w3.org/2005/Atom'" + CRLF +;
"xmlns:gd='http://schemas.google.com/g/2005'>" + CRLF +;
" <category scheme='http://schemas.google.com/g/2005#kind'" + CRLF +;
"term='http://schemas.google.com/g/2005#event'></category>" + CRLF +;
" <title type='text'>" +cEventName+ "</title>" + CRLF +;
"<content type='text'>" +cEventDescription+ "</content>" + CRLF +;
"<author>" + CRLF +;
"<name>" +cYourName+ "</name>" + CRLF +;
"<email>" +cEmailAddress+ "</email>" + CRLF +;
"</author>" + CRLF +;
"<gd:transparency" + CRLF +;
"value='http://schemas.google.com/g/2005#event.opaque'>" + CRLF +;
"</gd:transparency>" + CRLF +;
"<gd:eventStatus" + CRLF +;
"value='http://schemas.google.com/g/2005#event.confirmed'>" + CRLF +;
"</gd:eventStatus>" + CRLF +;
"<gd:where valueString='" +cLocation+ "'></gd:where>" + CRLF +;
"<gd:when startTime='" + formattedDate + "T" + cStartTime+"'" + CRLF +;
"endTime='" + formattedDate + "T" + cEndTime+"'></gd:when>" + CRLF +;
"</entry>"
return getEventCode
softruz
 
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Re: API Google. Ejemplos

Postby anserkk » Tue Jan 15, 2013 11:30 am

Very good
User avatar
anserkk
 
Posts: 1332
Joined: Fri Jun 13, 2008 11:04 am
Location: Kochi, India

Re: API Google. Ejemplos

Postby Antonio Linares » Tue Jan 15, 2013 12:07 pm

Gracias por compartirlo! :-)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42099
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: API Google. Ejemplos

Postby softruz » Tue Jan 15, 2013 12:16 pm

Para eso estamos, para Compartir.

Un Saludo.
softruz
 
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Re: API Google. Ejemplos

Postby elvira » Tue Jan 15, 2013 12:24 pm

Gracias!!
elvira
 
Posts: 516
Joined: Fri Jun 29, 2012 12:49 pm

Re: API Google. Ejemplos

Postby hmpaquito » Tue Jan 15, 2013 12:31 pm

Muchas gracias por compartirlo.

Estas aportaciones "web" dan mucha "vidilla" a nuestros aplicativos desktop.
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: API Google. Ejemplos

Postby softruz » Tue Jan 15, 2013 12:42 pm

Ahora estoy con la API de contactos, cuando tenga algo lo comparto.

Un Saludo.
softruz
 
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Re: API Google. Ejemplos

Postby driessen » Tue Jan 15, 2013 12:59 pm

Hello,

Please, could anyone put a translation of this topic in English in the English forum?

Thank you very much in advance.
Regards,

Michel D.
Genk (Belgium)
_____________________________________________________________________________________________
I use : FiveWin for (x)Harbour v. 24.07 - Harbour 3.2.0 (February 2024) - xHarbour Builder (January 2020) - Bcc773
User avatar
driessen
 
Posts: 1422
Joined: Mon Oct 10, 2005 11:26 am
Location: Genk, Belgium

Re: API Google. Ejemplos

Postby Silvio.Falconi » Wed Jan 16, 2013 8:23 am

Application
===========
Path and name: C:\work\errori\google\test.Exe (32 bits)
Size: 1,781,248 bytes
Compiler version: xHarbour build 1.2.1 Intl. (SimpLex) (Rev. 6715)
FiveWin Version: FWHX 12.03
Windows version: 5.1, Build 2600 Service Pack 2

Time from start: 0 hours 0 mins 0 secs
Error occurred at: 01/16/13, 09:22:34
Error description: Error MSXML2.XMLHTTP/3 DISP_E_MEMBERNOTFOUND: SEND
Args:
[ 1] = C Email=silvio.falconi@gmail.com&Passwd=..............&source=project-example-1&service=cl

Stack Calls
===========
Called from: source\rtl\win32ole.prg => TOLEAUTO:SEND( 0 )
Called from: test.prg => SENDPOSTTOURL( 46 )
Called from: test.prg => MAIN( 13 )
Since from 1991/1992 ( fw for clipper Rel. 14.4 - Momos)
I use : FiveWin for Harbour November 2023 - January 2024 - Harbour 3.2.0dev (harbour_bcc770_32_20240309) - Bcc7.70 - xMate ver. 1.15.3 - PellesC - mail: silvio[dot]falconi[at]gmail[dot]com
User avatar
Silvio.Falconi
 
Posts: 7061
Joined: Thu Oct 18, 2012 7:17 pm

Re: API Google. Ejemplos

Postby softruz » Wed Jan 16, 2013 8:37 am

Silvio el mismo codigo con la FWH901 y FWH1204 me funciona perfectamente, con la FWH1203 no lo he probado pero supongo que debe funcionar.

Postea tu código y lo miramos.

Un Saludo.
softruz
 
Posts: 485
Joined: Fri Feb 09, 2007 10:34 am

Re: API Google. Ejemplos

Postby armando.lagunas » Wed Jan 16, 2013 11:29 am

Code: Select all  Expand view

Try
oOle := CreateObject( 'MSXML2.XMLHTTP' )
Catch
oOle := CreateObject( 'Microsoft.XMLHTTP' )
End
 


también me da error...
:(
SkyPe: armando.lagunas@hotmail.com
Mail: armando.lagunas@gmail.com
User avatar
armando.lagunas
 
Posts: 346
Joined: Mon Oct 05, 2009 3:35 pm
Location: Curico-Chile

Re: API Google. Ejemplos

Postby sambomb » Wed Jan 16, 2013 5:27 pm

Como usar com proxy?
Email: SamirSSabreu@gmail.com
xHarbour 1.2.3 + Fwhh 20.2
User avatar
sambomb
 
Posts: 388
Joined: Mon Oct 13, 2008 11:26 am
Location: Itaocara - RJ - Brasil

Re: API Google. Ejemplos

Postby hmpaquito » Wed Jan 16, 2013 6:13 pm

Silvio,

He encontrado este codigo desde https://groups.google.com/forum/?fromgr ... 4IETfJ6e0J

A ver si te puede servir.

But, we can use WebServices
I use for government and for my city
see a example for send a xml with many invoices
Load xml
cXML := memoread('nfse\11072432000124_I_20117-27_26072011.xml')
cXML := STRTRAN( cXML, '<?xml version="1.0" encoding="ISO-8859-1"?>', '' )
cXML := STRTRAN( cXML, "<", "&lt;" )
cXML := STRTRAN( cXML, ">", "&gt;" )
Load DOMDocument
xmldom = win_oleCREATEOBJECT("MSXML2.DOMDocument.5.0")
xmldom:async = .T.
xmldom:validateOnParse = .T.
xmldom:resolveExternals := .T.
xmldom:preserveWhiteSpace = .T.

Load XMLHTTP
xmldoc = win_oleCREATEOBJECT("MSXML2.XMLHTTP.6.0")
url := "http://189.1.164.238:8080/issonline/servlet/anfse"
Conect to WebService
xmldoc:open("POST", url, .F.)
xmldoc:setrequestheader("Content-Type","application/x-www-form-urlencoded")
xmldoc:setRequestHeader("SOAPAction", "nfseaction/ANFSE.Execute" )
Making XML for WebService
Texto := '<?xml version="1.0" encoding="ISO-8859-1"?>'
Texto += '<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"';
+ ' xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="nfse" xmlns:wsdlns="nfse" xmlns:tns1="ISS">'
Texto += '<SOAP-ENV:Body>'
Texto += '<wsdlns:Nfse.Execute xmlns:wsdlns="nfse">'
Texto += '<wsdlns:Operacao>1</wsdlns:Operacao>'
Texto += '<wsdlns:Usuario>21312</wsdlns:Usuario>' //
Texto += '<wsdlns:Senha>321321321321</wsdlns:Senha>'
Texto += '<wsdlns:Webxml>'+cXML+''
Texto += '</wsdlns:Webxml>'
Texto += '</wsdlns:Nfse.Execute>'
Texto += '</SOAP-ENV:Body>'
Texto += '</SOAP-ENV:Envelope>'

xmldom:LoadXML(Texto)
IF xmldom:parseError:errorCode = 0
//"XML Load"
ELSE
lcErrorMsg = "Não foi possível carregar o documento pois ele não corresponde ao seu Schema"
lcErrorMsg = lcErrorMsg + " Linha: " + STR(xmldom:parseError:line)
lcErrorMsg = lcErrorMsg + " Caractere na linha: " + STR(xmldom:parseError:linepos)
lcErrorMsg = lcErrorMsg + " Causa do erro: " + xmldom:parseError:reason;
+"code: "+STR(xmldom:parseError:errorCode)
msginfo(lcErrorMsg)
ENDIF
Send data to WebService
xmldoc:send(xmldom:xml)
Get Result
cResult := xmldoc:responseXML:xml

Best Regards,
Fernando Athayde
From Brazil



Saludos


Silvio.Falconi wrote:Application
===========
Path and name: C:\work\errori\google\test.Exe (32 bits)
Size: 1,781,248 bytes
Compiler version: xHarbour build 1.2.1 Intl. (SimpLex) (Rev. 6715)
FiveWin Version: FWHX 12.03
Windows version: 5.1, Build 2600 Service Pack 2

Time from start: 0 hours 0 mins 0 secs
Error occurred at: 01/16/13, 09:22:34
Error description: Error MSXML2.XMLHTTP/3 DISP_E_MEMBERNOTFOUND: SEND
Args:
[ 1] = C Email=silvio.falconi@gmail.com&Passwd=..............&source=project-example-1&service=cl



Stack Calls
===========
Called from: source\rtl\win32ole.prg => TOLEAUTO:SEND( 0 )
Called from: test.prg => SENDPOSTTOURL( 46 )
Called from: test.prg => MAIN( 13 )
hmpaquito
 
Posts: 1482
Joined: Thu Oct 30, 2008 2:37 pm

Re: API Google. Ejemplos

Postby acuellar » Thu Jan 17, 2013 1:13 pm

Gracias Softru por compartir.

Funciona perfecto.

Saludos,

Adhemar
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: API Google. Ejemplos

Postby Andrés González » Sun Jan 20, 2013 9:33 am

Softruz, no sé quien eres, pero te agradezco esta contribución, creo que este es el camino que debemos seguir y recuerdo un mensaje que puse en el 2010, referente a este tema: http://forums.fivetechsupport.com/viewtopic.php?f=6&t=18785&start=15#p98540.

Bien, este es un buen punto de partida y ya veo que mis palabras ya tenían sentido, quiero hacerte un par de consultas, a ver si puedes ilustrarme. El ejemplo me ha funcionado perfecto y ya lo tengo implementado para que funcione en mi calendario particular. Una cosa que no he resuelto es el tema del calendario y la contraseña de cada uno, si quiero que se haga de forma automática en cada uno. Te cuento las variantes que tengo a ver si me puedes decir como hacerlo.

He desarrollado un gestor de tareas corporativo con FW y tiro de una base de datos donde tengo los usuarios, supongo que ahí es el lugar indicado para que cada uno se identifique y guarde los datos encriptados de cada uno, a no ser que creas mejor una opción como cookies o algo parecido. Cuando he dado de alta tu ejemplo en mi calendario, me he dado cuenta que también contamos con un gestor de tareas con nuestro gmail. ¿Sabes cual es el método para dar de alta la tarea en este proceso? Supongo que has investigado mas que yo y igual podemos reciclar el ejemplo para dar las tareas en este nuevo calendario. Esto aparece en la parte izquierda de tu gmail y te añade el calendario de tareas pero no es una dirección de correo, tan solo pone lista de tareas cuando vas a Calendar. Tiene su propio gestor, pero me imagino que ahí también lo podemos referenciar para dar de alta tareas desde un programa FW.

PD.: http://support.google.com/calendar/bin/answer.py?hl=es&answer=106237&topic=1672528&ctx=topic Ahí tenemos la información de tareas.
Saludos

Andrés González desde Mallorca
User avatar
Andrés González
 
Posts: 628
Joined: Thu Jan 19, 2006 10:45 am
Location: Mallorca

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 34 guests