Jak pobierać na bieżąco dane pogodowe (temp, wiatr itd.) dla danego miasta z jakiejkolwiek strony z pogodą np. wp.pl onet.pl czy interia.pl, albo specjalistycznych?
Próbowałem zrobić to w ten sposób, że po ściągnięciu strony w Indy IDhttp.get(url) próbowałem odczytać te dane, ale nie ma ich bezpośrednio w ściągniętym stringu. Interesują mnie dane tylko dla jednego miasta.
Wykorzystaj API. Poleciłbym prognozę z Uniwersytetu Warszawskiego https://api.meteo.pl/, ale jak widzisz, jest to płatna usługa. Możesz spróbować norweską prognozę, ale zalecam zapoznać się z polityką prywatności. Generalnie szukaj na stronach instytutów meteorologicznych (Czechy, Niemcy) udostępnianych API. Na stronach informacyjnych zwykle udostępniane są aplikacje na telefon lub widgety.
Skorzystaj z jakiegoś api, które zwraca wynik jako JSON, np. OpenWeatherMap lub z listy: https://4programmers.net/Forum/960780
Skorzystałem z OpenWeatherMap. Podaje wynik w pliku json. Korzystam z uLkJSON. Odczytuję te dane bez problemu, poza jednym:
{"coord":{"lon":17.57,"lat":52.33},"weather":[{"id":600,"main":"Snow","description":"light snow","icon":"13n"},{"id":701,"main":"Mist","description":"mist","icon":"50n"}],"base":"stations","main":{"temp":273.15,"pressure":1015,"humidity":98,"temp_min":273.15,"temp_max":273.15},"visibility":3800,"wind":{"speed":3.6,"deg":320},"clouds":{"all":90},"dt":1549227600,"sys":{"type":1,"id":1710,"message":0.0042,"country":"PL","sunrise":1549175200,"sunset":1549208473},"id":3081324,"name":"Wrzesnia","cod":200}
Odczyt temperatury z 'main':
memo1.Text:=IdHTTP1.Get('http://api.openweathermap.org/data/2.5/weather?q=Wrzesnia&appid=96fef4104f778bca7308fc30ac501e63') ;
sJSON :=memo1.Text;
js := TlkJSON.ParseText(sJSON);
temp:=js.Field['main'];
s2:=temp.Field['temp'].value;
Natomiast mam problem z odczytem wartości z 'weather' jako że jest tam znacznik [.
Jak odczytać 'main' i 'description' z 'weather'?
To jest tablica coś w stylu:
temp:=js.Field['weather'];
for i:= 0 to Pred(temp.Count) do
begin
temp2:= temp.Child[i];
s1:= temp2.Field['main'].Value;
s2:= temp2.Field['description'].Value;
ShowMessage(s1 + ' ' + s2);
end;
Tylko nie wiem czemu nie używasz standardowych obiektów Delphi do obsługi JSON.
Powyższy kod jest prawidłowy. Dziękuję.
Jeszcze jedno... Czy istnieje jakieś api, lub biblioteka dla delphi, które dawałoby możliwość odczytu faz księżyca dla danego dnia w roku?
Pytanie zbędne. Oblicza się to wg. odpowiedniego algorytmu.
Przy czym zwykle takie algorytmy działają dla kilku najbliższych dekad.
To jest bardzo smutna wiadomość dla @Romlus, bo oznacza, że w okolicach 2059 będzie musiał poprawić zastosowaną metodę obliczeń ;)
W związku z tematem, czy są jakieś darmowe api pogodowe udostępniające dane o czasie wschodu i zachodu księżyca?
Rzuć okiem na https://sunrise-sunset.org/api - powinieneś dać radę :)
ale tam są dane dotyczące słońca, nie ma nic związanego z księżycem.
Poprawka - zapomniałem, że chodzi Ci o księżyc, a nie o słońce.
W takim razie co powiesz na https://www.worldweatheronline.com/developer/api/astronomy-api.aspx? Wprawdzie jest to usługa płatna, ale jeśli jest Ci to potrzebne na własny użytek, to masz też możliwość skorzystania z pakietu darmowego.
Thanks, jest wersja free i to całkiem - całkiem bez poważnych ograniczeń.