Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Pogoda w ONET.PL
Forum PHP.pl > Forum > Przedszkole
remiq26
Na stronie www.onet.pl jest tak w kodzie źródłowym

  1. <?php
  2. <script
  3. language=JavaScript><!--
  4. function Pogoda(tmax,tmin,cisn,img,nazwa){this.tmax=tmax;this.tmin=tmin;this.cisn=cisn;this.img=img;this.nazwa=nazwa;}
  5. PogodaArr=new Array(21);PogodaArr[1633]=new Pogoda("29","21","997","2","Białystok");
  6. PogodaArr[1658]=new Pogoda("31","22","1006","2","Bydgoszcz");
  7. PogodaArr[1135]=new Pogoda("26","20","1009","2","Gdańsk");
  8. PogodaArr[55]=new Pogoda("33","22","1009","2","Gorzów Wlkp.");
  9. PogodaArr[1666]=new Pogoda("33","24","981","4","Katowice");
  10. PogodaArr[1667]=new Pogoda("32","22","983","11","Kielce");
  11. PogodaArr[1654]=new Pogoda("31","22","1011","2","Koszalin");
  12. PogodaArr[1197]=new Pogoda("34","23","1009","2","Kraków");
  13. PogodaArr[1673]=new Pogoda("32","23","996","2","Łódź");
  14. PogodaArr[1233]=new Pogoda("31","23","993","2","Lublin");
  15. PogodaArr[1675]=new Pogoda("29","21","999","2","Olsztyn");
  16. PogodaArr[1676]=new Pogoda("35","26","994","4","Opole");
  17. PogodaArr[1322]=new Pogoda("34","23","1007","2","Poznań");
  18. PogodaArr[1683]=new Pogoda("32","21","989","10","Rzeszów");
  19. PogodaArr[1570]=new Pogoda("28","20","996","2","Suwałki");
  20. PogodaArr[1530]=new Pogoda("31","21","1013","2","Szczecin");
  21. PogodaArr[1690]=new Pogoda("31","22","1007","2","Toruń");
  22. PogodaArr[1424]=new Pogoda("31","22","1004","2","Warszawa");
  23. PogodaArr[1693]=new Pogoda("35","26","1001","2","Wrocław");
  24. PogodaArr[1572]=new Pogoda("27","20","908","11","Zakopane");
  25. PogodaArr[1695]=new Pogoda("34","23","1004","2","Zielona Góra");
  26.  
  27. // End --></script>
  28. ?>


Który plik muszę włożyć (includowac) z onetu aby pogoda byla na mojej stronie chodzi mi tylko o te małą warstę która pokazuje stan dla danego miasta nie wiem który plik *.js mam dołozyc grzebalem w kodzie i sie nie doszykałem moze ktos ma cos takiego prosz eo odpowiedź
tiraeth
Sorry ale to jest sztywne wywołanie pogody (ten kod javascript jest wygenerowany przez php) smile.gif Bez php się chyba nie da wyświetlić pogody z onet.pl
hwao
Mozesz sobie napisac "serwer w php" pobierajacy dane z onetu i umozliwiajacy pobieranie pogody przez js
Fixer
Potraktujcie ten mój post jako artykuł cool.gif

Da się wyciągnąć dane z www.pogoda.onet.pl (oraz z każdego innego serwisu nie koniecznie pogodowego) bez użycia linijki kodu w php/js
Mianowicie potrzebujesz programu, który wczyta plik html pobrany i zapisany wcześniej na dysku twardym, następnie za pomocą wyrażeń regularnych powycina istotne dla Ciebie dane i wstawi je do pliku TXT w formacie np.: miasto|data|temperatura|...|....
Potem tak "wyłuskane" dane w pliku TXT możesz zaimportować do Excela lub do Accessa po to by je tam przeglądać.

Potrzebne programy:
1. Automatyzacja pobierania witryn www na hdd
-Offline Explorer www.metaproducts.com

2. Wyłuskiwanie informacji z kodu HTML
-TextPipe www.datamystic.com

Jak już mówiłem użycie tego programu zwalnia nas od znajomości programowania ale nie zwalnia nas od znajomości wyrażeń regularnych (regular expression).
Tutoriale o reg. exp.: link 1 | link 2
a z tąd możecie zassać program do potestowania sobie wyrażeń

Dla przykładu możesz użyć teraz narzędzia TextPipe i filtra o nazwie "Perl pattern" wpisując do "Find pattern" (musi być w jednj linii bez znaków końca linii, frazy "początek" oraz "koniec" usuwamy oczywiście):

=============== [początek]
<SPAN class=a32>(.*) .*<DIV style="float:right;" class="a2b">(.*)</DIV></DIV><DIV class="a1 sz fr pt2">.*Teraz\s</SPAN><SPAN class="ar2 gold">(\d{2}-\d{2})</SPAN>.*<IMG src="_d/ico/([a-z]\d{2}\.gif)" alt="" align=absbottom>.*title="Temperatura">(\d{1,2})</B>.*<TD class="a1b pl2 pb2" nowrap>(\d{3,4})\shPa.*<IMG src="_d/ico/(rw\d\.gif)" align="absmiddle">(\d{1,3})\skm/h.*Śnieg:</TD><TD class="a1b pl2 pb2">(\d{1,2}\.\d{1,2})\smm.*Deszcz:</TD><TD class="a1b pl2 pb2">(\d{1,2}\.\d{1,2})\smm.*Wkrótce\s</SPAN><SPAN class="ar2 gold">(\d{2}-\d{2})</SPAN>.*<IMG src="_d/ico/([a-z]\d{2}\.gif)" alt="" align=absbottom>.*title="Temperatura">(\d{1,2})</B>.*<TD class="a1b pl2 pb2" nowrap>(\d{3,4})\shPa.*<IMG src="_d/ico/(rw\d\.gif)" align="absmiddle">(\d{1,3})\skm/h.*Śnieg:</TD><TD class="a1b pl2 pb2">(\d{1,2}\.\d{1,2})\smm.*Deszcz:</TD><TD class="a1b pl2 pb2">(\d{1,2}\.\d{1,2})\smm
=============== [koniec]

A w "Replace with" wpisujesz:
  1. $1|$2|$3|$4|$5|$6|$7|$8|$9|$A\r\n$1|$2|$B|$C|$D|$E|$F|$G|$H|$I\r\n

W pliku import.TXT uzyskasz takie coś:
  1. Miasto|Data|Godzina|Chmurka|°C|hPa|Kierunek wiatru|Wiatr|Śneg|Deszcz
  2. Bydgoszcz|Sobota, 21 lipca 2007|02-08|b01.gif|17|1015|rw6.gif|8|0.0|0.2
  3. Bydgoszcz|Sobota, 21 lipca 2007|08-14|b03.gif|22|1015|rw7.gif|4|0.0|0.5

Tym sposobem wyłuskaliśmy miasto, datę oraz wszystko to co znajduje się w "Prognoza szczegółowa" dla "Teraz" i "Wkrótce" biggrin.gif

3. Access lub Excel do zaimportowania tych danych i ich dalszej prezentacjii

Teraz możesz zaautomatyzować cały ten proces pobierania, wyłuskiwania i zapisu danych przy pomocy windowsowego kiedyś "harmonogramu zadań" a dziś Narzędzia systemowe > "zaplanowane zadania" chociaż ja polecał bym coś bardziej zaawansowanego jak np. VisualCron http://www.visualcron.com/ lub Advanced Task Scheduler http://www.southsoftware.com/ lub po prostu sławny CRON dla systemów z rodziny Linux.

Jak masz dobrą płytę główną (overlockerską) to zapewne w opcjach znajdziesz coś takiego jak: "WakeON (LAN/Alarm/Password/Key/)". Mianowicie ustawiasz kompa na jakąś konkretną godzinę by ten się sam włączył, pobrał co trzeba i sam się wyłączył smile.gif

Zastanówmy się, kiedy należałoby pobierać wyniki ze stronki na dysk twardy (pogrubioną czcionką zaznaczyłem godziny aktualizacji pogody na serwerze onetu, dodajcie może do tego czasu kilka minut by dać serwerowi czas na spokojne wprowadzenie zmian):
02-08 08-14 || 00:00 zapis na hdd
08-14 14-20 || 06.00 <- nie interesuje nas ten przedział!
14-20 20-02 || 12:00 zapis na hdd
20-02 02-08 || 18.00 <- nie interesuje nas ten przedział!

Czyli pobieramy na dysk tylko te pliki html w których pisze:
Teraz: 02-08 Wkrótce: 08-14
oraz
Teraz: 14-20 Wkrótce: 20-02

A w ubiegłym roku był taki podział: (może to okres zimowy czy coś w tym stylu...)
01-07
07-13
13-19
19-01

Na samym końcu możesz archiwizować pliki HTML do archiwum RAR w postaci: "DD-MM-YYYY-HH-MM.rar" przy pomocy BATCH:
Kod
@ECHO OFF
SET SCIEZKA=                "C:\Program Files\WinRAR\rar.exe"
SET PARAMETRY=                a -s -r -x*.WD3 -m5 -mc10:40t+ -agDD-MM-YYYY-HH-MM
SET SCIEZKA_ARCHIWUM=        "C:\download"
SET NAZWA_ARCHIWUM=            "pogoda_"
SET PLIKI=                    "C:\download\pogoda.onet.pl\*.html"
%SCIEZKA% %PARAMETRY% %SCIEZKA_ARCHIWUM%\%NAZWA_ARCHIWUM% %PLIKI%
DEL %PLIKI%

Wystarczy tylko ewentualnie poprawić ścieżki i zapisać to do pliku *.bat lub *.cmd i odpalać o wybranych godzinach smile.gif
----
PS. soryy że takie przydługawe ale to w końcu dla tych "ułomnych" eee chciałem powiedzieć dla "potomnych" oczywiście smile.gif
zeppastian
@fixer

cholernie ciekawe co piszesz fixer, trzeba jeszcze ustawic (np. w CRONIE) by skrypt wykonywal sie raz dziennie tuz po apdejcie pogody na onecie?
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.