Посоветуйте парсер погоды

12 3
WX
На сайте с 23.12.2008
Offline
103
3283

Стоял у меня простенький скрипт, сегодня заметил, что он перестал работать...

<?php
$content = iconv('UTF-8','cp1251//IGNORE',file_get_contents("http://informer.gismeteo.ru/rss/29430.xml"));
$pattern = "#<item>\s*<title>(.*)</title>.*<description>(.*)</description>.*</item>#isU";
preg_match_all($pattern, $content, $out);
foreach($out[1] as $key=>$value){
print "$value<br>{$out[2][$key]}<br><br>";
}
?>

Посоветуйте пожалуйста может какой скрипт другой...

Я из Томска (http://tomck.com).
W
На сайте с 09.04.2013
Offline
46
#1
www.XOST.biz:

Посоветуйте пожалуйста может какой скрипт другой...

Скрипт вроде рабочий... Может кодировка изменилась на сайте?Вот аналогичный

<?php 

$content = file_get_contents("http://informer.gismeteo.ru/rss/29430.xml");
$content = new SimpleXMLElement($content);
foreach($content->channel->item as $key=>$value){
print "$value->title<br>$value->description<br><br>";
}
?>
дани мапов
На сайте с 06.09.2012
Offline
204
#2

Совет: простое кеширование добавить, допустим, на полчаса. Чтобы при большой посещаемости, не загружать каждый раз с другого сайта данные.

Написание и доработка скриптов (PHP, MySQL, JavaScript, jQuery) (/ru/forum/811046)
WX
На сайте с 23.12.2008
Offline
103
#3
webjey:
Скрипт вроде рабочий... Может кодировка изменилась на сайте?Вот аналогичный

<?php 

$content = file_get_contents("http://informer.gismeteo.ru/rss/29430.xml");
$content = new SimpleXMLElement($content);
foreach($content->channel->item as $key=>$value){
print "$value->title<br>$value->description<br><br>";
}
?>

А тот что вы привели скрипт скопировал в файл pogodanew.php, загрузил, ругается:

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /home/public_html/pogodanew.php:3 Stack trace: #0 /home/public_html/pogodanew.php(3): SimpleXMLElement->__construct('') #1 {main} thrown in /home/public_html/pogodanew.php on line 3

А тот что я в 1 посте публиков - прост очисто. Ничего не показывает.

S
На сайте с 13.10.2014
Offline
171
#4

www.XOST.biz, что-то вы не так делаете, однозначно, или у вас simpleXML отсутствует

colors.silicoid.ru/dev/pogoda/ -- результат работы этого скрипта

WX
На сайте с 23.12.2008
Offline
103
#5

silicoid а мой скрипт у Вас тоже работает?

S
На сайте с 13.10.2014
Offline
171
#6

www.XOST.biz, да. с поправкой на кодировку.

WX
На сайте с 23.12.2008
Offline
103
#7

Странно все это...

Заместо моего скрипта - пусто.

Заместо скрипта webjey - ругается писал как.

Еще неделю назад все работала. Какие-то настройки на сервере поменялись, из-за этого могло перестать работать?

WX
На сайте с 23.12.2008
Offline
103
#8

Нашел еще в интернете скрипты, все 3 не работают:

<? 

$town_id=26063; //питер
$w_res=array();
$xml=file_get_contents("http://informer.gismeteo.ru/xml/{$town_id}_1.xml");
$dom = new DOMDocument();
$dom->loadXML($xml);
$dom->validateOnParse = true;

$town_name=$dom->getElementsByTagName('TOWN');
$town_name=urldecode($town_name->item(0)->getAttribute('sname'));

$weater_tmp=$dom->getElementsByTagName('FORECAST');

$i=0;
foreach ($weater_tmp as $weather)
{
$phenomena=$weather->getElementsByTagName('PHENOMENA')->item(0);
$pressure=$weather->getElementsByTagName('PRESSURE')->item(0);
$temperature=$weather->getElementsByTagName('TEMPERATURE')->item(0);
$wind=$weather->getElementsByTagName('WIND')->item(0);
$relwet=$weather->getElementsByTagName('RELWET')->item(0);
$heat=$weather->getElementsByTagName('HEAT')->item(0);

$w_res[$i]['town']=$town_id;
$w_res[$i]['town_name']=$town_name;

$w_res[$i]['tod']=$weather->getAttribute('tod');
$w_res[$i]['w_time']=$weather->getAttribute('year')."-".$weather->getAttribute('month')."-".$weather->getAttribute('day')." ".$weather->getAttribute('hour').":00:00";

$w_res[$i]['cloudiness']=$phenomena->getAttribute('cloudiness');
$w_res[$i]['precipitation']=$phenomena->getAttribute('precipitation');
$w_res[$i]['rpower']=$phenomena->getAttribute('rpower');
$w_res[$i]['spower']=$phenomena->getAttribute('spower');

$w_res[$i]['pressure_max']=$pressure->getAttribute('max');
$w_res[$i]['pressure_min']=$pressure->getAttribute('min');

$w_res[$i]['temp_max']=$temperature->getAttribute('max');
$w_res[$i]['temp_min']=$temperature->getAttribute('min');

$w_res[$i]['wind_max']=$wind->getAttribute('max');
$w_res[$i]['wind_min']=$wind->getAttribute('min');
$w_res[$i]['wind_direction']=$wind->getAttribute('direction');

$w_res[$i]['wet_max']=$relwet->getAttribute('max');
$w_res[$i]['wet_min']=$relwet->getAttribute('min');

$w_res[$i]['heat_max']=$heat->getAttribute('max');
$w_res[$i]['heat_min']=$heat->getAttribute('min');

$i++;
}
}

$weather=array();
$weather['cloudiness']=array(0=>"ясно", 1=>"малооблачно", 2=>"облачно", 3=>"пасмурно");
$weather['precipitation']=array(4=>"дождь", 5=>"ливень", 6=>"снег", 7=>"снег", 8=>"гроза", 9=>"нет данных", 10=>"без осадков");
$weather['rpower']=array(0=>"возможен", 1=>""); //дождь/снег
$weather['spower']=array(0=>"возможна", 1=>""); //гроза
$weather['tod']=array(0=>"ночь", 1=>"утро", 2=>"день", 3=>"вечер");
$weather['wind']=array(0=>"северный", 1=>"северо-восточный", 2=>"восточный", 3=>"юго-восточный", 4=>"южный", 5=>"юго-западный", 6=>"западный", 7=>"северо-западный");

echo $w_res[0]['town_name']."<br /><br />";

for ($i=0; $i<4; $i++)
{
echo "Дата: ".$w_res[$i]['w_time'].", ".$weather['tod'][$w_res[$i]['tod']]."<br />";
echo "Температура: ".(($w_res[$i]['temp_max']<0) ? ($w_res[$i]['temp_max']." ".$w_res[$i]['temp_min']) : ($w_res[$i]['temp_min']." ".$w_res[$i]['temp_max']))."<br />";
echo "Давление: ".$w_res[$i]['pressure_min']."-".$w_res[$i]['pressure_max']."мм р.ст.<br />";
echo "Влажность: ".$w_res[$i]['wet_min']."%-".$w_res[$i]['wet_max']."%<br />";
echo "Ветер ".$weather['wind'][$w_res[$i]['wind_direction']]." ".$w_res[$i]['wind_min']."-".$w_res[$i]['wind_max']."м/с<br />";
echo $weather['cloudiness'][$w_res[$i]['cloudiness']].", ";
if($w_res[$i]['precipitation']<=7)
{
echo $weather['rpower'][$w_res[$i]['rpower']]." ".$weather['precipitation'][$w_res[$i]['precipitation']]."<br />";
}
elseif($w_res[$i]['precipitation']==8)
{
echo $weather['spower'][$w_res[$i]['rpower']]." ".$weather['precipitation'][$w_res[$i]['precipitation']]."<br />";
}
elseif($w_res[$i]['precipitation']==10)
{
echo $weather['precipitation'][$w_res[$i]['precipitation']]."<br />";
}
echo "Комфорт ".(($w_res[$i]['heat_max']<0) ? ($w_res[$i]['heat_max']." ".$w_res[$i]['heat_min']) : ($w_res[$i]['heat_min']." ".$w_res[$i]['heat_max']))." градусов<br /><br /><br />";

и вот еще

<?php

header("Content-Type: text/html; charset=utf-8");
error_reporting(-1);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://pogoda.yandex.ru/moscow/details/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$f = curl_exec($ch);
curl_close($ch);

//preg_match_all('/<td class="icon">(.*?)<\/td>/i',$f,$weather['icon']);
preg_match_all('/<td class="t">(.*?)<\/td>/i',$f,$weather['t']);
preg_match_all('/<th class="date" rowspan="4">(.*?)<\/th>/i',$f,$weather['date']);
//preg_match_all('/<td class="data">(.*?)<\/td>/i',$f,$weather['data']);
//preg_match_all('/<td class="pressure">(.*?)<\/td>/i',$f,$weather['pressure']);
//preg_match_all('/<td class="moisture">(.*?)<\/td>/i',$f,$weather['moisture']);
//preg_match_all('/<td class="wind">(.*?)<\/td>/i',$f,$weather['wind']);
//preg_match_all('/<td class="wind-icon">(.*?)<\/td>/i',$f,$weather['wind-icon']);
//preg_match_all('/<td class="addon">(.*?)<\/td>/i',$f,$weather['addon']);

//var_dump($weather['t']);

?>
<table width="90%" cellspacing="0" cellpadding="10" border="0" class="weatherstr" style="font-size: 9pt;">

<tbody>
<tr>
<td width="15%" style="border-bottom: 1px solid rgb(255, 255, 255);">&nbsp;</td>
<td width="40%" colspan="2">&nbsp;</td>
<td width="6%">Давление</td>
<td width="6%">Влажность</td>
<td width="23%">Скорость и направление ветра м/с</td>

</tr>
<tr>
<td width="20%" style="border-bottom: 1px solid rgb(255, 255, 255);" rowspan="4">
<div style="padding: 10px 5px; background-color: rgb(248, 188, 4);"><?php echo $weather['date'][1][0]; ?></div>
</td>
<td width="25%"><?php echo $weather['t'][1][0]; ?></td>
<td width="5%">{icon_1}</td>

<td>{pressure_1}</td>
<td>{moisture_1}</td>
<td>{wind_1}</td>
</tr>
<tr>
<td><?php echo $weather['t'][1][1]; ?></td>
<td>{icon_2}</td>

<td>{pressure_2}</td>
<td>{moisture_2}</td>
<td>{wind_2}</td>
</tr>
<tr>
<td><?php echo $weather['t'][1][2]; ?></td>
<td>{icon_3}</td>

<td>{pressure_3}</td>
<td>{moisture_3}</td>
<td>{wind_3}</td>
</tr>
<tr>
<td><?php echo $weather['t'][1][3]; ?></td>
<td>{icon_4}</td>

<td>{pressure_4}</td>
<td>{moisture_4}</td>
<td>{wind_4}</td>
</tr>
<tr>
<td style="border-bottom: 1px solid rgb(255, 255, 255);" colspan="7">&nbsp;</td>
</tr>

<tr>
<td style="border-bottom: 1px solid rgb(255, 255, 255);">&nbsp;</td>
<td colspan="2">&nbsp;</td>
<td>Давление</td>
<td>Влажность</td>
<td>Скорость и направление ветра м/с</td>
</tr>

<tr>
<td style="border-bottom: 1px solid rgb(255, 255, 255);" rowspan="4">
<div style="padding: 10px 5px; background-color: rgb(248, 188, 4);"><?php echo $weather['date'][1][1]; ?></div>
</td>
<td><?php echo $weather['t'][1][4]; ?></td>
<td>{icon_5}</td>
<td>{pressure_5}</td>

<td>{moisture_5}</td>
<td>{wind_5}</td>
</tr>
<tr>
<td><?php echo $weather['t'][1][5]; ?></td>
<td>{icon_6}</td>
<td>{pressure_6}</td>

<td>{moisture_6}</td>
<td>{wind_6}</td>
</tr>
<tr>
<td><?php echo $weather['t'][1][6]; ?></td>
<td>{icon_7}</td>
<td>{pressure_7}</td>

<td>{moisture_7}</td>
<td>{wind_7}</td>
</tr>
<tr>
<td><?php echo $weather['t'][1][7]; ?></td>
<td>{icon_8}</td>
<td>{pressure_8}</td>

<td>{moisture_8}</td>
<td>{wind_8}</td>
</tr>
<tr>
<td style="border-bottom: 1px solid rgb(255, 255, 255);" colspan="7">&nbsp;</td>
</tr>
<tr>
<td style="border-bottom: 1px solid rgb(255, 255, 255);">&nbsp;</td>

<td colspan="2">&nbsp;</td>
<td>Давление</td>
<td>Влажность</td>
<td>Скорость и направление ветра м/с</td>
</tr>
<tr>
<td style="border-bottom: 1px solid rgb(255, 255, 255);" rowspan="4">

<div style="padding: 10px 5px; background-color: rgb(248, 188, 4);"><?php echo $weather['date'][1][2]; ?></div>
</td>
<td><?php echo $weather['t'][1][8]; ?></td>
<td>{icon_9}</td>
<td>{pressure_9}</td>
<td>{moisture_9}</td>

<td>{wind_9}</td>
</tr>
<tr>
<td><?php echo $weather['t'][1][9]; ?></td>
<td>{icon_10}</td>
<td>{pressure_10}</td>
<td>{moisture_10}</td>

<td>{wind_10}</td>
</tr>
<tr>
<td><?php echo $weather['t'][1][10]; ?></td>
<td>{icon_11}</td>
<td>{pressure_11}</td>
<td>{moisture_11}</td>

<td>{wind_11}</td>
</tr>
<tr>
<td><?php echo $weather['t'][1][11]; ?></td>
<td>{icon_12}</td>
<td>{pressure_12}</td>
<td>{moisture_12}</td>

<td>{wind_12}</td>
</tr>
</tbody>
</table>
WX
На сайте с 23.12.2008
Offline
103
#9

и ...

 

<style type="text/css">
<!--
body { margin: 50px; }
td { border-top: #f1f1f1 1px solid; border-right: #f1f1f1 1px solid; font: 12px Arial; }
-->
</style>
<?
$source = 'http://informer.gismeteo.ru/xml/27612_1.xml'; // получаем данные
$weekday = array('','Вс','Пн','Вт','Ср','Чт','Пт','Сб'); // день недели
$month = array('','Янв','Фев','Мар','Апр','Май','Июн','Авг','Сен','Окт','Ноя','Дек'); // месяц
$tod = array('ночь','утро','день','вечер'); // время суток
$cloudiness = array('ясно', 'малооблачно', 'облачно', 'пасмурно'); // облачность
$precipitation = array(4=>'дождь', 5=>'ливень', 6=>'снег', 7=>'снег', 8=>'гроза', 9=>'нет данных', 10=>'без осадков'); //осадки
$xmlstr = '';

$fp = fopen($source, 'r'); // открываем
if ( $fp ) {
while (!feof($fp)) $xmlstr.= fread($fp, 8192); // читаем
$xml = new SimpleXMLElement($xmlstr);
//echo '<pre>'; var_dump($xml->REPORT); echo '</pre>'; // тестим данные
?>

<div style="display:block; width:75%;">
<table width="250" border="0" cellpadding="5" cellspacing="0" style="float:left; border-left:#f1f1f1 1px solid; border-bottom:#f1f1f1 1px solid;">
<tr><td height="70" align="center" valign="middle"><? $town = $xml->REPORT->TOWN[0]; echo '<b>Погода '.urldecode($town['sname']).'</b><br>(широта: '.$town['latitude'].'&ordm;, долгота: '.$town['longitude'].'&deg;)'; ?></td></tr>
<tr><td valign="top">Облачность</td></tr>
<tr><td valign="top">Осадки</td></tr>
<tr><td valign="top">Атмосферное давление, мм.рт.ст.</td></tr>
<tr><td valign="top">Температура воздуха, &deg;C</td></tr>
<tr><td valign="top">Ветер, метр/сек</td></tr>
<tr><td valign="top">Влажность воздуха, %</td></tr>
<tr><td valign="top">Комфорт, &deg;C</td></tr>
</table>
<?
foreach ($xml->REPORT->TOWN->FORECAST as $f) {
echo '<table width="100" border="0" cellpadding="5" cellspacing="0" style="float:left; border-bottom: #f1f1f1 1px solid;">'.
'<tr><td height="70" align="center">'.$tod[intval($f['tod'])].'<br>'.
$f['day'].' '.$month[intval($f['month'])].'<br>'.
$weekday[intval($f['weekday'])].'</td></tr>'.
'<tr><td align="center">'.$cloudiness[intval($f->PHENOMENA['cloudiness'])].'</td></tr>'.
'<tr><td align="center">'.$precipitation[intval($f->PHENOMENA['precipitation'])].'</td></tr>'.
'<tr><td align="center">'.$f->PRESSURE['min'].' - '.$f->PRESSURE['max'].'</td></tr>'.
'<tr><td align="center">'.$f->TEMPERATURE['min'].' - '.$f->TEMPERATURE['max'].'</td></tr>'.
'<tr><td align="center">'.$f->WIND['min'].' - '.$f->WIND['max'].', '.$f->WIND['direction'].'</td></tr>'.
'<tr><td align="center">'.$f->RELWET['min'].' - '.$f->RELWET['max'].'%</td></tr>'.
'<tr><td align="center">'.$f->HEAT['max'].' - '.$f->HEAT['min'].'</td></tr>';
echo '</table>';
}
?>
<? } ?>
</div>
<div style="display:block; float:left; width:75%"><br><a href="http://www.gismeteo.ru/">Предоставлено Gismeteo.Ru</a></div>

Посмотрите, у вас тоже все 3 эти не работают?

Или опять у меня с хостингом какие-то проблемы...

Devvver
На сайте с 02.07.2008
Offline
663
#10

www.XOST.biz,

http://tailand-gid.org/weather/index.php такой вот нравится? могу скинуть.

Мой блог. Все о создании сайтов,Seo и СДЛ ( https://devvver.ru/ ) Мой SEO телеграм канал https://t.me/seobloggers
12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий