Auslesen von Entfernungen aus GoogleMaps-Quellcode

  • Excel

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Christo.

    Auslesen von Entfernungen aus GoogleMaps-Quellcode

    Hallo zusammen,

    ich bin noch relativ unbewandert in VBA und steige daher noch nicht hinter jeden Code, den ich so verwende. Ich habe versucht Entfernungen zwischen zwei Orten mittels Google Maps unter Angabe von Ländern, PLZ und Ortsnamen zu ermitteln. Das funktioniert auch schon teilweise, nur schaffe ich es nicht, die reine Entfernung als Zahl aus dem Code zu extrahieren. Ich habe auch nach längerem Suchen, keine passende Lösung für das Durchsuchen des HTML-Quellcodes im Netz gefunden. Kann mir von euch jemand helfen? Im Folgenden der Code, danke schon einmal für jede Antwort! Gruß, Christo

    Quellcode

    1. Option Explicit
    2. Sub Orte()
    3. Dim i As Integer
    4. Dim zeile As Long
    5. With Sheets(1)
    6. zeile = .Range("A65536").End(xlUp).Row
    7. For i = 4 To zeile
    8. .Cells(i, 11).Value = Entfernung(.Cells(i, 4), .Cells(i, 5), .Cells(i, 6), .Cells(i, 7), .Cells(i, 8), .Cells(i, 9))
    9. Next i
    10. End With
    11. End Sub
    12. Function Entfernung(Von_Land As String, Von_PLZ As String, Von_Ort As String, Nach_Land As String, Nach_PLZ As String, Nach_Ort As String)
    13. Dim IEApp As Object
    14. Dim IEDocument As Object
    15. Dim blnGefunden As Boolean
    16. Dim RouteStr As String
    17. Dim Von As String
    18. Dim Nach As String
    19. Dim IEDoc As Object
    20. Dim strTeile As Variant
    21. Dim i As Long
    22. Dim msg As String
    23. Dim F As Integer
    24. blnGefunden = False
    25. Von = Adresse(Von_Land, Von_PLZ, Von_Ort)
    26. Nach = Adresse(Nach_Land, Nach_PLZ, Nach_Ort)
    27. Set IEApp = CreateObject("InternetExplorer.Application")
    28. IEApp.Visible = False
    29. IEApp.Navigate "http://maps.google.com/maps?saddr=" & Von & "&daddr=" & Nach & "&hl=de"
    30. Do: Loop Until IEApp.Busy = False
    31. Set IEDocument = IEApp.Document
    32. Set IEDoc = IEApp.Document
    33. Do: Loop Until IEApp.Busy = False
    34. strTeile = Split(IEDoc.Body.innertext, vbCrLf)
    35. For i = LBound(strTeile) To UBound(strTeile)
    36. If InStr(1, strTeile(i), "Minuten", vbTextCompare) > 0 Then
    37. blnGefunden = True
    38. Entfernung = strTeile(i)
    39. End If
    40. Next
    41. IEApp.Quit
    42. Set IEDocument = Nothing
    43. Set IEApp = Nothing
    44. End Function
    45. Function Adresse(Country As String, City As String, ZIP As String) As String
    46. Dim HStr As String
    47. If Country <> "" Then HStr = Country & " "
    48. If ZIP <> "" Then HStr = HStr & ZIP & " "
    49. If City <> "" Then HStr = HStr & City
    50. Adresse = Trim(HStr)
    51. End Function
    Ich kann dir sagen wie's mit HttpWebRequest geht.
    Wenn dein IEDoc.Body dem ResponseBody bei HttpWebRequest entspricht, kannst du dasselbe Verfahren anwenden.

    Visual Basic-Quellcode

    1. Response = IEDoc.Body
    2. i1 = InStr(i3 + 1, Response, "distance:'", vbTextCompare)
    3. i2 = InStr(i1, Response, "',time:'")
    4. Distance = Mid(Response, i1 + 10, i2 - i1 - 10)
    Noch ein geeignetes Fehlerhandlung einbauen, falls keine Route gefunden wurde.
    Alternativ kannst du auch mit RegEx den String zwischen "distance:'" und "'time:" rausfiltern.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --