Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1508to1512
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Daten von Webseite abfragen
20.08.2016 11:36:38
Webseite
Hallo,
Ich möchte stündliche historische Daten von Weather Underground abfrage:
z.B. für LONDON von 01.01.2015 bis 31.12.2015.
Mein Ziel ist etwas aufzubauen wie:
1. Eingabe Feld für Ort: z.B. LONDON
Auswahlstationen für LONDON werden angezeit.Auswahl "Heathrow "
2. Zeitraum für Abfrage: z.B. 01.01.2015 - 31.12.2016
3. Taste "GET History"
Ergebnis: Stündliche historische Werte für Temperatur und Feuchte für den Zeitarum werden abgerufen.
Vielen Dank vorab.
Viele Grüße
Dagi

27
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten von Webseite abfragen
20.08.2016 12:35:50
Webseite
Hallo Dagi
Habe Dich vorher nicht ganz richtig verstanden und Dir daher vorher einen falschen Tipp gegeben. Versuchen wir es nochmals :-)
Ich habe Dir ein Excel-File mit dem Code von unten hochgeladen:
https://www.herber.de/bbs/user/107733.xlsm
Das ganze ist ziemlich langsam, daher teste es zuerst mit einer sehr kurzen Zeitdauer von wenigen Tagen.
Location (Flughafen) und Zeitperiode kannst Du im Excel-File eintragen.
Im Code musst Du allenfalls noch die Spaltenüberschriftten gemäss Deiner Spracheinstellung anpassen. (Ich habe leider die Spracheinstellung nicht gefunden.) Bei mir sind die Überschriften der Spalten auf Schweizerdeutsch. Wenn Du deutsche Überschriften hast, musst Du unten "Ziit (GTM)" warhscheinlich durch "Zeit (GTM)" ersetzen, "Temp" durch "Temp." und "Füechtigkeit" durch "Feuchtigkeit".
Ich hoffe, das hilft Dir weiter.
Liebe Grüsse
Miraamis

Option Explicit
Public Sub weatherHistory()
Dim wsHist As Worksheet
Dim colTime As Integer, colTemp As Integer, colFeuchtigkeit As Integer
Dim colMax As Integer, rowExcel As Long
Dim strHour As String, datumStart As Date, datumEnde As Date, datum As Date
Dim location As String
Dim antwortMsgBox As Integer
Dim objRegex As Object
Dim XMLHttpRequest As Object
Dim strURL As String
Dim HTMLBody As Object
Dim HTMLDoc As Object
Dim HTMLTable As Object
Dim HTMLTableHeader As Object
Dim tr As Object
Dim rowTableHeader As Integer
Set XMLHttpRequest = CreateObject("MSXML2.ServerXMLHTTP.6.0")
On Error GoTo fehler
Set wsHist = ActiveSheet
rowExcel = 2  'Erste Zeile in Excel, die ausgefüllt werden soll
'Statusbar
Dim oldStatusBar As Boolean
oldStatusBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
Application.StatusBar = "Daten aus Weather Underground importieren...."
'Regular Expression um Zeit auszulesen (nur volle Stunden)
Set objRegex = CreateObject("VBScript.RegExp")
objRegex.Pattern = "\d{1,2}:00\s((AM)|(PM))"
'Eingegebene Location
location = wsHist.Range("Location").Value
'Überprüfen, ob wirklich ein "Von" und "Bis" Datum eingegeben wurden
If IsDate(wsHist.Range("Von").Value) = False Or IsDate(wsHist.Range("Bis").Value) = False Then
MsgBox "Ungültige Datumseingabe.", vbInformation
Exit Sub
End If
'Eingegebene Daten (Von und Bis)
datumStart = wsHist.Range("Von").Value
datumEnde = wsHist.Range("Bis").Value
datum = datumStart
'Loop über jeden Tag in der gewünschten Zeitperiode
Do Until datum > datumEnde
'Statusbar, damit wir bei langen Abfragen, wissen wie viele Daten
'bereits heruntergeladen wurden
Application.StatusBar = "Daten vom " & Format(datum, "dd.mm.yy") & _
" aus Weather Underground importieren...."
'Url anpassen (angegebene location und datum einsetzen)
strURL = "https://www.wunderground.com/history/airport/" & _
location & "/" & Year(datum) & "/" & Month(datum) & "/" & Day(datum) & _
"/DailyHistory.html"
'Request
With XMLHttpRequest
.Open "GET", strURL, False
.SetRequestHeader "content-type", "text/html; charset=UTF-8"
.Send
End With
'Warten bis request beendet
While XMLHttpRequest.ReadyState  4
DoEvents
Wend
Set HTMLDoc = CreateObject("htmlfile")
Set HTMLBody = HTMLDoc.body
HTMLBody.innerHTML = XMLHttpRequest.responseText
'Die Tabelle, die uns interessiert heisst "obsTable"
Set HTMLTable = HTMLDoc.getElementById("obsTable")
'Leider sind die Tabellen nicht immer genau gleich aufgebaut.
'(Feuchtigkeit ist manchmal in Spalte 3 und manchmal in Spalte 4.
'Daher müssen wir zuerst die richtige Spalte finden.
'Ich konnte die Spracheinstellungen nicht finden, daher kann es sein,
'dass bei Dir die Überschriften anders lauten. Dann musst Du das anpassen
'Titel - Spalten von Temp. und Feuchtigkeit bestimmen
Set HTMLTableHeader = HTMLTable.getElementsByTagName("thead")
colTime = -1
colTemp = -1
colFeuchtigkeit = -1
If IsNull(HTMLTableHeader(0).getElementsByTagName("tr")(0)) = False Then
Set tr = HTMLTableHeader(0).getElementsByTagName("tr")(0)
'Loop über alle Spalten (erste Spalte hat nr. 0, zweite nr. 1, etc.)
For rowTableHeader = 0 To tr.getElementsByTagName("th").Length - 1
'************************ An Deine Spracheinstellungen anpassen ****************
'Allenfalls musst Du hier die Überschrift anpassen, daher "Ziit (GMT)" ersetzen
If tr.getElementsByTagName("th")(rowTableHeader).innerText = "Ziit (GMT)" Then
colTime = rowTableHeader
'Allenfalls musst Du hier die Überschrift anpassen, daher "Temp." ersetzen
ElseIf tr.getElementsByTagName("th")(rowTableHeader).innerText = "Temp" Then
colTemp = rowTableHeader
'Allenfalls musst Du hier die Überschrift anpassen, daher "Füechtigkeit" ersetzen
ElseIf tr.getElementsByTagName("th")(rowTableHeader).innerText = _
"Füechtigkeit" Then
colFeuchtigkeit = rowTableHeader
End If
If Application.WorksheetFunction.Min(colTime, colTemp, colFeuchtigkeit) >= 0 Then  _
Exit For
Next
End If
Set tr = Nothing
'colTime entspricht der Spalte der Zeit in historischer Übersicht
'colTemp entspricht der Spalte der Temperatur in historischer Übersicht
'colFeuchtigkeit entspricht der Spalte der Feuchtigkeit in historischer Übersicht
colMax = Application.WorksheetFunction.Max(colTime, colTemp, colFeuchtigkeit)
'Meldung, falls eine Spalte nicht gefunden wurde
If Application.WorksheetFunction.Min(colTime, colTemp, colFeuchtigkeit) = -1 Then
antwortMsgBox = MsgBox("Eine der gesuchten Spalten wurde nicht gefunden. " & _
"Soll mit dem nächsten Tag " & _
"fortgefahren werden?", vbYesNo + vbCritical)
If antwortMsgBox = 6 Then
GoTo nextDay
Else
Exit Sub
End If
End If
'Daten von diesem Tag auslesen
'Loop über alle Zeilen
For Each tr In HTMLTable.getElementsByTagName("tr")
'Überprüfen, ob es genügend Spalten hat
If tr.getElementsByTagName("td").Length >= colMax Then
'Zeit auslesen
strHour = tr.getElementsByTagName("td")(colTime).innerText
'Überprüfen, ob es sich um eine volle Stunde handelt
If objRegex.test(strHour) = True Then
strHour = objRegex.Execute(strHour)(0)
'Datum & Zeit eintragen
wsHist.Cells(rowExcel, 1).Value = datum & " " & strHour 'Zeit
'Temperatur eintragen
wsHist.Cells(rowExcel, 2).Value = _
tr.getElementsByTagName("td")(colTemp).innerText
'Feuchtigkeit eintragen
wsHist.Cells(rowExcel, 3).Value = _
tr.getElementsByTagName("td")(colFeuchtigkeit).innerText
rowExcel = rowExcel + 1
End If
End If
Next
Set HTMLDoc = Nothing
Set HTMLBody = Nothing
Set HTMLTable = Nothing
'Nächste Tag
nextDay:
datum = datum + 1
Loop
'Statusbar wieder auf vorherigen Wert einstellen.
Application.StatusBar = False
Application.DisplayStatusBar = oldStatusBar
MsgBox "Daten wurden heruntergeladen.", vbInformation
Set objRegex = Nothing
Set wsHist = Nothing
Set HTMLDoc = Nothing
Set HTMLBody = Nothing
Set HTMLTable = Nothing
Exit Sub
fehler:
Application.StatusBar = False
Application.DisplayStatusBar = oldStatusBar
'Fehlermeldung
MsgBox "Es ist ein Fehler aufgetreten. " & vbCrLf & "Fehlernummer: " & Err.Number & _
vbCrLf & "Fehlerbeschreibung: " & Err.Description, vbCritical
Set objRegex = Nothing
Set wsHist = Nothing
Set HTMLDoc = Nothing
Set HTMLBody = Nothing
Set HTMLTable = Nothing
End Sub

Anzeige
AW: Daten von Webseite abfragen
20.08.2016 13:21:43
Webseite
Hallo Miraamis,
Super vielen Dank. Du bist einmalig.
Ich bekomme immer eine Meldung "Eine der gesuchte Spalten wurde nicht gefunden. Soll mit dem nächsten Tag fortgefahren werden?"
Wie könnte ich diese Meldung wegbekommen?
Ich hätte eine bitte an dich noch:
Besteht die Möglichkeit die Locations alle von WU abzufragen?
Danke vielmals.
Viele Grüße
Dagi
AW: Daten von Webseite abfragen
20.08.2016 13:48:48
Webseite
Hallo Dagi
Wenn Du im angehängten File auf den Button klickst, erhältst Du die Spaltenüberschriften. Die Fehlermeldung wird immer noch kommen und Du kannst auf "Nein" klicken. Schreib mir bitte, welche Überschriften Du als Ausgabe erhältst, dann passe ich Dir es kurz an.
https://www.herber.de/bbs/user/107734.xlsm
Liebe Grüsse
Miraamis
Anzeige
AW: Daten von Webseite abfragen
20.08.2016 14:04:26
Webseite
Hallo Miraamis
ich habe eine Kopie der Datei angehängt.
Vielen, Vielen Dank für deine Unterstützung.
https://www.herber.de/bbs/user/107735.xlsm
Viele Grüße
Dagi
AW: Daten von Webseite abfragen
20.08.2016 14:15:47
Webseite
Hallo Dagi
Könntest Du es nun nochmals testen? Falls eine Fehlermeldung zu den Spaltenüberschriften erscheint, bin ich froh, wenn Du mir schreibst, wie sie lautet.
https://www.herber.de/bbs/user/107736.xlsm
Liebe Grüsse
Miraamis
AW: Daten von Webseite abfragen
20.08.2016 14:38:35
Webseite
Hallo Miraamis,
funtioniert jetzt einwandfrei. Keine Fehlermeldung!
Vielen Dank, vielen Dank!
Wäre es eventuell möglich, wenn man z.B. London eingibt die unter WU "change station" anzeigent auch in Excel angezeigt werden und man eine auswählen kann.
Das wäre nur Luxus.
Du bist wirklich fantastisch.
Dagi
Anzeige
AW: Daten von Webseite abfragen
20.08.2016 14:52:35
Webseite
Hallo Miraamis,
wo finde ich die für uns interessante Tabelle "obsTable" ?
Viele Grüße
Dagi
AW: Daten von Webseite abfragen
20.08.2016 15:11:05
Webseite
Hallo Dagi
Vielen Dank, freut mich, dass es klappt :-)
Wo finde ich denn dieses "change station"? Meinst Du diese Liste (siehe Printscreen)?
Userbild
Die Tabelle siehst Du, wenn Du den HTML-Code öffnest (rechte Maustaste und "Seitenquelltext anzeigen"))- siehe Printscreen
Userbild
Liebe Grüsse
Miraamis
Anzeige
AW: Daten von Webseite abfragen
20.08.2016 15:18:41
Webseite
Vielen Dank Miraamis.
Ich wünsche dir noch ein sehr schönes Wochenende.
Viele Liebe Grüße
Dagi
AW: Daten von Webseite abfragen
20.08.2016 16:09:34
Webseite
Hallo Miraamis,
die erste Liste meine ich.
Leider ist mein HTML-Code anders.
Wenn ich mit rechte Maustaste öffne ( "Seitenquelltext anzeigen" nicht vorhanden nur "Elemet untersuchen").
Grüße
Dagi
AW: Daten von Webseite abfragen
20.08.2016 16:27:53
Webseite
Hallo Miraamis,
unter : https://www.wunderground.com/weather/api/d/docs?d=data/history
kann man auch die history Daten herunderladen: Ich habe einen user key.
"http://api.wunderground.com/api/52a383029fa09e01/history_20160801/q/CA/EGLL.----".
Endung .json
Besteht die Möglichkeit vielleicht hier herunterzuladen?
Bei den jetzigen werden maximal nur für drei Monaten die stündliche werte heruntergeladen.
Viele Grüße
Dagi
Anzeige
AW: Daten von Webseite abfragen
20.08.2016 22:26:48
Webseite
Hallo Dagi
Du kannst genauso gut "Element untersuchen" verwenden. So sieht man es sogar noch besser. Geh zur Tabelle "Hourly Weather History & Observations" und dann rechte Maustaste und "Element untersuchen". Ich habe es nun noch so angepasst, dass man die Stadt eingeben kann und dann eine Liste erscheint mit den möglichen Stationen.
https://www.herber.de/bbs/user/107746.xlsm
Zu Deiner anderen Frage: Ja man kann das sicher von dort herunterladen, da Du einen Key hast, wäre dies die wesentlich einfachere Variante gewesen ;-)
So erhältst Du den Json-String für die Location EGLL am 01.08.2016:

Public Sub HistoryWeather()
Dim XMLHttpRequest As Object
Dim strURL As String
dim response as string
Set XMLHttpRequest = CreateObject("MSXML2.ServerXMLHTTP.6.0")
strURL = "http://api.wunderground.com/api/52a383029fa09e01/history_20160801/q/CA/EGLL. _ _ _"
'hier noch json anhängen
With XMLHttpRequest
.Open "GET", strURL, False
.Send
End With
While XMLHttpRequest.ReadyState  4
DoEvents
Wend
response = XMLHttpRequest.responseText
Debug.Print response
End Sub

Die Variable response enthält dann den json-string. Um diesen String für alle Daten zu erhalten, erstelltst Du einen Loop über alle daten in diesem Zeitraum und passt jeweils die Variable strURL an. Diese sieht ja immer wie folgt aus

strURL = "http://api.wunderground.com/api/52a383029fa09e01/history_" & _
jahr & monat & tag & "/q/CA/" & location & ".json"
die Location nimmst Du aus Deinem Excel-File. Google Mal nach "VBA json" da findest Du vieles dazu, wie man dann die Elemente aus dem Json-String erhält.
Sollte etwas nicht klar sein, kannst Du aber auch gerne nochmals nachfragen.
Liebe Grüsse
Miraamis
Anzeige
AW: Daten von Webseite abfragen
21.08.2016 07:15:05
Webseite
Hallo Miraamis,
du bist wunderbar. Du bist ein exzellenter Programmierer.
Woher kennst du dich so gut aus?
Vielen, vielen Dank.
Viele Liebe Grüße
Dagi
AW: Daten von Webseite abfragen
21.08.2016 08:12:21
Webseite
Hallo Dagi
Lieb von Dir :-)
Ich bin Mathe-Studentin und habe einen Nebenjob, in dem ich VBA-Makros programmiere, aber ich muss immer noch viel dazulernen. (Deine Aufgabe war von daher auch für mich eine gute Übung und ich konnte es als Vorwand verwenden, nicht für die anstehenden Prüfungen zu lernen :-)
Ich schicke Dir das File mit der Json-Abfrage im Laufe des Nachmittags/Abend - ich hoffe, dass es damit auch ein wenig schneller wird...
Liebe Grüsse
Miraamis
Anzeige
AW: Daten von Webseite abfragen
21.08.2016 10:54:38
Webseite
Hallo Miraamis,
wünsche alles gute für deine Prüfung.
Freue mich sehr dich auf diesem Wege kennengelernt zu haben.
Wenn es dir nicht all zu viel Zeit kostet, würde ich mich sehr mit der "Json-Abfrage" freuen.
Vielen, vielen Dank.
Viele Liebe Grüße
Dagi
AW: Daten von Webseite abfragen
21.08.2016 13:04:05
Webseite
Hallo Liebe Miraamis,
ich hätte noch eine Bitte an Dich:
Könntest du es eventuell die "LocationBestimmen" so anpassen, dass alle Messstationen an den Location angezeigt werden und nicht nur die Flughafen. Mit einem CheckBox die Flughafen nur angezeigt werden.
Ich möchte dich aber nicht von deinem lernen abhalten.
Viele liebe Grüße.
Dagi
Anzeige
AW: Daten von Webseite abfragen
21.08.2016 20:40:56
Webseite
Hallo Dagi
Hier noch die Json-Abfrage:
https://www.herber.de/bbs/user/107759.xlsm
(Den ersten Button kannst Du eigentlich löschen. Ich habe den vorherigen Code nicht gelöscht - vielleicht kannst Du es ja mal für ein ähnliches Projekt verwenden.) Für das neue Makro musst Du die Zeitzone angeben, ich habe Dir ein Dropdown hinzugefügt.
Zu Deiner Frage zu den Flughäfen: Bist Du sicher, dass es für die historischen Daten überhaupt andere Orte gibt? Für den Forecast gibt es zwar eine grosse Auswahl an Wetterstationen, aber sobald Du auf historische Daten wechselst, erhälst Du die Daten vom Flughafen. Versuche es mal mit London: Ändere im Forecast unter "Change station" zu einem "Nicht-Flughafen". Nun siehst Du die aktuelle Wetterprognose für diese Station, aber sobald Du nun auf "History" klickst, erscheinen die Daten von Heathrow.
Darum gibt es dieses "Change Station" in der History gar nicht mehr zur Auswahl, sondern nur noch das Eingabe-Feld "Search for Another Location" und wenn Du dort London eingibst, erhältst Du die Auswahl, die Dir auch das Makro zeigt.
Falls Du aber ein Beispiel gefunden hast, das historischer Daten hat, aber nicht auf der Liste, die das Makro anzeigt, erscheint, kannst Du es mir gerne schreiben, dann schaue ich es nochmals an.
Liebe Grüsse
Miraamis
Anzeige
AW: Daten von Webseite abfragen
21.08.2016 22:02:07
Webseite
Hallo Liebe Miraamis,
ich werde alles was du gemacht hast, mir noch genau anschauen.
Diese Leidenschaft eine Lösung zu finden ist einfach Super.
Ich wünsche dir von Herzen alles Gute auf deinem weiteren Lebensweg und viel Erfolg.
Vielen, vielen Dank.
Viele liebe Grüße.
Dagi
AW: Daten von Webseite abfragen
22.08.2016 06:24:05
Webseite
Guten Morgen Dagi
Gern gemacht, Dir auch alles Gute.
Liebe Grüsse
Miraamis
AW: Daten von Webseite abfragen
23.08.2016 12:55:41
Webseite
Hallo Liebe Miraamis,
Eine Frage noch an Dich:
Wäre es mögliche in die Spalten nur die Zahlenwerte ohne Einheiten zu übernehmen?
Den Datumfeld den Format (01.01.2016 13:30)zu geben.
Vielen Dank!!
Liebe Grüße
dagi
AW: Daten von Webseite abfragen
24.08.2016 09:19:09
Webseite
Hallo Dagi
Hier das angepasste File:
https://www.herber.de/bbs/user/107807.xlsm
Das Datum war wirklich schlecht formatiert. Es wird nun von Excel auch als solches erkannt.
Liebe Grüsse
Miraamis
AW: Daten von Webseite abfragen
24.08.2016 19:04:38
Webseite
Hallo Miraamis,
vielen vielen Dank für deine Mühe.
Ich weis gar nicht wie ich dir Danken soll.
Viele Grüße
Dagi
AW: Daten von Webseite abfragen
24.08.2016 19:43:54
Webseite
Hallo Miraamis,
Ich traue mich gar nicht dich anzuschreiben, weil ich dich zu viel in Anspruch genommen habe.
Bei Json bekam ich immer ein Email von WU Ihre „Abfrage für Datenmenge wurde überschritten“.
Deshalb benutze ich die erste Version. Json kaum Zeitersparnis.
Ich arbeite im Bereich Klimatisierung und brauche die Datei um Wetterdaten von
verschiedenen Orten abzufragen.
Leider sind meine VBA Kenntnisse sehr begrenzt.
Wenn du die Einheiten auch bei der Normal Version anpassen könntest wäre ich dir Dankbar.
Vielen, vielen Dank für deine bisherige Unterstützung.
Dagi
AW: Daten von Webseite abfragen
25.08.2016 10:16:35
Webseite
Hallo Dagi
Ja, mit Deinem Key kannst Du nur eine bestimmte Menge an Abfragen pro Tag durchführen (ich glaube 500 pro Tag, wenn ich mich recht erinnere).
Ich habe Dir in der ersten Abfrage ohne Key noch die Einheit herausgenommen und das Datum so angepasst, dass es von Excel auch als solches erkannt wird (vorher war das Datum als String formatiert, aber damit kannst Du dann die ganzen Datumsfunktionen im Excel nicht nutzen.) Ausserdem ist die Zeit nun modulo 24 (was ich persönlich der AM/PM schreibweise vorziehe, aber das kannst Du auch jederzeit über die übliche Excel-Format Einstellung anpassen).
https://www.herber.de/bbs/user/107825.xlsm
Liebe Grüsse
Miraamis
AW: Daten von Webseite abfragen
25.08.2016 17:57:41
Webseite
Hallo Miraamis,
vielen Dank für deine Mühe. Wenn du eine Rechnung über 300 € an meine Firma emailst werde ich dafür sorgen, dass umgehend du bezahlst wirst.
Gib mir bitte Rückmeldung, ob du Interesse hast.
Danke und viele Liebe Grüße
Dagi
AW: Daten von Webseite abfragen
26.08.2016 15:25:33
Webseite
Hallo Miraamis,
ich habe die Datei etwas angepasst. Würde dir gerne zeigen.
Ist jedoch 340 KB groß. Würde dir gerne Emailen. Ich habe mit meiner Firma gesprochen,
Sie würden dir 300€ gerne zahlen.
Bitte um Rückinfo. Danke!
Liebe Grüße
Dagi
AW: Daten von Webseite abfragen
21.08.2016 10:40:14
Webseite
Hallo Miraamis,
du bist wunderbar. Du bist ein exzellenter Programmierer.
Woher kennst du dich so gut aus?
Vielen, vielen Dank.
Viele Liebe Grüße
Dagi

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige