+ Ответить в теме
Показано с 1 по 3 из 3

Тема: парсер погоды с gismeteo

  1. #1
    Юзер aleshqa-1 кто это?
    Регистрация
    13.05.2009
    Сообщений
    119
    Поблагодарил(а)
    9
    Получено благодарностей: 21 (сообщений: 16).

    По умолчанию парсер погоды с gismeteo

    есть у кого-нибудь в наличии парсер погоды с гисметео на неделю, чтобы погода отображалась на день и ночь?
    Последний раз редактировалось aleshqa-1; 28.03.2011 в 00:36.

  2. #2
    Джедай nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь
    Регистрация
    22.01.2005
    Сообщений
    3,753
    Поблагодарил(а)
    419
    Получено благодарностей: 1,257 (сообщений: 528).

    По умолчанию

    Писал давно, формат страницы мог частично измениться, не проверял. Данный скрипт лежит в основе http://vbratske.ru/weather/

    PHP код:
    <?php

    /**
     * @author nons@studio38.ru
     * 
     * парсер погоды с сайта Гисметео
     * 
     */

    //массив с данными по времени суток
    $hour = array("night""morning""day""evening");

    //адрес страницы с погодой
    $url 'http://www.gismeteo.ru/city/weekly/4746/'

    //чистим таблицу с погодой
    mysql_query("TRUNCATE TABLE `".$prefix."weather_forecast`");

    //получаем погоду
    $fp=fopen($url,"r"); 
    if(!
    $fp) exit(0); 

    $content=""
    while(!
    feof($fp)) { $content .= fgets($fp,512); } 
    fclose($fp);     

    //парсим с помощью регулярных выражений
    if(preg_match_all('#<div class="wbfull">(.*?)</div>#s'$content$result_html)){         

        foreach(
    $result_html***91;0***93; as $element){

            
    // удалим мусор, комментарии
            
    $element preg_replace("/<!--.*-->/","",$element);
            
            
    /** Дата **/        
            //Local: 2010-07-09 15:00:00
            //<th title="Прогноз от 2010-07-08 18:00:00, UTC: 2010-07-09 18:00:00, Local: 2010-07-10 3:00:00">
            
             
    if(preg_match_all('/Local: (.*)">/i'$element$result0)){ 
                 
                
    $date $result0***91;1***93;***91;0***93;; $date date("Y-m-d",strtotime($date));            
                        
            }                
            
            
    /** Иконки **/    
            
    $icon_src = array();        
     
            if(
    preg_match_all('/<td class="clicon">.*<\\/td>/i'$element$result1)){           
                if(
    preg_match_all('#<img class="png" src="http://i.gismeteo.com/static/images/icons/new/(.*)" alt="">#i'$element$icon)){    
                  
                    
    //массив с иконками
                    
    for($i 0$i 4$i++){
                        if (isset(
    $icon***91;1***93;***91;$i***93;)) $icon_item $icon***91;1***93;***91;$i***93;; else $icon_item "Нет данных";
                        
                        
    $icon_src***91;***93; = $icon_item;
                        
                        
    //проверяем файл на существование и если нет, то загружаем его
                        //$sitedir = директория сайта
                        
    if (!file_exists($sitedir."/i/weather/".$icon_item)){
                            
                            
    $fileName=$sitedir."/i/weather/".$icon_item;// Имя файла, который будет сохранен на данном сервере
                            
    $host="http://i.gismeteo.com/static/images/icons/new/".$icon_item;//путь к файлу на сервере, с которого происходит закачка               
                            
    $fp=fopen($fileName,"w");
                            
    fclose($fp);
                            
    $ch=curl_init();
                            
    curl_setopt($chCURLOPT_URL$host);
                            
    $fp=fopen($fileName,"w+");
                            
    curl_setopt($chCURLOPT_FILE$fp);
                            
    curl_setopt($chCURLOPT_REFERER$host);
                            
    curl_setopt($chCURLOPT_AUTOREFERER1);
                            
    curl_exec ($ch);
                            
    curl_close ($ch);
                            
    fclose ($fp);
                        }                                                                                    
                    }                                                        
                }                        
            }

            
    /** Облачность **/
            
    $overcast = array();
            if(
    preg_match_all('/<td class="cltext">.*<\\/td>/i'$element$result2)){
                foreach(
    $result2***91;0***93; as $overcast_item){
                    
    $overcast_item strip_tags($overcast_item);
                    
    $overcast***91;***93; = $overcast_item;                                                    
                }
            }
                    
            
    /** Tемпература воздуха, °C **/
            
    $temperature = array();
            if(
    preg_match_all('/<td class="temp">.*<\\/td>/i'$element$result3)){
                foreach(
    $result3***91;0***93; as $temperature_item){
                    
    $temperature_item strip_tags($temperature_item);
                    if (!
    strpos($temperature_item,"°C"))
                        
    $temperature***91;***93; = $temperature_item;                                    
                }
            }
            
            
    /** Атм. давл., мм рт.ст. **/
            
    $pressure = array();
                    
            if(
    preg_match_all('/<td>.*<\\/td>/i'$element$result4)){           
                foreach(
    $result4***91;0***93; as $pressure_item){
                    
    $pressure_item strip_tags($pressure_item); $pressure_item intval($pressure_item);                
                    if (
    strlen($pressure_item) == 3)
                        
    $pressure***91;***93; = $pressure_item;                                    
                }
            }
                    
            
    /** Ветер, м/сек **/
            
    $wind = array();
            
    $wind***91;***93; = ""//пустое значение, ок
            
    $wind_val="";
            
               
                
            if(
    preg_match_all('/<dl class="wind">.*<\\/dl>/i'$element$result5)){             
                   foreach(
    $result5***91;0***93; as $wind_item){
                      
                       if (
    preg_match('/title="(.*)"/i',$wind_item,$wind_direction)){
                           
    $wind_val $wind_direction***91;1***93; . "<br />" preg_replace("/***91;^0-9***93;+/","",strip_tags($wind_item))." м/с";    
                       }
                       if (!empty(
    $wind_val))
                        
    $wind***91;***93; = $wind_val;    
                                    
                }                               
            }
            
            
    /** Влажность воздуха,% **/
            
    $humidity = array();
            if(
    preg_match_all('/<td>.*<\\/td>/i'$element$result6)){
                foreach(
    $result6***91;0***93; as $humidity_item){
                    
    $humidity_item strip_tags($humidity_item);  
                    if (
    strlen($humidity_item) == 2)
                        
    $humidity***91;***93; = $humidity_item;                                    
                }
            }
            
            
    /** Комфорт, °C **/        
            
    $comfort = array();
            if(
    preg_match_all('/<td>.*<\\/td>/i'$element$result7)){
                foreach(
    $result7***91;0***93; as $comfort_item){
                    
    $comfort_item strip_tags($comfort_item);
                    if (
    strpos($comfort_item,"&deg;"))
                        
    $comfort***91;***93; = $comfort_item;                                    
                }
            }
            
            
    //заносим полученные данные в БД    
            
    for ($i 0$i 4$i++){
                
    $sql "INSERT INTO `".$prefix."weather_forecast` (`date`,`hour`,`icon_src`,`overcast`,`temperature`,`pressure`,`wind`,`humidity`,`comfort`,`last_update`) VALUES ('".$date."','".$hour***91;$i***93;."','".$icon_src***91;$i***93;."','".$overcast***91;$i***93;."','".$temperature***91;$i***93;."','".$pressure***91;$i***93;."','".$wind***91;$i+1***93;."','".$humidity***91;$i***93;."','".$comfort***91;$i***93;."', '".date("Y-m-d")."')";            
                
    mysql_query($sql);    
            }            
                                    
        }    
                
    }

    ?>
    Все, в принципе, просто, в нужных местах комментарии, в основе - работа с регулярными выражениями.

    Парсер лох, в циклах странные ***91 взялись. Скрипт в архиве.
    Вложения
    Последний раз редактировалось nons; 28.03.2011 в 14:49. Причина: Добавлено сообщение
    Телевизор — это просто маленькое прозрачное окошко в трубе духовного мусоропровода. © В. Пелевин.

  3. 1 пользователь сказал cпасибо nons за это полезное сообщение:

    aleshqa-1 (28.03.2011)

  4. #3
    Джедай nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь nons Трогаюсь
    Регистрация
    22.01.2005
    Сообщений
    3,753
    Поблагодарил(а)
    419
    Получено благодарностей: 1,257 (сообщений: 528).

    По умолчанию

    вот еще, писал когда-то http://n0ns3ns3.livejournal.com/366742.html
    Телевизор — это просто маленькое прозрачное окошко в трубе духовного мусоропровода. © В. Пелевин.

+ Ответить в теме

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

     

Похожие темы

  1. Прогноз погоды. Не радует.
    от Громозека в разделе Бред'илка
    Ответов: 39
    Последнее сообщение: 07.01.2010, 16:49

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
Рейтинг@Mail.ru
Администрация сайта не выражает согласия
с высказыванием участников форума и не несет
ответственности за их содержание.

Копирование любого материала возможно только
при наличии ссылки на сайт.