none
RETORNO XML RRS feed

  • 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 @destino

    select @XML

    Print @URL
    Print @HTTPStatus
    print @Obj
    print @ErrorMsg
    print @response

     

    AGORA 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

     

     

     

     

     


    quinta-feira, 28 de abril de 2011 13:15

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
    quinta-feira, 28 de abril de 2011 17:01

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
    quinta-feira, 28 de abril de 2011 17:01
  • 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?
    quinta-feira, 28 de abril de 2011 17:13
  • Pode ser o Tamanho da String?

    O que posso fazer?Já que não posso declarar uma variável com mais de 8000 caracteres?

    Grato,

    Maurício

     

     

    sexta-feira, 29 de abril de 2011 14:02