Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [class] Pogoda
Forum PHP.pl > Forum > Gotowe rozwiązania > Algorytmy, klasy, funkcje
woj_tas
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 smile.gif
devnul
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 tongue.gif
fiszol
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 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
mike
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.
devnul
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
Wujashek
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...
woj_tas
http://developer.yahoo.com/weather/
revyag
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 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. ?>
roobik
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. ?>

sad.gif Bardzo proszę o pomoc...
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.