Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [class] Pogoda, PHP5
woj_tas
post
Post #1





Grupa: Zarejestrowani
Postów: 230
Pomógł: 36
Dołączył: 31.03.2006
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


Klasa pobiera aktualną pogodę z serwisu http://weather.yahoo.com/

  1. <?php
  2. class pogoda{
  3. private $parametry = array();
  4. private $wartosci = array();
  5. private $channel = '';
  6.  
  7. function __construct($miasto){
  8. $wartosci__ = array('item/yweather:condition', 'yweather:wind', 'yweather:atmosphere', 'yweather:astronomy'); 
  9.  
  10. $this -> channel = $channel = simplexml_load_file($miasto);
  11. $this -> pobierz_parametry();
  12.  
  13. $this -> pobierz_wartosci($wartosci__);
  14. $this -> pobierz_url_obrazka();
  15. }
  16.  
  17. private function pobierz_parametry(){
  18. $this -> parametry = $this -> pobierz_('yweather:units');
  19. } 
  20.  
  21. private function pobierz_($param){
  22. $tmp = array();
  23. $wind = $this->channel -> xpath('//channel/'.$param);
  24.  
  25. foreach ($wind as $k => $v){
  26. foreach($v -> attributes() as $k => $v){
  27. $tmp[$k] = (string)$v;
  28. }
  29. }
  30. return $tmp;  
  31. } 
  32. public function parametry(){
  33. return (array)$this->parametry;
  34. }
  35.  
  36. public function wartosci(){
  37. return (array)$this->wartosci;
  38. }
  39.  
  40. private function pobierz_wartosci($w){
  41. if(is_array($w)){
  42. foreach($w as $w_){
  43. $this -> polacz($this -> pobierz_($w_));
  44. }
  45. return true;
  46. }else{
  47. return false;
  48. }
  49. }
  50.  
  51. private function polacz($param){
  52. foreach($param as $p => $v){
  53. $this -> wartosci[$p] = $v;
  54. }
  55.  
  56. }
  57.  
  58. private function pobierz_url_obrazka(){
  59. $this -> wartosci['url'] = 'http://l.yimg.com/us.yimg.com/i/us/we/52/'.$this -> wartosci['code'].'.gif';
  60. }
  61. }
  62. ?>


Obiekt klasy (przyklad dla Zielonej Góry):

  1. <?php
  2. $pogoda = new pogoda('http://xml.weather.yahoo.com/forecastrss?p=PLXX0043&u=c');
  3. $parametry = array();
  4. $parametry = $pogoda -> parametry();
  5.  
  6. $wartosci = array();
  7. $wartosci = $pogoda -> wartosci();
  8. ?>


Wynik:

Kod
Array
(
    [temperature] => C
    [distance] => km
    [pressure] => mb
    [speed] => kph
)
Array
(
    [text] => Clear
    [code] => 31
    [temp] => 14
    [date] => Mon, 16 Apr 2007 11:00 pm CEST
    [chill] => 14
    [direction] => 160
    [speed] => 11
    [humidity] => 40
    [visibility] => 32000
    [pressure] => 1020
    [rising] => 2
    [sunrise] => 6:00 am
    [sunset] => 7:56 pm
    [url] => http://l.yimg.com/us.yimg.com/i/us/we/52/31.gif
)



Klasa wyłącznie pod PHP5

Pozdrawiam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
devnul
post
Post #2





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

Ostrzeżenie: (0%)
-----


uwaga - marudze: niekomentowany kod, dziwne nazewnictwo funkcji "pobierz_" (?) brak informacji o tym jak pobrać pogode dla konkretnego miejsca - gdzie znaleźć info o tym jakie kody dla jakich miast

a poza tym nieźle (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
fiszol
post
Post #3





Grupa: Zarejestrowani
Postów: 453
Pomógł: 16
Dołączył: 25.05.2004
Skąd: Gorzów Wlkp.

Ostrzeżenie: (0%)
-----


Cytat(devnul @ 17.04.2007, 03:22:05 ) *
uwaga - marudze: niekomentowany kod, dziwne nazewnictwo funkcji "pobierz_" (?) brak informacji o tym jak pobrać pogode dla konkretnego miejsca - gdzie znaleźć info o tym jakie kody dla jakich miast

a poza tym nieźle (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

przepraszam za offtopic ale nie mogę się powstrzymać

Avatar autora powyżeszj wypowiedzi doskonale pasuje do tonu posta ;]


---
To nastepnym razem się powstrzymaj.
Bo wielki Brat patrzy i liczy nabite posty.
~mike-mech
Go to the top of the page
+Quote Post
mike
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


Cytat(devnul @ 17.04.2007, 01:22:05 ) *
gdzie znaleźć info o tym jakie kody dla jakich miast
Cytat(woj_tas @ 16.04.2007, 23:46:14 ) *
Klasa pobiera aktualną pogodę z serwisu http://weather.yahoo.com/

Skorzystaj z wyszukiwarki i zerknij na URL'a.
Go to the top of the page
+Quote Post
devnul
post
Post #5





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

Ostrzeżenie: (0%)
-----


Cytat(mike_mech @ 17.04.2007, 23:52:30 ) *
Skorzystaj z wyszukiwarki i zerknij na URL'a.

oj wiem, wiem, ale to nie zmienia faktu że klasa słabo udokumentowana jak na gotowca
Go to the top of the page
+Quote Post
Wujashek
post
Post #6





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 12.02.2007

Ostrzeżenie: (0%)
-----


Powstaję tylko jedno pytanie, jak yahoo traktuje wykorzystanie ich grafiki/danych na innych stronach www ?
Wiem że onet i wp nie wyrażają zgody i są wielce obrażeni...
Go to the top of the page
+Quote Post
woj_tas
post
Post #7





Grupa: Zarejestrowani
Postów: 230
Pomógł: 36
Dołączył: 31.03.2006
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


http://developer.yahoo.com/weather/
Go to the top of the page
+Quote Post
revyag
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 2 258
Pomógł: 16
Dołączył: 21.09.2004
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Odświeżam temat.

Potrzebowałem ostatnio właśnie skrypciku do pobierania pogody ale miałem zablokowane na serwerze url file access disabled, wrzucam kod który jest niezależny od tego. Taka radosna rąbanka (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Umieszczam tutaj bo też yahoo.
  1. <?php
  2. class weather {
  3.  
  4. private $params = array();
  5. private $file;
  6. private $xml;
  7. private $unit;
  8.  
  9. private $info = array(
  10. 'title'=>'title',
  11. 'units'=>'yweather:units',
  12. 'wind'=>'yweather:wind',
  13. 'atmosphere'=>'yweather:atmosphere',
  14. 'astronomy'=>'yweather:astronomy',
  15. 'conditions'=>'item/yweather:condition',
  16. 'time'=>'item/title',
  17. 'forecast'=>'item/yweather:forecast'
  18. );
  19.  
  20. private $values = array();
  21.  
  22. public function __construct() {
  23. }
  24.  
  25. public function set__($var,$val) {
  26. $this->{$var} = $val;
  27. }
  28. public function get__($var) {
  29. return $this->{$var};
  30. }
  31.  
  32. /**
  33. Ponbranie i przeróbka pliku, uniezależnia od url file access disabled
  34. */
  35. public function get_xml() {
  36. $f = @fsockopen('xml.weather.yahoo.com', 80, $errno,$errstr,30);
  37. $output = array();
  38. if($f) {
  39. $dane = '';
  40. $out = "GET /forecastrss?p=$this->city&u=$this->unit HTTP/1.1r\n";
  41. $out .= "Host: $this->linkr\n";
  42. $out .= "Connection: Closer\nr\n";
  43. fwrite($f,$out);
  44. while(!feof($f)) {
  45. $dane .= fgets($f,128);
  46. }
  47. fclose($f);
  48. }
  49. //pozbycie się nagłówków HTTP z odpwiedzi serwera 
  50. preg_match('#<?xml(.*)</rss>#is',$dane,$output);
  51. $this->file = $output[0];
  52. }
  53.  
  54. public function set_params() {
  55. $this->xml = simplexml_load_string($this->file);
  56. foreach($this->info as $key=>$val) {
  57. $this->params[$key] = $this->xml->xpath('//channel/'.$val);
  58. }
  59. }
  60.  
  61. public function set_values() {
  62. foreach($this->params as $key=>$val) {
  63. if($key != 'forecast') {
  64. if(array_key_exists('@attributes',$val[0])) {
  65. foreach($val[0]->attributes() as $bkey=>$bval) {
  66. $this->values[$key][$bkey] = (string)$bval;
  67. }
  68. } else {
  69. $this->values[$key] = (string)$val[0];
  70. }
  71. }
  72. }
  73. $this->set_forecast();
  74. }
  75.  
  76.  
  77. /**
  78. Pogoda na pozniejsze godziny aktualnego dnia i na nastepny dziens
  79. */
  80. private function set_forecast() {
  81. foreach($this->params['forecast'][0]->attributes() as $key=>$val) {
  82. $this->values['forecast']['today'][$key] = (string)$val;
  83. }
  84. foreach($this->params['forecast'][1]->attributes() as $key=>$val) {
  85. $this->values['forecast']['tomorrow'][$key] = (string)$val;
  86. }
  87. }
  88. }
  89. ?>


Przykład:
  1. <?php
  2. require_once("cnf/class.weather.php");
  3. $weather = new weather();
  4.  
  5. /**
  6. system metryczny 
  7. **/
  8. $weather->set__('unit','c');  
  9.  
  10. /**
  11. Kody miast
  12. weather.yahoo.com/Poland/PLXX/regional.html
  13. **/
  14. $weather->set__('city','PLXX0011');
  15.  
  16. $weather->get_xml();
  17. $weather->set_params();
  18. $weather->set_values();
  19.  
  20. $weather = $weather->get__('values');
  21.  
  22. //przykład
  23. echo $weather['title'],'<br />';
  24. echo 'Temperatura: ', $weather['conditions']['temp'],'°', $weather['units']['temperature'],'<br /> ';
  25. echo 'Wiatr: ',$weather['wind']['speed'],' ',$weather['units']['speed'],'<br />';
  26. echo 'Ciśnienie:', $weather['atmosphere']['pressure'], ' ', $weather['units']['pressure'];
  27. ?>


Ten post edytował revyag 4.09.2008, 10:20:24
Go to the top of the page
+Quote Post
roobik
post
Post #9





Grupa: Zarejestrowani
Postów: 410
Pomógł: 5
Dołączył: 25.01.2005
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Witam!
Szukając dobrego (czyt.: działającego) skryptu pogodowego, natknąłem się własnie na powyższy. Niestety, coś jest "nie ok"...
Cytat
Fatal error: Call to a member function xpath() on a non-object in /home/arte/public_html/class.weather.php on line 57

Linia 57:
  1. <?php
  2. $this->params[$key] = $this->xml->xpath('//channel/'.$val);
  3. ?>

(IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Bardzo proszę o pomoc...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.10.2025 - 13:21