Sczytywanie danych pogodowych ze strony www

0

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.

1

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.

2

Skorzystaj z jakiegoś api, które zwraca wynik jako JSON, np. OpenWeatherMap lub z listy: https://4programmers.net/Forum/960780

0

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'?

2

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.

0

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?

0

Pytanie zbędne. Oblicza się to wg. odpowiedniego algorytmu.

2

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ń ;)

0

W związku z tematem, czy są jakieś darmowe api pogodowe udostępniające dane o czasie wschodu i zachodu księżyca?

1

Rzuć okiem na https://sunrise-sunset.org/api - powinieneś dać radę :)

0

ale tam są dane dotyczące słońca, nie ma nic związanego z księżycem.

1

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.

0

Thanks, jest wersja free i to całkiem - całkiem bez poważnych ograniczeń.

1 użytkowników online, w tym zalogowanych: 0, gości: 1