Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Odwołanie do tablicy z pogodą
Forum PHP.pl > Forum > Przedszkole
tomi1985
Hej,

Mam taką o to tablicę ale zabardzo nie wiem jak się do niej odwołać aby np. pobrać dane z dziś

  1. $url = 'http://pogoda.wp.pl/weathertopapp.json?a=0&cid=43289';
  2. $wynik = file_get_contents($url, 0);
  3.  
  4.  
  5. var_dump($wynik);


  1. string(15388) "{"cid":43289,"nazwa":"Krak\u00f3w","ostrzezenie":"","prognoza":[{"data":"20160313","nakiedyopis":"dzisiaj","temp":3,"tempodczuwalna":-1,"tempmax":6,"tempmin":1,"stanobraz":"http:\/\/a.wpimg.pl\/a\/i\/pogoda2012\/bg\/noc_pochmurnie.jpg","stanobrazmobile":"noc_pochmurnie","stanopis":"ca\u0142kowite zachmurzenie","stansredni":"malydeszcz","stansredninoc":"noczachmurzenie","wschodslonca":"05:56","zachodslonca":"17:42","fazaksiezyca":"Wzrastaj\u0105cy Sierp","fazaksiezycaobraz":"wS","dzienkrotszy":"kr\u00f3tszy od najd\u0142u\u017cszego o 4 godz. 36 min.","suwaketykieta":["","jutro"],"suwakklasa":["l2 cl","l6"],"zakres":[{"godziny":"19:00 - 22:00","stanpogodyobraz":"zachmurzenie","temp":3,"tempodczuwalna":-1,"wiatrkierunek":"p\u00f3\u0142-wsch.","watrpredkosc":18,"watrporyw":22,"cisnienie":1032,"cisnienietrendobraz":""},{"godziny":"22:00 - 01:00","stanpogodyobraz":"noczachmurzenie","temp":1,"tempodczuwalna":-3,"wiatrkierunek":"wchodni","watrpredkosc":14,"watrporyw":25,"cisnienie":1032,"cisnienietrendobraz":""},{"godziny":"01:00 - 04:00","stanpogodyobraz":"ksiezyc","temp":0,"tempodczuwalna":-4,"wiatrkierunek":"wchodni","watrpredkosc":11,"watrporyw":18,"cisnienie":1032,"cisnienietrendobraz":"up"},{"godziny":"04:00 - 07:00","stanpogodyobraz":"noczachmurzeniemale","temp":1,"tempodczuwalna":-2,"wiatrkierunek":"p\u00f3\u0142-wsch.","watrpredkosc":11,"watrporyw":18,"cisnienie":1033,"cisnienietrendobraz":"dwn"},{"godziny":"07:00 - 10:00","stanpogodyobraz":"sloncezachmurzenieduze","temp":2,"tempodczuwalna":-1,"wiatrkierunek":"p\u00f3\u0142-wsch.","watrpredkosc":11,"watrporyw":14,"cisnienie":1032,"cisnienietrendobraz":"dwn"},{"godziny":"10:00 - 13:00","stanpogodyobraz":"sloncezachmurzenieduze","temp":5,"tempodczuwalna":3,"wiatrkierunek":"p\u00f3\u0142-wsch.","watrpredkosc":7,"watrporyw":11,"cisnienie":1030,"cisnienietrendobraz":"dwn"},{"godziny":"13:00 - 16:00","stanpogodyobraz":"sloncezachmurzenie","temp":6,"tempodczuwalna":5,"wiatrkierunek":"p\u00f3\u0142nocny","watrpredkosc":7,"watrporyw":14,"cisnienie":1028,"cisnienietrendobraz":"dwn"},{"godziny":"16:00 - 19:00","stanpogodyobraz":"sloncezachmurzenie","temp":4,"tempodczuwalna":2,"wiatrkierunek":"zachodni","watrpredkosc":7,"watrporyw":11,"cisnienie":1027,"cisnienietrendobraz":"dwn"}]},{"data":"20160314","nakiedyopis":"jutro","temp":6,"tempodczuwalna":5,"tempmax":6,"tempmin":0,"stanobraz":"http:\/\/a.wpimg.pl\/a\/i\/pogoda2012....
nospor
To co tu otrzymales to string JSON. uzyj json_decode() by otrzymac z tego tablice w php
rad11
Nie wiem czy dobrze rozumiem , ale zamień sobie jsona na tablice, wcześniej ustaw sobie
  1. $now = date('Ymd');
a potem
  1. $today = $response['prognoza']['data'][$now];
a jak nie to zostaje Ci porównać w pętli.


Sorry jednak musisz raczej przelecieć całą tablice i porównać wartości.

  1. foreach($response['prognoza'] as $key => $value){
  2. if($value['data'] == date('Ymd'){
  3. //dodajesz do jakiej nowej tablicy
  4. }
  5. }
tomi1985
  1. object(stdClass)#1 (9) { ["cid"]=> int(43289) ["nazwa"]=> string(7) "Kraków" ["ostrzezenie"]=> string(0) "" ["prognoza"]=> array(7) { [0]=> object(stdClass)#2 (19) { ["data"]=> string(8) "20160313" ["nakiedyopis"]=> string(7) "dzisiaj" ["temp"]=> int(3) ["tempodczuwalna"]=> int(-1) ["tempmax"]=> int(6) ["tempmin"]=> int(1) ["stanobraz"]=> string(54) "http://a.wpimg.pl/a/i/pogoda2012/bg/noc_pochmurnie.jpg" ["stanobrazmobile"]=> string(14) "noc_pochmurnie" ["stanopis"]=> string(23) "całkowite zachmurzenie" ["stansredni"]=> string(10) "malydeszcz" ["stansredninoc"]=> string(15) "noczachmurzenie" ["wschodslonca"]=> string(5) "05:56" ["zachodslonca"]=> string(5) "17:42" ["fazaksiezyca"]=> string(18) "Wzrastający Sierp" ["fazaksiezycaobraz"]=> string(2) "wS" ["dzienkrotszy"]=> string(44) "krótszy od najdłuşszego o 4 godz. 36 min." ["suwaketykieta"]=> array(2) { [0]=> string(0) "" [1]=> string(5) "jutro" } ["suwakklasa"]=> array(2) { [0]=> string(5) "l2 cl" [1]=> string(2) "l6" } ["zakres"]=> array(8) { [0]=> object(stdClass)#3 (9) { ["godziny"]=> string(13) "19:00 - 22:00" ["stanpogodyobraz"]=> string(12) "zachmurzenie" ["temp"]=> int(3) ["tempodczuwalna"]=> int(-1) ["wiatrkierunek"]=> string(11) "pół-wsch." ["watrpredkosc"]=> int(18) ["watrporyw"]=> int(22) ["cisnienie"]=> int(1032) ["cisnienietrendobraz"]=> string(0) "" } [1]=> object(stdClass)#4 (9) { ["godziny"]=> string(13) "22:00 - 01:00" ["stanpogodyobraz"]=> string(15) "noczachmurzenie" ["temp"]=> int(1) ["tempodczuwalna"]=> int(-3) ["wiatrkierunek"]=> string(7) "wchodni" ["watrpredkosc"]=> int(14) ["watrporyw"]=> int(25) ["cisnienie"]=> int(1032) ["cisnienietrendobraz"]=> string(0) "" } [2]=> object(stdClass)#5 (9) { ["godziny"]=> string(13) "01:00 - 04:00" ["stanpogodyobraz"]=> string(7) "ksiezyc" ["temp"]=> int(0) ["tempodczuwalna"]=> int(-4) ["wiatrkierunek"]=> string(7) "wchodni" ["watrpredkosc"]=> int(11) ["watrporyw"]=> int(18) ["cisnienie"]=> int(1032) ["cisnienietrendobraz"]=> string(2) "up" }


i nadal lipa

  1. wynik = json_decode($wynik);
  2.  
  3. var_dump($wynik);
  4.  
  5.  
  6. echo 'ooooo '.$wynik['prognoza'][0]['data'].' --- ';
  7.  
  8. ?>


I ja nie chce pętli, cche manualnie wybierać dane...
rad11
Bo to są obiekty musisz użyć
  1. $wynik->prognoza[0]->data
jak juz. Jeżeli chcesz aby to były zwykłe klucze to w drugim parametrze funkcji json_decode musisz podać true.
tomi1985
mógłys podać jakiś prosty przykład ?

Nie do końca to rozumiem...;/
rad11
Przykład do czego? Masz oba przykłady i do obiektów i do zwykłych kluczy. :-)?
tomi1985
jak pisałem prośbę to jeszcze nie było Twojego przykaldu wink.gif

tak czy inaczej thx

a wiecie może gdzie znajdę tablicę z wszystkimi miastami w polsce.. chodzi mi o ich odpowiednik kodu....


  1. $url = 'http://pogoda.wp.pl/weathertopapp.json?a=0&cid=43289';


  1. 43289
- to jest Kraków chyba

rad11
Spróbuj ściągnąć csv np stąd a plik csv to już łatwo dodać do swojej bazy danych
tomi1985
43384 - Poznań według pogody na wp.pl

a w tym spisie to kody o 6xx się zaczynają ;/ także to nie to
rad11
Ciężko Ci będzie znaleźć za darmo taka listę wyjściem może być jeszcze znalezienie strony gdzie podajesz kod i wypływa Ci adres tutaj musiał byś użyć curla.
tomi1985
ehhh, to troche kiepsko ;/

nospor
http://pogoda.wp.pl/page,2,miasta.html
I masz liste wszystkich miast
tomi1985
ok,

ale jak mam zrobić abym je mial w tablicy ?wink.gif
nospor
Napisac skrypt, ktory sparsuje te strone i sobie zapiszesz gdzie tylko bedziesz chcial
rad11
Tu masz od czego zacząć resztę możesz dopisać sobie sam:

  1. $data = "";
  2. $data .= file_get_contents("http://pogoda.wp.pl/miasta.html");
  3. $data .= file_get_contents("http://pogoda.wp.pl/page,2,miasta.html");
  4. $data .= file_get_contents("http://pogoda.wp.pl/page,3,miasta.html");
  5. preg_match_all('@<a href="\/cid,(.*?)">(.*?)<\/a>@', $data, $matches);
  6.  
  7. $response = array();
  8. foreach ($matches[1] as $matchesIndex => $matchesValue) {
  9. $explode = explode(",", $matchesValue);
  10.  
  11. $response[$explode[0]]["cid"] = $explode[0];
  12. $response[$explode[0]]["city"] = $explode[2];
  13.  
  14. }
  15. var_dump($response);
tomi1985
Hej,

idealnie... a jakbym chciał dodać do tego jeszcze woj w jednej tablicy ?

Hej,

co jest tu nie tak że nic nei zwraca ;/

  1. preg_match_all('@<a href="\/cid,(.*?)">(.*?)<\/a><a href="\/name,(.*?)">@', $data, $city);
rad11
Zrób var_dump zmiennej explode tam chyba powinno być województwo i utworz sobie taką tablice jaką chcesz
tomi1985
zmienna city zwraca

  1. { [0]=> array(0) { } [1]=> array(0) { } [2]=> array(0) { } [3]=> array(0) { } }
rad11
W moim przykładzie... W twoim nie ma zmiennej explode.....
tomi1985
źródło wygląda tak

  1. <a href="/cid,43473,name,Annopol,index.html">Annopol</a>
  2. <small data-url="/name,lubelskie,woj,3,wojewodztwo.html">woj. lubelskie</small>


skrypt

  1. $data = "";
  2. $data .= file_get_contents("http://pogoda.wp.pl/miasta.html");
  3. $data .= file_get_contents("http://pogoda.wp.pl/page,2,miasta.html");
  4. $data .= file_get_contents("http://pogoda.wp.pl/page,3,miasta.html");
  5.  
  6. preg_match_all('@<a href="\/cid,(.*?)">(.*?)<\/a><small data-url="\/name,(.*?)">@', $data, $city);
  7.  
  8. echo var_dump($city);



wynik:

  1. array(4) { [0]=> array(0) { } [1]=> array(0) { } [2]=> array(0) { } [3]=> array(0) { } }


  1. foreach ($city[1] as $matchesIndex => $matchesValue) {
  2. $explode = explode(",", $matchesValue);
  3.  
  4. $response[$explode[0]]["cid"] = $explode[2];
  5. $response[$explode[0]]["city"] = $explode[0];
  6. $response[$explode[0]]["voi"] = $explode[3];
  7. }
  8. echo var_dump($city);



bez zmian ;/
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.