CONHEÇA o BABOO PRO e a Comunidade BABOO que substituirão o site BABOO e esse fórum

Ir para conteúdo
  • Cadastre-se
guilhermera

Como selecionar o conteúdo de uma pagina web usando macro

Mensagem Recomendada

Boa noite, estive quebrando a cabeça para selecionar um conteúdo de uma pagina web.
esta seria a Resposta de uma chama GET:

{"TotalPedagio":401.79999999999995,"TotalCombustivel":0.0,"TotalCombustivelDescricao":"R$ 0,00","TotalPedagioDescricao":"R$ 401,80","TotalDescricao":"R$ 401,80","Duracao":"5 horas 28 minutos","Distancia":"443 km","Pedagios":[{"PP":"-23.466109, -46.368850","V":25.9,"VF":0.0},{"PP":"-23.384184,-46.153926","V":24.5,"VF":0.0},{"PP":"-23.283423,-45.860680","V":24.5,"VF":0.0},{"PP":"-23.155856,-45.697987","V":24.5,"VF":0.0},{"PP":"-22.930196,-45.360854","V":100.8,"VF":0.0},{"PP":"-22.494911,-44.569536","V":100.8,"VF":0.0},{"PP":"-22.716332,-43.716703","V":100.8,"VF":0.0}]}

Eu gostaria de pegar o resultado 401,80 sem a parte "R$ " logo após "TotalPedagioDescricao" com a ajuda do macro:
 

If InStr(objHTTP.responseText, """TotalPedagioDescricao"" : {") = 0 Then GoTo ErrorHandl
    Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = """TotalPedagioDescricao"".*?([0-9]+)": regex.Global = False
    Set matches = regex.Execute(objHTTP.responseText)
    tmpVal = Replace(matches(0).SubMatches(0), ".", Application.International(xlListSeparator))

Muito obrigado galera!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma ideia poderia ser:

Sub ObtemTotalPedagio()
  Dim RespostaSite As String, tmpVal As String
  '...código para obter o texto da página...
  RespostaSite = objHTTP.responseText
  With CreateObject("VBScript.RegExp")
    .Global = False
    .Pattern = "@TotalPedagioDescricao@:@R\$\s?([\d\.]+,\d{2})@"
    .Pattern = Replace(.Pattern, "@", """")
    If .test(RespostaSite) Then tmpVal = .Execute(RespostaSite)(0).SubMatches(0)
  End With
  MsgBox tmpVal
End Sub

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, não deu certo vou postar o código todo quem sabe ajuda...

Public Function Pedágios(orig As String, dest As String, veic As String, eix As String)
    Dim firstVal As String, secondVal As String, thirdVal As String, fourthVal As String, lastVal As String
    firstVal = "api que eu utilizo"
    secondVal = "|"
    thirdVal = "&veiculo="
    fourthVal = "&eixo="
    lastVal = "&ep=false&k=%233333&kmLitro=0&ra=false&rotaVolta=&source=web&valorCombustivel=0.00"
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
    Url = firstVal & Replace(orig, " ", "+") & secondVal & Replace(dest, " ", "+") & thirdVal & veic & fourthVal & eix & lastVal
    objHTTP.Open "GET", Url, False
    objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
    objHTTP.send ("")
    If InStr(objHTTP.responseText, TotalPedagio) = 0 Then GoTo ErrorHandl
    Set regex = CreateObject("VBScript.RegExp"): regex.Pattern = "TotalPedagio.*?([0-9]+)": regex.Global = False
    Set matches = regex.Execute(objHTTP.responseText)
    tmpVal = Replace(matches(0).SubMatches(0), ".", Application.International(xlListSeparator))
    Pedágios = CDbl(tmpVal)
    Exit Function
ErrorHandl:
    Pedágios = -0.0001
End Function

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas afinal, você quer o valor após TotalPedagioDescricao como no 1º Pots ou após TotalPedagio como no últtimo?

Até porque o TotalPedagioDescricao já tem como separador decimal a vírgula, nem precisaria do replace depois.

Bem, eu tinha já feito um teste com o texto q você anexou no início e com as solicitações iniciais e tinha funcionado com o código q passei (logicamente sem a parte que pega os dados da internet).

Sem ter os outros parâmetros de acesso ao conteúdo do site fica ruim pra testar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só depois que eu percebi que TotalPedagioDescricao TotalPedagio eram a mesma coisa.  Mas eu prefiro o TotalPedagio. Vou enviar pra você via MP a api e tentar aqui mais vezes.

*Obs. o trecho que estou testando seria de São paulo até Rio de janeiro, usando como veiculo "caminhao" com eixos "7".

Editado por guilhermera

Incluir informação

Compartilhar este post


Link para o post
Compartilhar em outros sites

O código que você me enviou no privado infelizmente não rodou: o ResponseText do objHTTP retorna o seguinte conteúdo:

"Error detected by Application Firewall. Please contact support if you have any questions."

Mesmo copiando a URL gerada no código e colando no navegador, também não abre a página, dá esse erro...

você usa alguma API instalada na máquina?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Quer postar a sua dúvida? Cadastre-se pois é rápido e fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×
×
  • Criar Novo...