Backup em nuvem com DropBox via API

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
Wanderlei
Usuário Nível 3
Usuário Nível 3
Mensagens: 196
Registrado em: 25 Jan 2008 13:19
Localização: Goiânia - GO

Backup em nuvem com DropBox via API

Mensagem por Wanderlei »

Olá pessoal,
Alguém já fez o envio de arquivos para o DropBox usando a API?

tipo assim:

oHttp := CreateObject("MSXML2.ServerXMLHTTP.6.0")
oHttp:Open("POST", "https://content.dropboxapi.com/2/files/upload", .f.)
oHttp:setRequestHeader("Authorization","Bearer " + alltrim(Taux_Token) )
oHttp:setRequestHeader("Content-Type", "application/octet-stream")
oHttp:setRequestHeader("Dropbox-API-Arg", '{"path":"/codechain/extrato.pdf","mode":"add","autorename":true,"mute":false}' )
oHttp:Send(Arquivo)
Wanderlei Cardoso
Analista / Programador
XHarbour + GtWvW + FiveWin + HwGui + Firebird
Skype: cwanderlei
cwanderlei@yahoo.com.br
(62)98171-3059 - whatsapp

Imagem
LoftSide16
Usuário Nível 1
Usuário Nível 1
Mensagens: 2
Registrado em: 27 Abr 2024 14:54
Localização: Sao Paulo/ SP

Backup em nuvem com DropBox via API

Mensagem por LoftSide16 »

Sim, é possível enviar arquivos para o Dropbox usando a API. O código que você compartilhou parece estar no formato do xBase++, mas a lógica básica de envio é semelhante em várias linguagens. Certifique-se de que você tenha uma chave de API válida e que esteja autorizada para acessar o Dropbox. Além disso, verifique se o arquivo que você está enviando está sendo passado corretamente para a API. Se estiver tudo configurado corretamente, o arquivo deve ser enviado para o Dropbox com sucesso.
ivanil
Usuário Nível 3
Usuário Nível 3
Mensagens: 166
Registrado em: 11 Set 2004 15:13
Localização: Florianópolis/SC

Backup em nuvem com DropBox via API

Mensagem por ivanil »

Queria que as coisas fossem tão fáceis como essas respostas de IA colocam no grupo... palavras bem colocadas, mas que não levam a lugar algum..
LoftSide16 escreveu:Sim, é possível enviar arquivos para o Dropbox usando a API. O código que você compartilhou parece estar no formato do xBase++, mas a lógica básica de envio é semelhante em várias linguagens. Certifique-se de que você tenha uma chave de API válida e que esteja autorizada para acessar o Dropbox. Além disso, verifique se o arquivo que você está enviando está sendo passado corretamente para a API. Se estiver tudo configurado corretamente, o arquivo deve ser enviado para o Dropbox com sucesso.
Não poderei ajudar porque não sou usuário da plataforma; mas acredito que a melhor forma de lidar com isso é usando a sincronização do próprio equipamento.

Mas se quiser trilhar este outro caminho, veja a fonte oficial https://www.dropbox.com/developers/documentation;

Boa sorte;

Ivanil
Avatar do usuário
Wanderlei
Usuário Nível 3
Usuário Nível 3
Mensagens: 196
Registrado em: 25 Jan 2008 13:19
Localização: Goiânia - GO

Backup em nuvem com DropBox via API

Mensagem por Wanderlei »

Pessoal eu tenho a chave de acesso e consigo fazer o download o que não consigo é fazer o upload porque não sei como enviar o arquivo, já tentei varias maneiras de enviar e todas sem sucesso, eu só preciso saber como colocar os dados do arquivo no corpo da mensagem, já tentei usando o memoread para ler o conteúdo, já tentei mandar como base64.
todos estes testes foi utilizando o xHarbour
Wanderlei Cardoso
Analista / Programador
XHarbour + GtWvW + FiveWin + HwGui + Firebird
Skype: cwanderlei
cwanderlei@yahoo.com.br
(62)98171-3059 - whatsapp

Imagem
Avatar do usuário
Wanderlei
Usuário Nível 3
Usuário Nível 3
Mensagens: 196
Registrado em: 25 Jan 2008 13:19
Localização: Goiânia - GO

Backup em nuvem com DropBox via API

Mensagem por Wanderlei »

outro detalhe, consigo enviar arquivo texto fazendo a leitura do texto e enviando e o arquivo é criado no DropBox, só não consigo é enviar PDF e arquivo Zipado
Wanderlei Cardoso
Analista / Programador
XHarbour + GtWvW + FiveWin + HwGui + Firebird
Skype: cwanderlei
cwanderlei@yahoo.com.br
(62)98171-3059 - whatsapp

Imagem
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Backup em nuvem com DropBox via API

Mensagem por JoséQuintas »

Wanderlei escreveu:oHttp:setRequestHeader("Dropbox-API-Arg", '{"path":"/codechain/extrato.pdf","mode":"add","autorename":true,"mute":false}' )
O que estou vendo nessa linha é um nome do arquivo talvez remoto e não local.
Se fosse local seria o path completo, e não relativo.
A resposta deve estar na documentação da API.

Wanderlei escreveu:outro detalhe, consigo enviar arquivo texto fazendo a leitura do texto e enviando e o arquivo é criado no DropBox, só não consigo é enviar PDF e arquivo Zipado
Se for assim, é pesquisar como fazer o mesmo com conteúdo binário, talvez o json do harbour faça isso.

Ou talvez olhando a classe hbtip, pra ver como ela indica o formato e como converte.
Não sei se o formato gzip é traduzido automático pelo webservice, mas é usado em NFE.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Wanderlei
Usuário Nível 3
Usuário Nível 3
Mensagens: 196
Registrado em: 25 Jan 2008 13:19
Localização: Goiânia - GO

Backup em nuvem com DropBox via API

Mensagem por Wanderlei »

descobri que o formato é esse:
Anexos
binary.JPG
Wanderlei Cardoso
Analista / Programador
XHarbour + GtWvW + FiveWin + HwGui + Firebird
Skype: cwanderlei
cwanderlei@yahoo.com.br
(62)98171-3059 - whatsapp

Imagem
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Backup em nuvem com DropBox via API

Mensagem por JoséQuintas »

formato pra comunicação, e não formato do arquivo local.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Wanderlei
Usuário Nível 3
Usuário Nível 3
Mensagens: 196
Registrado em: 25 Jan 2008 13:19
Localização: Goiânia - GO

Backup em nuvem com DropBox via API

Mensagem por Wanderlei »

Pessoal caso alguém queira fazer o backup no dropBox, eu consegui fazendo assim com estas funções abaixo:

Código: Selecionar todos

********************************************************************************    
FUNCTION DropBox_UpLoad( cFile )
********************************************************************************
LOCAL cUrl := "https://content.dropboxapi.com/2/files/upload"
LOCAL cBuffer, nBytes, aBlocks, cFilePath := ''
LOCAL cPath, cFileName, cExtension, cAno := '', cMes := ''

if !InternetOK()  //Verifica se tem internet
   MsgInfo('Sem conexão com a internet','Atenção')
	Return .T.
endif

if empty(Dropbox_AccessToken)
   Return .T.
endif

if !File(cFile)    
   Return .F.
endif

Atualiza_MsgProc('Aguarde, processando o upload')

cAno := strzero(year(Date()),4)
cMes := strzero(Month(Date()),2)

DropBox_Creat_Folder( cAno )               //Cria uma pasta dentro do DropBox
DropBox_Creat_Folder( cAno + '/' + cMes )  //Cria uma sub-pasta dentro do DropBox

HB_FNameSplit( cFile, @cPath, @cFileName, @cExtension )  //Pega o nome do arquivo e a extensão

cFilePath  := cAno + '/' + cMes + '/' + cFileName + cExtension + '.base64'  //Cria um nome para o arquivo zipado
nTamanhoBk := FileSize(cFile)      //Retorna o tamanho do arquivo que irá subir
aRetorno   := DropBox_Get_SPace()  //Retorna o espaço no DropBox

if nTamanhoBk > aRetorno[3] //Compara o tamanho do Arquivo com o espaço liberado no DropBox
   
	AbrePadrao('https://www.dropbox.com')  //Abre o site do DropBox com o navegador padrão
	
	MsgInfo("Espaço insuficiente no Dropbox"+LF+;
	        "Por favor, apague alguns arquivos para liberar espaço.","Atenção")
   
	aRetorno := DropBox_Get_SPace()  //Retorna o espaço no DropBox
	
	if nTamanhoBk > aRetorno[3] //Verifica novamente se o espaço liberado é suficiente
      Msginfo('upload do arquivo falhou,espaço insuficiente.','Atenção')
		Return .f.
	endif
	
endif

TRY
	oServer:=CreateObject( "MSXML2.ServerXMLHTTP" )
	oServer:open("POST", cUrl, .F.)                        
	oServer:setRequestHeader("Authorization" , "Bearer " + Dropbox_AccessToken )
	oServer:setRequestHeader("User-Agent" , 'api-explorer-client' )
	oServer:setRequestHeader("Content-Type" , 'application/octet-stream' )
	oServer:setRequestHeader("Dropbox-API-Arg" , '{"path":"/'+cFilePath+'","mode":{".tag":"add"},"autorename":true,"mute":true,"strict_conflict":true}' )

CATCH                                                                  
   MsgInfo("Houve falha na internet!!",'Atenção')
   MsgProcFim()
   Return .t.
END

//Daqui para baixo faz a leitura do arquivo que será zipado com Base64
nFileHandle := FOpen( cFile )
nFileSize := 0

IF FError() <> 0
   Return .F.
ENDIF

nFileSize := FSeek( nFileHandle, 0, FS_END )
cStream   := Space( nFileSize )

FSeek( nFileHandle, 0, FS_SET )
FRead( nFileHandle, @cStream, nFileSize )
FClose( nFileHandle )

oServer:send( HB_Base64Encode( cStream, len(cStream) ) )  //Envia o arquivo para o DropBox

if oServer:Status == 200  //Status de retorno, 200 OK
   Msginfo('Upload do arquivo enviado com sucesso.','Atenção')
else
	if oServer:Status == 401 .or. oServer:Status == 400
	   Msginfo('Token expirado, favor renovar o Token no site do DropBox','Atenção')
      cAccessToken := ""
	   if empty(Dropbox_AppKey)
		   AbrePadrao('https://www.dropbox.com/developers/apps/')  //Abre o navegador padrão para o usuario gerar o token de acesso 
		else
		   AbrePadrao('https://www.dropbox.com/developers/apps/info/'+alltrim(Dropbox_AppKey))
		endif   

      MsgGet("Informar Access Token","Access Token", "@x", "X", @cAccessToken )  //Informa aqui o token gerado no site para continuar

		if !empty(cAccessToken)
		   //Grava o token de acesso no banco de dados
			oSql:StartTransaction()
			oSql:EXECUTE( "update param_integra set dropbox_token='"+cAccessToken+" ' ")
			oSql:Commit()
			
			Dropbox_AccessToken := cAccessToken
			
			DropBox_UpLoad( cFile )  //Envia o arquivo para o DropBox
      
		endif       

	else
		cError := Http_Error_Descricao(oServer:Status)  //Pesquisa a descrição do status retornado
		Msginfo('Falha no envio do arquivo' + LF +;
		        'Código do retorno: ' + alltrim(str(oServer:Status)) + if(empty(cError),'',' - '+cError),'UpLoad')
   endif
	Return .F.
endif

RETURN .T.

********************************************************************************
Function DropBox_Download( cFile,cCaminho )
********************************************************************************
*cFile    = Nome do arquivo que será baixado do DropBox
*cCaminho = Pasta dentro o DropBox onde o arquivo foi gravado
********************************************************************************
Local cUrl := 'https://content.dropboxapi.com/2/files/download'
LOCAL cPath, cFileName, cExtension

if !InternetOK()  //Verifica sem tem internet
   MsgInfo('Sem conexão com a internet','Atenção')
	Return .T.
endif

if empty(Dropbox_AccessToken)
   Return .T.
endif

Atualiza_MsgProc('Aguarde, processando o Download')

HB_FNameSplit( cFile, @cPath, @cFileName, @cExtension )  //Pega o nome do arquivo e a extensão

cFilePath := cFileName + cExtension + '.base64'  //Nome do arquivo no DropBox que subiu zipado

if !empty(cCaminho)
   cCaminho := cCaminho+'/'
endif

TRY
	oServer:=CreateObject( "MSXML2.ServerXMLHTTP" )
	oServer:open("POST", cUrl, .F.)
	oServer:setRequestHeader("User-Agent" , "api-explorer-client" )
	oServer:setRequestHeader("Authorization" , "Bearer " + Dropbox_AccessToken )
	oServer:setRequestHeader("Dropbox-API-Arg" , '{"path":"/'+cCaminho+ cFilePath + '"}' )
	oServer:send()  //Envia a solicitação
CATCH                                                                  
   MsgInfo("Houve falha na internet!!",'Atenção')
   MsgProcFim()
   Return .t.
END

MemoWrit( cFile, HB_Base64Decode( oServer:ResponseText ), .F. )  //Grava o arquivo retornado na pasta
   
MsgProcFim()

if oServer:Status != 200  //Status de retorno do site
	if oServer:Status == 401
	   Msginfo('Token expirado, favor renovar o Token no site do DropBox','Atenção')
	   AbrePadrao('https://www.dropbox.com/developers/apps/')
	else
		cError := Http_Error_Descricao(oServer:Status)  //Pesquisa a descrição do status retornado
		Msginfo('Falha no download do arquivo' + LF +;
		        'Código do retorno: ' + alltrim(str(oServer:Status)) + if(empty(cError),'',' - '+cError),'Download')
	   Return .F.
   endif
elseif oServer:Status == 200
   Msginfo('Download do arquivo com sucesso.'  ,'Download')
endif

Enddialog()  //Fecha a janela 

Return .T.

********************************************************************************
Function DropBox_List_Folder( cPasta,oBrowse1  )  //Lista as pastas que existe no DropBox
********************************************************************************
Local cUrl := 'https://api.dropboxapi.com/2/files/list_folder', cRetorno := '',;
      cPath, cFileName, cExtension, aRetorno := {}, aDados := {}
Local cAccessToken := space(200)

Default cPasta := ''  //Pasta dentro do DropBox, caso for vazia ele listará a pasta principal

if !InternetOK()  //Verifica se tem internet
   MsgInfo('Sem conexão com a internet','Atenção')
	Return .T.
endif

if empty(Dropbox_AccessToken)
   Return .f.
endif

Atualiza_MsgProc('Aguarde, buscando a lista de arquivos')

cBody := '{ "path": "' + if(empty(cPasta),'','/'+cPasta) + '" }'

TRY
	oServer:=CreateObject( "MSXML2.ServerXMLHTTP" )
	oServer:open("POST", cUrl, .F.)
	oServer:setRequestHeader("User-Agent" , "api-explorer-client" )
	oServer:setRequestHeader("Authorization" , "Bearer " + Dropbox_AccessToken )
	oServer:setRequestHeader("Content-Type" , 'application/json' )
	oServer:send( cBody )
CATCH                                                                  
   MsgInfo("Houve falha na internet!!",'Atenção')
   MsgProcFim()
   Return .t.
END

MsgProcFim()

if oServer:Status == 200
   oBrowse1:aArray := {}
   oBrowse1:Refresh()

	hb_jsondecode(oServer:ResponseBody, @aRetorno)  //Cria json de retorno
	For X := 1 to len(aRetorno['entries'])          //Lista as pastas
		if right(aRetorno['entries'][X]['name'],7) == '.base64'  //Aqui lista os arquivos que foram enviado com Base64
			aadd(oBrowse1:aArray , {substr(aRetorno['entries'][X]['name'],1,at('.base64',aRetorno['entries'][X]['name'])-1),;
			              dtoc(stod(charrem('-',left(aRetorno['entries'][X]['client_modified'],10))))+substr(aRetorno['entries'][X]['client_modified'],11),;
							  aRetorno['entries'][X]['size'],cPasta})
	   else
			aadd(oBrowse1:aArray , {aRetorno['entries'][X]['name'],;  //Aqui lista as pastas
			              '',;
							  0,cPasta})
		endif
	Next
	
else

	if oServer:Status == 401
	   Msginfo('Token expirado, favor renovar o Token no site do DropBox','Atenção')
	   if empty(Dropbox_AppKey)
		   AbrePadrao('https://www.dropbox.com/developers/apps/')
		else
		   AbrePadrao('https://www.dropbox.com/developers/apps/info/'+alltrim(Dropbox_AppKey))
		endif   

      MsgGet("Informar Access Token","Access Token", "@x", "X", @cAccessToken )

		if !empty(cAccessToken)
			oSql:StartTransaction()
			oSql:EXECUTE( "update param_integra set dropbox_token='"+cAccessToken+" ' ")
			oSql:Commit()
			Dropbox_AccessToken := cAccessToken
      endif       
	else
		cError := Http_Error_Descricao(oServer:Status)  //Pesquisa a descrição do status retornado
      if oServer:Status == 409
			Msginfo('Falha ao listar a pasta'  + LF +;
			        'Nenhum arquivo encontrado'+ LF +;
					  'Código do retorno: ' + alltrim(str(oServer:Status)) + if(empty(cError),'',' - '+cError),'List Folder')
	   else
			Msginfo('Falha ao listar a pasta' + LF +;
			        'Código do retorno: ' + alltrim(str(oServer:Status)) + if(empty(cError),'',' - '+cError),'List Folder')
		endif

   endif

	Return .f.
endif

Return .t.

********************************************************************************
Function Seleciona_Arquivo()
********************************************************************************
LOCAL oDlg, oShape[2], oLbTitulo, oLbRodape, oButtonex[3], oBrowse1, cRetorno := ''
LOCAL oCombo[2],vCombo[2],oLabel[2],aDados := {} ,aAno := {},aMes := {}

for x:= 2023 to YEAR(Date())
   aadd(aAno,alltrim(str(x)))
next
AADD(aMes, 'Janeiro'  )
AADD(aMes, 'Fevereiro')
AADD(aMes, 'Março'    )
AADD(aMes, 'Abril'    )
AADD(aMes, 'Maio'     )
AADD(aMes, 'Junho'    )
AADD(aMes, 'Julho'    )
AADD(aMes, 'Agosto'   )
AADD(aMes, 'Setembro' )
AADD(aMes, 'Outubro'  )
AADD(aMes, 'Novembro' )
AADD(aMes, 'Dezembro' )

vCombo[1] := ascan(aAno,alltrim(str( YEAR(Date() ))))
vCombo[2] := Month( Date() )

INIT DIALOG oDlg TITLE "" ICON oIcon AT 0, 0 SIZE 819,526 CLIPPER  NOEXIT  ;
   STYLE WS_POPUP+WS_CAPTION+WS_SYSMENU+DS_CENTER 

   @ -3,-3 SHAPE oShape[1] SIZE 841,75 ;
        BACKCOLOR nCorFundo ; 
        CURVATURE 0 BORDERSTYLE 0 FILLSTYLE 10
	
	@ 5,10 SAY oLbTitulo CAPTION "Lista dos Arquivos" /*+ if(empty(cPasta),'',' da pasta ' + cPasta) */ SIZE 707,53 ;
        STYLE DT_VCENTER+DT_SINGLELINE;
        COLOR nCorLetra BACKCOLOR nCorFundo  ;
        FONT HFont():Add( 'Arial',0,-35,400,,,)

   @ 22,81 SAY oLabel[1] CAPTION "Ano"  SIZE 29,22  
   @ 52,80 GET COMBOBOX oCombo[1] VAR vCombo[1] ;
        ITEMS aAno  ;
        SIZE 110,24  

   @ 173,81 SAY oLabel[2] CAPTION "Mês"  SIZE 31,21  
   @ 205,79 GET COMBOBOX oCombo[2] VAR vCombo[2] ;
        ITEMS aMes ;
        SIZE 110,24  

   @ 324,74 BUTTONEX oButtonex[3] CAPTION "Pesquisar"   SIZE 89,32 ;
        STYLE BS_CENTER +WS_TABSTOP  ;
        ON CLICK {|| DropBox_List_Folder(aAno[vCombo[1]]+'/'+strzero(vCombo[2],2) ,@oBrowse1 ),oBrowse1:Refresh() }

   @ 6,120 BROWSE oBrowse1 ARRAY SIZE 806,266 STYLE WS_TABSTOP      

		oBrowse1:aArray    := aDados
		oBrowse1:bColorSel := nCorFundo
		oBrowse1:AddColumn( HColumn():New('Arquivo', ColumnArBlock() ,'C',50, 0 ,.F.,1,0,'@!',,,,,,,,,))
		oBrowse1:AddColumn( HColumn():New('Data'   , ColumnArBlock() ,'C',20, 0 ,.F.,1,1,'@!',,,,,,,,,))
		oBrowse1:AddColumn( HColumn():New('Tamanho', ColumnArBlock() ,'N',10, 0 ,.F.,1,1,'9999999999',,,,,,,,,))

   @ -3,455 SHAPE oShape[2] SIZE 841,75 ;
        BACKCOLOR nCorFundo ; 
        CURVATURE 0 BORDERSTYLE 0 FILLSTYLE 10
   
   @ 5,466 SAY oLbRodape CAPTION "Selecione um arquivo"  SIZE 583,53 ;
        STYLE DT_VCENTER+DT_SINGLELINE;
         COLOR nCorLetra  BACKCOLOR nCorFundo  ;
        FONT HFont():Add( 'Arial',0,-24,400,,,)

   @ 605,473 BUTTONEX oButtonex[1] CAPTION "&Seleciona"   SIZE 98,32 ;
        STYLE BS_CENTER +WS_TABSTOP  ;
        ON CLICK {|| if(len(oBrowse1:aArray) <= 0,.t. , DropBox_Download(alltrim(oBrowse1:aArray[oBrowse1:nCurrent][1]),oBrowse1:aArray[oBrowse1:nCurrent][4])) }

   @ 708,473 BUTTONEX oButtonex[2] CAPTION "C&ancela"   SIZE 98,32 ;
        STYLE BS_CENTER +WS_TABSTOP  ;
        ON CLICK {|| Enddialog() }

ACTIVATE DIALOG oDlg 

Return cRetorno

********************************************************************************
Function DropBox_Creat_Folder( cPasta )  //Cria pastas no DropBox
********************************************************************************
Local cUrl := 'https://api.dropboxapi.com/2/files/create_folder_v2'

if !InternetOK()
   MsgInfo('Sem conexão com a internet','Atenção')
	Return .T.
endif

if empty( Dropbox_AccessToken ) .or.;
   empty( cPasta )
   Return .T.
endif

Atualiza_MsgProc('Aguarde, Criando a pasta no DropBox')

cPath := '{ "path": "/' + alltrim(cPasta) + '" }'

TRY
	oServer:=CreateObject( "MSXML2.ServerXMLHTTP" )
	oServer:open("POST", cUrl, .F.)
	oServer:setRequestHeader("User-Agent" , "Datarey" )
	oServer:setRequestHeader("Authorization" , "Bearer " + Dropbox_AccessToken )
	oServer:setRequestHeader("Content-Type" , 'application/json' )
	oServer:send(cPath)
CATCH                                                                  
   MsgInfo("Houve falha na internet!!",'Atenção')
   MsgProcFim()
   Return .t.
END

MsgProcFim()

if oServer:Status == 200
   //Msginfo('Pasta criada com sucesso','Atenção')
else   
	//cError := Http_Error_Descricao(oServer:Status)  //Pesquisa a descrição do status retornado
   //Msginfo('Falha na consulta' + LF +;
	//        'Código do retorno: ' + alltrim(str(oServer:Status)) + if(empty(cError),'',' - '+cError),'Atenção')
	//Return .F.
endif

Return .T.

********************************************************************************
Function DropBox_Get_SPace()  //Retorna a Capacidade de armazenamento e espaço ocupado
********************************************************************************
Local cUrl := 'https://api.dropboxapi.com/2/users/get_space_usage',;
      aRetorno[3]

aRetorno[1] := 0 //Capacidade total de armazenamento
aRetorno[2] := 0 //Espaço já utilizado
aRetorno[3] := 0 //Espaço ainda Disponivel

if !InternetOK()
   MsgInfo('Sem conexão com a internet','Atenção')
	Return aRetorno
endif

if empty( Dropbox_AccessToken )  
   Return aRetorno
endif

Atualiza_MsgProc('Aguarde, Consultando a capacidade no DropBox')

TRY
	oServer:=CreateObject( "MSXML2.ServerXMLHTTP" )
	oServer:open("POST", cUrl, .F.)
	oServer:setRequestHeader("User-Agent" , "Datarey" )
	oServer:setRequestHeader("Authorization" , "Bearer " + Dropbox_AccessToken )
	oServer:setRequestHeader("Content-Type" , 'application/json' )
	oServer:send('null')
CATCH                                                                  
   MsgInfo("Houve falha na internet!!",'Atenção')
   MsgProcFim()
   Return aRetorno
END

MsgProcFim()

if oServer:Status == 200
	aRetorno_cons := {}
	hb_jsondecode(oServer:ResponseBody, @aRetorno_cons)
	aRetorno[1] := aRetorno_cons['allocation']['allocated']
	aRetorno[2] := aRetorno_cons['used']
	aRetorno[3] := aRetorno[1] - aRetorno[2]
else   
	if oServer:Status == 401
	   Msginfo('Token expirado, favor renovar o Token no site do DropBox','Atenção')

      cAccessToken := ""
	   if empty(Dropbox_AppKey)
		   AbrePadrao('https://www.dropbox.com/developers/apps/')
		else
		   AbrePadrao('https://www.dropbox.com/developers/apps/info/'+alltrim(Dropbox_AppKey))
		endif   

      MsgGet("Informar Access Token","Access Token", "@x", "X", @cAccessToken )

		if !empty(cAccessToken)
			oSql:StartTransaction()
			oSql:EXECUTE( "update param_integra set dropbox_token='"+cAccessToken+" ' ")
			oSql:Commit()
			Dropbox_AccessToken := cAccessToken
      endif       

	else
		cError := Http_Error_Descricao(oServer:Status)  //Pesquisa a descrição do status retornado
	   Msginfo('Falha na consulta da capacidade' + LF +;
		        'Código do retorno: ' + alltrim(str(oServer:Status)) + if(empty(cError),'',' - '+cError),'Get_Space')
   endif
	Return aRetorno
endif

Return aRetorno

********************************************************************************
Function DropBox_Get_Current_Account()  //Lista os dados da conta logada
********************************************************************************
Local cUrl := 'https://api.dropboxapi.com/2/users/get_current_account',;
      cNome := '', cEmail := ''

if !InternetOK()
   MsgInfo('Sem conexão com a internet','Atenção')
	Return .T.
endif

if empty( Dropbox_AccessToken )
   Return .T.
endif

Atualiza_MsgProc('Aguarde, Consultando a capacidade no DropBox')

TRY
	oServer:=CreateObject( "MSXML2.ServerXMLHTTP" )
	oServer:open("POST", cUrl, .F.)
	oServer:setRequestHeader("User-Agent" , "Datarey" )
	oServer:setRequestHeader("Authorization" , "Bearer " + Dropbox_AccessToken )
	oServer:setRequestHeader("Content-Type" , 'application/json' )
	oServer:send('null')
CATCH                                                                  
   MsgInfo("Houve falha na internet!!",'Atenção')
	MsgProcFim()
   Return .t.
END

MsgProcFim()

if oServer:Status == 200
	aRetorno_cons := {}
	hb_jsondecode(oServer:ResponseBody, @aRetorno_cons)
	cName  := aRetorno_cons['name']['display_name']
	cEmail := aRetorno_cons['email']
	Msginfo('Nome: ' + cName + LF +;
	        'E-mail: ' + cEmail,'Atenção')
else   
	if oServer:Status == 401
	   Msginfo('Token expirado, favor renovar o Token no site do DropBox','Atenção')
	   AbrePadrao('https://www.dropbox.com/developers/apps/')
	else
		cError := Http_Error_Descricao(oServer:Status)  //Pesquisa a descrição do status retornado
	   Msginfo('Falha na consulta do usuário logado' + LF +;
		        'Código do retorno: ' + alltrim(str(oServer:Status)) + if(empty(cError),'',' - '+cError),'Atenção')
	endif
	Return .F.
endif

Return .T.
Editado pela última vez por Itamar M. Lins Jr. em 21 Jun 2024 09:40, em um total de 1 vez.
Razão: Mensagem editada para colocar a tag [ code ]<br>Veja como utilizar esta tag: http://www.pctoledo.com.br/forum/faq.php?mode=bbcode#f2r1
Wanderlei Cardoso
Analista / Programador
XHarbour + GtWvW + FiveWin + HwGui + Firebird
Skype: cwanderlei
cwanderlei@yahoo.com.br
(62)98171-3059 - whatsapp

Imagem
Avatar do usuário
Wanderlei
Usuário Nível 3
Usuário Nível 3
Mensagens: 196
Registrado em: 25 Jan 2008 13:19
Localização: Goiânia - GO

Backup em nuvem com DropBox via API

Mensagem por Wanderlei »

Funciona o Upload e download, o único detalhe é que o usuário tem que gerar o token dentro do DropBox porque ele vence e ainda não consegui gerar por dentro do sistema.
Wanderlei Cardoso
Analista / Programador
XHarbour + GtWvW + FiveWin + HwGui + Firebird
Skype: cwanderlei
cwanderlei@yahoo.com.br
(62)98171-3059 - whatsapp

Imagem
Responder