Wetter mit Batch verwenden??? Wie???
Hallo Comunity, ich bin´s mal wieder :D
Ich arbeite zur Zeit an einem Batch-Programm, was mir beim Start verschiedene Sachen anzeigt, unteranderem auch das Wetter, also wie viel grad es hat und so. Jedoch komme ich da nicht weiter...vielleicht kann mir ja Jemanden von euch helfen :D
Vielen Dank im voraus :D
Ich arbeite zur Zeit an einem Batch-Programm, was mir beim Start verschiedene Sachen anzeigt, unteranderem auch das Wetter, also wie viel grad es hat und so. Jedoch komme ich da nicht weiter...vielleicht kann mir ja Jemanden von euch helfen :D
Vielen Dank im voraus :D
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 300110
Url: https://administrator.de/contentid/300110
Ausgedruckt am: 22.11.2024 um 22:11 Uhr
24 Kommentare
Neuester Kommentar
Welche Plattform: FreeDOS?
Mittels PowerShell klingt das für mich noch realisierbar, aber nur mit Batch ist es definitiv nicht möglich.
Und hier das cmdlet für Powershell: Get-Weather
Und hier das cmdlet für Powershell: Get-Weather
@echo off
powershell -Executionpolicy ByPass -Command "((iwr -uri 'http://www.wetter.de/deutschland/wetter-berlin-18228265.html').AllElements | ?{$_.class -eq 'row-weather-report'}).innerText"
Nur ein Beispiel von 1Mio. Möglichkeiten
Mit Batch geht das auch, z.B. mit Hilfe von curl oder wget und dann entweder aufwändiges ausfiltern mit findstr for Schleifen etc. aber wer macht das heute noch so ? Mit etwas VBS-Würze ebenfalls komplett in Batch einbettbar. Also alles machbar.
Grüße Uwe
Zitat von @DaTobsn:
Also muss ich den Code oben einfach nur copy und paste machen und das Wetter als eine Variable nutzen? Sry ich bin in dem Gebiet ned gerade ein Profi ^^ @colinardo
Ja, mindestens eine installierte PS 3.0 ist für den Schnippsel erforderlich (wenn nur PS2.0 vorhanden ist muss man es anders umschreiben).Also muss ich den Code oben einfach nur copy und paste machen und das Wetter als eine Variable nutzen? Sry ich bin in dem Gebiet ned gerade ein Profi ^^ @colinardo
Das war ja nur ein simples Beispiel von der Seite wetter.de. Die URL für deinen Standardort kannst du dir von deren Seite holen. Mit Anpassungen lässt sich das auch für jede andere Wetter-Seite verwenden, aber wie gesagt jede Seite ist anders aufgebaut, also muss auch der Code entsprechend angepasst werden.
Woher wäre egal.
Naja, eine API muss es schon sein, sonst sind die Daten nicht vernünftig scriptbar.Beispiel mit der Yahoo! Wetter-API und einem Batch mit JScript (als *.bat speichern).
@if (@a)==(@b) @end /*
@echo off &setlocal
set "city=Berlin"
call :assignConditions
for /f "tokens=1-4 delims=$" %%i in ('cscript //nologo //e:jscript "%~fs0" "%city%"') do (
echo %%i
echo %%j
echo %%k Grad C
call echo %%cond%%l%%
)
pause
exit /b
:assignConditions
set "cond0=Tornado"
set "cond1=tropischer Sturm"
set "cond2=Hurrikan"
set "cond3=schwere Gewitter"
set "cond4=Gewitter"
set "cond5=Schneeregen"
set "cond6=Graupelschauer"
set "cond7=Schneegraupel"
set "cond8=gefrierender Spruehregen"
set "cond9=Spruehregen"
set "cond10=gefrierender Regen"
set "cond11=Schauer"
set "cond12=Schauer"
set "cond13=Schneegestoeber"
set "cond14=leichte Schneeschauer "
set "cond15=wehender Schnee"
set "cond16=Schnee"
set "cond17=Hagel"
set "cond18=Schneeregen "
set "cond19=Staub"
set "cond20=dunstig"
set "cond21=Dunst"
set "cond22=neblig"
set "cond23=stuermisch"
set "cond24=windig"
set "cond25=kalt"
set "cond26=bewoelkt"
set "cond27=meist bewoelkt (Nacht)"
set "cond28=ueberwiegend bewoelkt (Tag)"
set "cond29=teilweise bewoelkt (Nacht)"
set "cond30=teilweise bewoelkt (Tag)"
set "cond31=klar (Nacht)"
set "cond32=sonnig"
set "cond33=schoen (Nacht)"
set "cond34=schoen (Tag)"
set "cond35=Hagelregen"
set "cond36=heiss"
set "cond37=einzelne Gewitter"
set "cond38=vereinzelte Gewitter"
set "cond39=vereinzelte Gewitter"
set "cond40=vereinzelte Schauer"
set "cond41=schwere Schneefaelle"
set "cond42=vereinzelte Schneeschauer "
set "cond43=schwere Schneefaelle"
set "cond44=wechselnd bewoelkt"
set "cond45=Gewitterschauer "
set "cond46=Schneeschauer "
set "cond47=einzelne Gewitterschauer"
set "cond3200=nicht verfuegbar"
exit /b
*/
var objXMLHTTP = new ActiveXObject('Microsoft.XMLHTTP');
objXMLHTTP.Open('GET', 'https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text%3D%22' + WScript.Arguments.Item(0) + '%22)%20and%20u%3D%22c%22&format=xml&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys', false);
objXMLHTTP.Send();
if (objXMLHTTP.readyState == 4 && objXMLHTTP.status == 200) {
var oXmlDoc = objXMLHTTP.responseXML;
var s = oXmlDoc.documentElement.selectSingleNode('//results/channel/title').text + '$';
s += oXmlDoc.documentElement.selectSingleNode('//results/channel/item/pubDate').text + '$';
s += oXmlDoc.documentElement.selectSingleNode('//results/channel/item/yweather:condition').getAttribute('temp') + '$';
s += oXmlDoc.documentElement.selectSingleNode('//results/channel/item/yweather:condition').getAttribute('code');
WScript.Echo(s);
}
rubberman
Mit API hab ich da auch noch was ...
@echo off
set "ort=Berlin"
powershell -ExecutionPolicy ByPass -Command "$r=(new-Object System.Net.WebClient).DownloadString('http://api.openweathermap.org/data/2.5/weather?q=%ort%&APPID=1ccdcf4ab69dcf58ceb56740c8c00e75&units=metric') | ConvertFrom-Json;write-host \"Ort: $($r.name)`nTemperatur: $($r.main.temp) C`nDruck: $($r.main.pressure) hPa`nWind: $($r.wind.speed) m/s / Richtung: $($r.wind.deg) Grad`nWolken: $($r.clouds.all) %%\""
Hallo,
Eine Schnittstelle....und deine 5 zusätzlichen Fragezeichen waren eine kaputte Tastatur, oder?
https://de.wikipedia.org/wiki/Programmierschnittstelle
Gruß,
Peter
Eine Schnittstelle....und deine 5 zusätzlichen Fragezeichen waren eine kaputte Tastatur, oder?
https://de.wikipedia.org/wiki/Programmierschnittstelle
Gruß,
Peter
Wat geht denn hier ab
Application Programming Interface
Gruß jodel32
Zitat von @DaTobsn:
Ok mal eine gaaaanz große Frage, damit ich hier irgendwas verstehe :D
Was ist ein(e) API ??????
Bist du dir gaaaaanz sicher das du Entwickler bist?!Ok mal eine gaaaanz große Frage, damit ich hier irgendwas verstehe :D
Was ist ein(e) API ??????
Application Programming Interface
Gruß jodel32
D.h. eine API ist sozusagen das, was das Programm raus gibt, oder ?
Nein, das ist das, was einem Programm(ierer) als Schnittstelle zur Verfügung gestellt wird. In diesem Fall: Die Daten liegen irgendwo in einer Serverdatenbank, auf die du keinen direkten Zugriff hast. Aber es wird dir eine Programmierschnittstelle zur Verfügung gestellt, mit der du Daten abfragen kannst. Das Ergebnis diese Abfrage ist hier ein XML oder wahlweise ein JSON Code, mit festgelegtem, immer gleichem Aufbau. Das heißt, mit entsprechenden Mitteln, die dir eine Script- oder Programmiersprache bietet (oder im Fall von Batch nicht bietet, darum muss man eine andere Sprache bemühen), kann man diese Daten verarbeiten und kommt an die entsprechenden Werte.Wikipedia zum Thema (wobei ... hatte Peter ja bereits verlinkt ... )
Aber ein "Interface" ist doch eben genau das mit den Grafiken und Buttons!
Nein.Grüße
rubberman
Andere Sprache ist zum Beispiel C, C++, QBasic, VB, Java
... oder JScript oder VBScript oder Powershell ...Hier der Inhalt der Datei parseforecast.vbs im Texteditor
Und hier, wie man im Forum Code postet:FAQ
vlt(bzw. wahrscheinlich) checkst du es ja
Was ich checke ist, dass auf Dateien zugegriffen werden soll, die bereits auf deinem Rechner liegen müssten, damit da was passieren kann. Wie die Dateien erzeugt werden (vermutlich durch einen anderen Code, der auf das Internet zugreift) ist nicht ersichtlich und ohne zu wissen, wie die Dateien erzeugt werden und was deren genauer Inhalt ist - keine Ahnung ...Grüße
rubberman
Hallo colinardo,
danke für dein Script!
Ich schreibe den Output in eine TXT und füge diese dann per Batch in eine andere Datei ein (dass das Wetter am Ende steht). Funktioniert soweit wunderbar nur werde ich bei jedem Aufruf gefragt, ob ich Cookies annehmen will.
Wenn keine Auswahl getroffen wird, steht das Script still.
Ist es in Poweshell möglich, Cookieanfragen für die Ausführung zu deaktivieren oder zuzulassen, ohne dass eine manuelle Auswahl jedes mal getroffen werden muss?
Oder soll ich dies einfach in den Interneteinstellungen von IE machen?
Danke und Gruß,
Georg
danke für dein Script!
Ich schreibe den Output in eine TXT und füge diese dann per Batch in eine andere Datei ein (dass das Wetter am Ende steht). Funktioniert soweit wunderbar nur werde ich bei jedem Aufruf gefragt, ob ich Cookies annehmen will.
Wenn keine Auswahl getroffen wird, steht das Script still.
Ist es in Poweshell möglich, Cookieanfragen für die Ausführung zu deaktivieren oder zuzulassen, ohne dass eine manuelle Auswahl jedes mal getroffen werden muss?
Oder soll ich dies einfach in den Interneteinstellungen von IE machen?
@echo off
chcp 1252 > nul
powershell -Executionpolicy ByPass -Command "((iwr -uri 'https://www.wetter.de/deutschland/wetter-steinbach-18227228.html').AllElements | ?{$_.class $webresponse.Headers.Add("Cookie", $CookieContainer.GetCookieHeader($url)) -eq 'row-weather- report'}).innerText" >wetter.txt
Danke und Gruß,
Georg
Servus Georg
Wenn du stattdessen wie oben ebenfalls gezeigt den System.Net.WebClient nutzt oder es mit einem HttpWebRequest-Object machst lassen sich Cookies natürlich auch ignorieren, du musst dazu auch nichts im Code anpassen, denn der Client läd hier per Default nur die reine Datenseite runter.
Invoke-WebRequest hat da bei manchen Seiten die komische Angewohnheit Dialoge des IE anzuzeigen obwohl der Befehl ja eigentlich nur für die reine Kommandozeile gedacht ist, hier hat MS wohl nur einen Wrapper über das IE-COMObject gelegt und das unvollständig bzw. teilweise verbuggt, aber das kennt man ja inzwischen .
Grüße Uwe
Ist es in Poweshell möglich, Cookieanfragen für die Ausführung zu deaktivieren oder zuzulassen, ohne dass eine manuelle Auswahl jedes mal getroffen werden muss?
Invoke-WebRequest (iwr) arbeitet intern mit dem IE, wenn du diesen nutzt muss also das Profil entsprechend angepasst sein das Cookies angenommen werden.Wenn du stattdessen wie oben ebenfalls gezeigt den System.Net.WebClient nutzt oder es mit einem HttpWebRequest-Object machst lassen sich Cookies natürlich auch ignorieren, du musst dazu auch nichts im Code anpassen, denn der Client läd hier per Default nur die reine Datenseite runter.
Invoke-WebRequest hat da bei manchen Seiten die komische Angewohnheit Dialoge des IE anzuzeigen obwohl der Befehl ja eigentlich nur für die reine Kommandozeile gedacht ist, hier hat MS wohl nur einen Wrapper über das IE-COMObject gelegt und das unvollständig bzw. teilweise verbuggt, aber das kennt man ja inzwischen .
Grüße Uwe
@echo off
chcp 1252 > nul
powershell -Executionpolicy ByPass -NoProfile -Command "$dom = New-Object -Com htmlfile;$client = New-Object System.Net.WebClient;$client.Encoding = [System.Text.Encoding]::UTF8;$dom.IHTMLDocument2_write([regex]::Match($client.DownloadString('https://www.wetter.de/deutschland/wetter-steinbach-18227228.html'),'(?is)<div class=\"row-weather-report\">(.*?)(?=</div>)').Groups[1].Value);$dom.documentElement.innerText" >Wetter.txt