API Google. Ejemplos
API Google. Ejemplos
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 _.
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/de ... ivate/full"
strFormData = cEventCode
cResponse:=SendPostToUrl( strURL, strFormData,"application/atom+xml","GoogleLogin auth=" + AuthCode)
// Recivir _
strURL:="https://www.google.com/calendar/feeds/d ... ndars/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
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 _.
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/de ... ivate/full"
strFormData = cEventCode
cResponse:=SendPostToUrl( strURL, strFormData,"application/atom+xml","GoogleLogin auth=" + AuthCode)
// Recivir _
strURL:="https://www.google.com/calendar/feeds/d ... ndars/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
Re: API Google. Ejemplos
Very good
- Antonio Linares
- Site Admin
- Posts: 37481
- Joined: Thu Oct 06, 2005 5:47 pm
- Location: Spain
- Contact:
Re: API Google. Ejemplos
Gracias por compartirlo!
Re: API Google. Ejemplos
Para eso estamos, para Compartir.
Un Saludo.
Un Saludo.
Re: API Google. Ejemplos
Muchas gracias por compartirlo.
Estas aportaciones "web" dan mucha "vidilla" a nuestros aplicativos desktop.
Estas aportaciones "web" dan mucha "vidilla" a nuestros aplicativos desktop.
Re: API Google. Ejemplos
Ahora estoy con la API de contactos, cuando tenga algo lo comparto.
Un Saludo.
Un Saludo.
Re: API Google. Ejemplos
Hello,
Please, could anyone put a translation of this topic in English in the English forum?
Thank you very much in advance.
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. 21.01 - Harbour 3.2.0 (October 2020) - xHarbour Builder (January 2020) - Bcc7
Michel D.
Genk (Belgium)
_____________________________________________________________________________________________
I use : FiveWin for (x)Harbour v. 21.01 - Harbour 3.2.0 (October 2020) - xHarbour Builder (January 2020) - Bcc7
- Silvio.Falconi
- Posts: 4956
- Joined: Thu Oct 18, 2012 7:17 pm
Re: API Google. Ejemplos
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 )
===========
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 )
I use : FiveWin for Harbour August 2020 (Revision) - Harbour 3.2.0dev (r1712141320) - Bcc7.30 - xMate ver. 1.15.3 - PellesC
Re: API Google. Ejemplos
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.
Postea tu código y lo miramos.
Un Saludo.
- armando.lagunas
- Posts: 340
- Joined: Mon Oct 05, 2009 3:35 pm
- Location: Curico-Chile
- Contact:
Re: API Google. Ejemplos
Code: Select all
Try
oOle := CreateObject( 'MSXML2.XMLHTTP' )
Catch
oOle := CreateObject( 'Microsoft.XMLHTTP' )
End
Re: API Google. Ejemplos
Como usar com proxy?
Email: SamirSSabreu@gmail.com
MSN: SamirAbreu@hotmail.com
Skype: SamirAbreu
xHarbour 1.1.0 + FwXh 8.02
xHarbour 1.2.1 + Fwhh 10.6
MSN: SamirAbreu@hotmail.com
Skype: SamirAbreu
xHarbour 1.1.0 + FwXh 8.02
xHarbour 1.2.1 + Fwhh 10.6
Re: API Google. Ejemplos
Silvio,
He encontrado este codigo desde https://groups.google.com/forum/?fromgr ... 4IETfJ6e0J
A ver si te puede servir.
Saludos
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, "<", "<" )
cXML := STRTRAN( cXML, ">", ">" )
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 )
Re: API Google. Ejemplos
Gracias Softru por compartir.
Funciona perfecto.
Saludos,
Adhemar
Funciona perfecto.
Saludos,
Adhemar
Saludos,
Adhemar C.
Adhemar C.
- Andrés González
- Posts: 625
- Joined: Thu Jan 19, 2006 10:45 am
- Location: Mallorca
Re: API Google. Ejemplos
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/viewt ... =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/ ... &ctx=topic Ahí tenemos la información de tareas.
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/ ... &ctx=topic Ahí tenemos la información de tareas.
Saludos
Andrés González desde Mallorca
Andrés González desde Mallorca