Как погоду настроить

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

PAV
Сообщения: 949
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 68 раз
Поблагодарили: 94 раза

Re: Как погоду настроить

Сообщение PAV » Ср дек 11, 2013 12:26 pm

;) Честно, не разбирался. Работает и работает. Мне многое, что непонятно. Я вообще вон по Мажордому списка команд найти не могу, так что все на примерах, на примерах.
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

Re: Как погоду настроить

Сообщение ErmolenkoM » Ср дек 11, 2013 2:35 pm

PAV писал(а):... по Мажордому списка команд найти не могу...
http://smartliving.ru/Main/ProgrammingFunctions
aka msh555
Cubian на Cubietruck, Connect
PAV
Сообщения: 949
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 68 раз
Поблагодарили: 94 раза

Re: Как погоду настроить

Сообщение PAV » Ср дек 11, 2013 4:05 pm

Спасибо большое
kd0t
Сообщения: 67
Зарегистрирован: Пт дек 27, 2013 11:20 pm
Благодарил (а): 5 раз
Поблагодарили: 2 раза

Re: Как погоду настроить

Сообщение kd0t » Чт янв 02, 2014 1:37 pm

Вариант для украинского Sinoptik.ua: сайт поддерживает создание информеров погоды - кнопка "настройте информер и получите код" в нижней части страницы прогноза для вашего города. Жмем на кнопку - в адресной строке получаем http://sinoptik.ua/информеры?id=303012647 , где 303012647 будет у Вас отличаться. В моем примере это id для Кривого Рога. Копируем значение Вашего id. С информера можем вытянуть следующие переменные: температура , влажность, а.давление, скорость ветра. Ссылка для парсинга веб-переменных http://informers.sinoptik.ua/js3.php?ti ... 47&lang=ru, где вместо 303012647 - ставим значение для своего города. Шаблоны поиска: температура - "temp":"(.+?)°" , влажность - "rh":"(.+?)%" , давление - "p":"(.+?) \\u , сила ветра - ws":"(.+?) \\u.
Можно вытянуть еще направление ветра и , теоретически, картинку осадков. Направление ветра - \\u0441, (.+?).","p , результат будет в виде примерно \u044e\u0433\u043e-\u0432\u043e\u0441\u0442\u043e\u0447, вывести на страницу можно таким образом

Код: Выделить всё

<!--
 str1="<p>%ThisComputer.windDirection%</p>";
 document.write(str1);
//-->
Из плюсов - загружаем из сети малый объем данных. Из минусов - все словесные данные в виде ескейп-последовательностей.
PAV
Сообщения: 949
Зарегистрирован: Пт дек 06, 2013 11:30 am
Откуда: Москва
Благодарил (а): 68 раз
Поблагодарили: 94 раза

Re: Как погоду настроить

Сообщение PAV » Пт июн 06, 2014 2:40 pm

Дополнение для проговаривания погоды:

Код: Выделить всё

$status="";
    $status.="Сегодня ".gg("Moscow.Type").".";
    say($status,1);
    
    $status="";
    $w=round(gg("Moscow.Temp"));
    $tempw=$w;
    if($tempw >= 11 and $tempw <= 14){
    $tempcels=" градусов ";
    }
    else{

    while ($tempw > 9){
    $tempw=$tempw-10;
    }
    
    if($tempw == 0 or $tempw >= 5 and $tempw <= 9){
    $tempcels= градусов ; }
    if($tempw == 1){
    $tempcels= градус ; }
    if($tempw >= 2 and $tempw <= 4){
    $tempcels= градуса ; }
    }
        //$tNew = abs((float)getGlobal('Moscow.Temp'));
    $status.=' Температура '.getGlobal('Moscow.Temp')." ".$tempcels." цельсия";
    say($status,1);
    $tempw="";
    $tempcels="";
    
    $status="";  
    $h=round(gg("Moscow.Humidity"));
    $tempw=$h;
    if($tempw >= 11 and $tempw <= 14){
    $tempcels=" процентов ";
    }
    else{

    while ($tempw > 9){
    $tempw=$tempw-10;
    }
    
    if($tempw == 0 or $tempw >= 5 and $tempw <= 9){
    $tempcels= процентов ; }
    if($tempw == 1){
    $tempcels= процент ; }
    if($tempw >= 2 and $tempw <= 4){
    $tempcels= процента ; }
    }
    $status.="Относительная влажность ".gg("Moscow.Humidity")." ".$tempcels. ".";
    say($status,1);
    $tempw="";
    $tempcels="";
    
    $status="";
    $pressure=(float)gg("Moscow.Pressure");
    if ($pressure<728) {
     $status.=' Атмосферное давление пониженное';
    } elseif ($pressure>768) {
     $status.=' Атмосферное давление повышенное.';
    } else {
     $status.=' Атмосферное давление нормальное.';
    }
    say($status,1);
    
    $status="";
    // ветер
    $WindSpeed=(float)gg("Moscow.WindSpeed");
    if ($WindSpeed<1) {
     $status.=' Ветра нет.';
    } elseif ($WindSpeed<3) {
     $status.=' Ветер слабый.';
    } elseif ($WindSpeed<6) {
     $status.=' Ветер сильный.';
    } elseif ($WindSpeed<9) {
     $status.=' Ветер очень сильный.';
    } else {
     $status.=' Ветер очень! Очень сильный.';
    }
    $status.=' Направление '.getGlobal('Moscow.WindDir').'.';
    say($status,1);
Аватара пользователя
adzam
Сообщения: 602
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев
Благодарил (а): 20 раз
Поблагодарили: 138 раз

Re: Как погоду настроить

Сообщение adzam » Вс сен 07, 2014 4:34 pm

Помогите пож вытянуть с синоптика картинку погоды, точнее описание?: ясно ,облачно и тд
Все вроде получилось но не могу избавиться от последней кавычки
12.png
12.png (191.97 КБ) 13733 просмотра
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Аватара пользователя
sergejey
Site Admin
Сообщения: 4284
Зарегистрирован: Пн сен 05, 2011 6:48 pm
Откуда: Минск, Беларусь
Благодарил (а): 75 раз
Поблагодарили: 1559 раз
Контактная информация:

Re: Как погоду настроить

Сообщение sergejey » Вт сен 09, 2014 11:39 am

а если в регулярном выражении
"(.+?)\/
заменить на
"(.+?)"

?
За это сообщение автора sergejey поблагодарил:
adzam (Ср сен 10, 2014 6:30 am)
Рейтинг: 1.16%

Сергей Джейгало, разработчик MajorDoMo
Идеи, ошибки -- за предложениями по исправлению и развитию слежу только здесь!
Профиль Connect -- информация, сотрудничество, услуги
Аватара пользователя
adzam
Сообщения: 602
Зарегистрирован: Сб дек 08, 2012 10:28 pm
Откуда: Кишинев
Благодарил (а): 20 раз
Поблагодарили: 138 раз

Re: Как погоду настроить

Сообщение adzam » Ср сен 10, 2014 6:51 am

Спасибо ,получилось.
Я присвоил это значение иконке с погодой, а как заставить иконку обновляться через 10 минут?
Вариант %Sinoptik.Img|600% не работает
Мои проекты здесь...https://connect.smartliving.ru/profile/41/blog213.htm
Если вам помогло какое-либо мое сообщение - не ленитесь пользоваться кнопкой СПАСИБО.
Palko
Сообщения: 59
Зарегистрирован: Вт авг 26, 2014 1:59 pm
Откуда: Новосибирск
Благодарил (а): 8 раз
Поблагодарили: 6 раз

Re: Как погоду настроить

Сообщение Palko » Ср сен 10, 2014 9:05 am

Доброго
А есть ли возможность самостоятельного разбора веб страницы например в теле сценария с помощью preg_match?
Чтобы вытащить с gismeteo полный прогноз на три дня по параметрам например отсюда: http://www.gismeteo.ru/ajax/print/4690/short/

(с PHP практически не знаком) покурил интернет, все равно не получается

$url="http://www.gismeteo.ru/city/daily/4690/";
$fp = fopen($url, "r");
$patTemp = ' тут пишем шаблон';
preg_match($patTemp, $fp, $ZavtraTemp);
sg(ThisComputer.ForecastTemp,$ZavtraTemp);

чувствую что не верна концепция.. ткните
ErmolenkoM
Сообщения: 560
Зарегистрирован: Ср сен 04, 2013 10:31 am
Откуда: Самара
Благодарил (а): 99 раз
Поблагодарили: 140 раз
Контактная информация:

Re: Как погоду настроить

Сообщение ErmolenkoM » Ср сен 10, 2014 9:11 am

Palko писал(а):А есть ли возможность самостоятельного разбора веб страницы например в теле сценария с помощью preg_match?
Чтобы вытащить с gismeteo полный прогноз на три дня по параметрам
например у меня сделано так:

Код: Выделить всё

//$city_id=28807;
$data_file="http://export.yandex.ru/weather-ng/forecasts/28807.xml";//$city_id.xml?".rand(); // адрес xml файла
$xml = simplexml_load_file($data_file); // раскладываем xml на массив

$temp=$xml->fact->temperature;
// Если значение температуры положительно, для наглядности добавляем "+"
if ($temp>0) {$temp='+'.$temp;}
sg("YandexSamara.Temp",$temp);
sg("YandexSamara.City",$xml->city);
sg("YandexSamara.Type",$xml->fact->weather_type);
sg("YandexSamara.Pressure",$xml->fact->pressure);
sg("YandexSamara.Humidity",$xml->fact->humidity);
sg("YandexSamara.WindSpeed",$xml->fact->wind_speed);
sg("YandexSamara.Image",$xml->fact->image);
sg("YandexSamara.MorningTemp",$xml->{'day'}->{'day_part'}[0]->{'temperature-data'}->{'avg'});
sg("YandexSamara.MorningWeatherType",$xml->{'day'}->{'day_part'}[0]->{'weather_type'});
sg("YandexSamara.DayTemp",$xml->{'day'}->{'day_part'}[1]->{'temperature-data'}->{'avg'});
sg("YandexSamara.DayWeatherType",$xml->{'day'}->{'day_part'}[1]->{'weather_type'});
sg("YandexSamara.EveningTemp",$xml->{'day'}->{'day_part'}[2]->{'temperature-data'}->{'avg'});
sg("YandexSamara.EveningWeatherType",$xml->{'day'}->{'day_part'}[2]->{'weather_type'});
sg("YandexSamara.NightTemp",$xml->{'day'}->{'day_part'}[3]->{'temperature-data'}->{'avg'});
sg("YandexSamara.NightWeatherType",$xml->{'day'}->{'day_part'}[3]->{'weather_type'});
sg("YandexSamara.TomorrowDayTemp",$xml->{'day'}[1]->{'day_part'}[1]->{'temperature_to'});
sg("YandexSamara.TomorrowDayWeatherType",$xml->{'day'}[1]->{'day_part'}[1]->{'weather_type'});


$dir = $xml->fact->wind_direction;
switch ($dir){
   case 's':
     $dir="южное";
     break;
   case 'n':
     $dir="северное";
     break;
   case 'w':
     $dir="западное";
     break;
   case 'e':
     $dir="восточное";
     break;
   case 'sw':
     $dir="юго-западное";
     break;
   case 'nw':
     $dir="северо-западное";
     break;
   case 'calm':
     $dir="штиль";
     break;
}
sg("YandexSamara.WindDir",$dir);
sg("YandexSamara.SunRise",$xml->day[0]->sunrise);
sg("YandexSamara.SunSet",$xml->day[0]->sunset);

// Запишем температуру вчерашнего дня для этого часа
$SQLText = " SELECT ph.value as val";
$SQLText.= " FROM pvalues pv, objects o, properties p, phistory ph ";
$SQLText.= " WHERE pv.object_id = o.id ";
$SQLText.= " AND p.id = pv.property_id ";
$SQLText.= " AND o.title =  'YandexSamara' ";
$SQLText.= " AND p.title =  'Temp' ";
$SQLText.= " AND ph.value_id = pv.id ";
$SQLText.= " AND UNIX_TIMESTAMP( pv.updated ) - UNIX_TIMESTAMP( ph.added ) <24 *60 *60 +30 *60 ";
$SQLText.= " ORDER BY ph.added ";
$SQLText.= " LIMIT 1 ";
$tempYesterday = SQLSelectOne($SQLText);
sg("YandexSamara.tempYesterday",$tempYesterday['val'] );
 
За это сообщение автора ErmolenkoM поблагодарил:
mirsum (Вт дек 23, 2014 2:38 pm)
Рейтинг: 1.16%
aka msh555
Cubian на Cubietruck, Connect
Ответить