Usuário com melhor resposta
RETORNO XML

Pergunta
-
Olá,
Para compor melhoR minha dúvida apresento duas procedures, são elas:
Create Procedure [dbo].[Sp_Directions_1]
as
DECLARE @Response VARCHAR(8000)
DECLARE @XML XML
DECLARE @Obj INT
DECLARE @Result INT
DECLARE @HTTPStatus INT
DECLARE @ErrorMsg VARCHAR(MAX)
DECLARE @URL VARCHAR(MAX)
DECLARE @DISTANCIA VARCHAR(35)
DECLARE @TEMPOVIAGEM VARCHAR(35)
-- Endereco para teste
-- Test address
SELECT @URL = 'http://maps.google.com/maps/api/geocode/xml?sensor=false&address=avenida paulista, 500, sao paulo sp'-- Criacao do objeto XMLHttp
-- Object XMLHttp creation
EXEC @Result = sp_OACreate 'MSXML2.ServerXMLHttp', @Obj OUT-- Envio do comando GET
-- GET command
BEGIN TRY
EXEC @Result = sp_OAMethod @Obj, 'open', NULL, 'GET', @URL, false
EXEC @Result = sp_OAMethod @Obj, 'setRequestHeader', NULL,
'Content-Type', 'application/x-www-form-urlencoded'
EXEC @Result = sp_OAMethod @Obj, send, NULL, ''
EXEC @Result = sp_OAGetProperty @Obj, 'status', @HTTPStatus OUT
EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml', @Response OUT
END TRY
BEGIN CATCH
-- Controle de Erro com bloco Try/Catch
-- Error Control
SELECT @ErrorMsg = ERROR_MESSAGE()
END CATCH-- Destruicao do objeto
-- Object free
EXEC @Result = sp_OADestroy @Obj-- Transformacao do resultado em XML
-- Convert result in XML Datatype
SELECT @XML = CAST(@Response AS XML)--Select @Distancia = reverse(substring(reverse(@XML),charindex('mk',reverse(@XML),1),
--(select abs(charindex('mk',reverse(@XML),1) -
--charindex('>txet<',reverse(@XML),1)))))
--
--Set @TEMPOVIAGEM = (Select substring(Tempo,charindex('<text>',Tempo,1)+6,
--charindex('</text>',Tempo,1)- charindex('<text>',Tempo,1)-6
--) as Tempo from
--(
--select reverse(substring(reverse(@XML),charindex('>noitarud/<',reverse(@XML),1),
--(select abs(charindex('>noitarud/<',reverse(@XML),1) -
--charindex('>noitarud<',reverse(@XML),1)))
--))as Tempo) as Tempo)SEGUNDA PROCEDURE
Create Procedure [dbo].[Sp_Directions_2]
as
DECLARE @Response VARCHAR(8000)
DECLARE @XML XML
DECLARE @Obj INT
DECLARE @Result INT
DECLARE @HTTPStatus INT
DECLARE @ErrorMsg VARCHAR(MAX)
DECLARE @URL VARCHAR(MAX)
DECLARE @DISTANCIA VARCHAR(35)
DECLARE @TEMPOVIAGEM VARCHAR(35)
-- Endereco para teste
-- Test address
SELECT @URL = 'http://maps.google.com/maps/api/directions/xml?origin=rua um sp&destination=rua dois sp&sensor=false'-- Criacao do objeto XMLHttp
-- Object XMLHttp creation
EXEC @Result = sp_OACreate 'MSXML2.ServerXMLHttp', @Obj OUT-- Envio do comando GET
-- GET command
BEGIN TRY
EXEC @Result = sp_OAMethod @Obj, 'open', NULL, 'GET', @URL, false
EXEC @Result = sp_OAMethod @Obj, 'setRequestHeader', NULL,
'Content-Type', 'application/x-www-form-urlencoded'
EXEC @Result = sp_OAMethod @Obj, send, NULL, ''
EXEC @Result = sp_OAGetProperty @Obj, 'status', @HTTPStatus OUT
EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml', @Response OUT
END TRY
BEGIN CATCH
-- Controle de Erro com bloco Try/Catch
-- Error Control
SELECT @ErrorMsg = ERROR_MESSAGE()
END CATCH-- Destruicao do objeto
-- Object free
EXEC @Result = sp_OADestroy @Obj-- Transformacao do resultado em XML
-- Convert result in XML Datatype
SELECT @XML = CAST(@Response AS XML)--Select @Distancia = reverse(substring(reverse(@XML),charindex('mk',reverse(@XML),1),
--(select abs(charindex('mk',reverse(@XML),1) -
--charindex('>txet<',reverse(@XML),1)))))
--
--Set @TEMPOVIAGEM = (Select substring(Tempo,charindex('<text>',Tempo,1)+6,
--charindex('</text>',Tempo,1)- charindex('<text>',Tempo,1)-6
--) as Tempo from
--(
--select reverse(substring(reverse(@XML),charindex('>noitarud/<',reverse(@XML),1),
--(select abs(charindex('>noitarud/<',reverse(@XML),1) -
--charindex('>noitarud<',reverse(@XML),1)))
--))as Tempo) as Tempo)-- Exibicao dos resultados
-- Results--begin
--Update Roteirizacao
--Set
--Distancia = @DISTANCIA,
--TEMPOVIAGEM = @TEMPOVIAGEM
--
--end--Print @origem
--Print @destinoselect @XML
Print @URL
Print @HTTPStatus
print @Obj
print @ErrorMsg
print @responseAGORA VEM A DÚVIDA, A PRIMEIRA ME RETORNA OS DADOS EM XML, NO ENTANDO A SEGUNDA ONDE A URL ESTÁ NO MESMO CÓDIGO, NÃO RETORNA.
PORQUE?SENDO QUE SE EU COLOCAR A URL DA SEGUNDA NO BROWSER O XML É RETORNADO.
OBS: A OPÇÃO OLE AUTOMATION PROCEDURES DO SP_CONFIGURE ESTÁ HABILIDATA.
GRATO,
MAURÍCIO
Respostas
-
Maurício,
Você já observou que existe uma diferença na declare das URL:
Procedure 1:
SELECT @URL = 'http://maps.google.com/maps/api/geocode/xml?sensor=false&address=avenida paulista, 500, sao paulo sp'
Procedure 2:
SELECT @URL = 'http://maps.google.com/maps/api/directions/xml?origin=rua um sp&destination=rua dois sp&sensor=false'
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]- Marcado como Resposta maumauboy segunda-feira, 6 de junho de 2011 16:48
Todas as Respostas
-
Maurício,
Você já observou que existe uma diferença na declare das URL:
Procedure 1:
SELECT @URL = 'http://maps.google.com/maps/api/geocode/xml?sensor=false&address=avenida paulista, 500, sao paulo sp'
Procedure 2:
SELECT @URL = 'http://maps.google.com/maps/api/directions/xml?origin=rua um sp&destination=rua dois sp&sensor=false'
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]- Marcado como Resposta maumauboy segunda-feira, 6 de junho de 2011 16:48
-
Sim são diferentes, uma é para geocodificação e a outra mostra o trajeto de um ponto a outro, se eu colocar no internet explorer as duas retornam o XML, mas se eu colocar a segunda URL pela procedure ela não retorna nada.
O que será que está acontecendo? -