Помогите с парсером погоды

Да с объектом много возиться, мне бы простенькое решение, по типу такого

PHP:
$file = file_get_contents("http://pda.gismeteo.ru/f".$row['id_city'].".htm");
$file=str_replace("\r\n","",$file);
//print_r($file);
$k=preg_match_all("/<TD colspan=2.*?><B>(.*?)<\/B><\/center><\/td><\/tr>.*?images\/(.*?).gif\" alt=\"(.*?)\"><\/td><td class=big>(.*?)<\/td>.*?bgcolor=\".*?\">(.*?)<\/td><\/tr>.*?<td colspan=2>(.*?)<\/td><\/tr>.*?bgcolor=\".*?\">(.*?)<\/td><\/tr>/i", $file, $res);
for ($i=0;$i<$k;$i++){
echo $res[1][$i]." - ".$res[2][$i]." - ".$res[3][$i]." - ".$res[4][$i]." - ".$res[5][$i]." - ".$res[6][$i]." - ".$res[7][$i]."<br>";	
}
Вот мой парсер с pda.gismeteo.ru где $row['id_city'] id города.:ay:
 
Приближается сезон отпусков - решил помочь в Вашем вопросе :)
Проблема возникла только одна - на сайте-доноре значение температуры представлено почему-то в виде изображения.

В общем, результат вышел сомнительного качества, но рабочий :)
А вот и результат:
 
Перечитал много тем про парсинг погоды, но так и не нашел про сервис rp5.ru, а ведь хорошая штука!
Кроме этого у меня есть когда-то писанный на заказ (я к сожалению не кодер) парсер. Сначала он был на fopen, потом хостер отключил функцию и пришлось переписывать его на cure.
Он рабочий..но немного кривоват. Возможно ли подправить и всенародно юзать его, исходник предоставлю.

мой парсер для рп5. функция возвращает удобочитаемый текст.

PHP:
function getrp5 ($num=123)
{
	if (($num<1) || ($num>60000)) $num=123;
	$st = "";
	$st1 = "";
	$fl = file_get_contents ("http://wap.rp5.ru/$num/ru"); 
	$fl = utf2win($fl);
	if (preg_match ("/<h1>([^<]+)/i", $fl, $rg))
	{
		$st1 = "Прогноз погоды для г.".$rg[1]."\r\n\r\n";
	} else
		$st1 = "Город для поргноза погоды не определен [$num]\r\n\r\n";

	if (preg_match ("/<table>([^~]+)<\/table>/i", $fl, $rg))
	{
		$st = $rg[1];
		$st = preg_replace ("/<td[^>]*>/i", "",$st);
		$st = preg_replace ("/<font[^>]*>/i", "",$st);
		$st = preg_replace ("/<tr[^>]*>/i", "",$st);
		$st = preg_replace ("/<img[^>]*>/i", "",$st);
		$st = preg_replace ("/<\/td>/i", "",$st);
		$st = preg_replace ("/<\/tr>/i", "\n",$st);
		$st = preg_replace ("/<\/font>/i", "",$st);
		$st = preg_replace ("/&ordm;/i", " ",$st);
		$st = preg_replace ("/<b>/i", "",$st);
		$st = preg_replace ("/<\/b>/i", "",$st);
		$st = preg_replace ("/<br \/>/i", "\n",$st);
		$st = str_replace ("%\n", "%\n\n-----------------------------------\n\n", $st);
		$st = str_replace ("%)", "% )", $st);
		$arr = explode ("\n", $st);
		$st = $arr[0]."\r\n\r\n-----------------------------------\r\n\r\n";
		for ($i=1; $i<count ($arr); $i++)
			$st .= trim ($arr[$i])."\r\n";
	}
	return $st1.$st;//convert_cyr_string ($st,"k","w");
}
 
Нужен парсер погоды для одного города и чтобы не было деления на утро, вечер, день, ночь а выводилась одна картинка погоды меняющаяся от времени суток и от самой погоды
И минимум информации - температура, скорость ветра и в общем хватит.
Пример:

Выложите плиз если у кого есть.
Пытался обрезать этот Для просмотра ссылки Войди или Зарегистрируйся чтобы показывал только день и ночь но не вышло, знаю только HTML.
Нашел подобный скрипт, получилось обрезать, но у него день потом заменяется на утро и т.д., как и у выше приведённого.
Подскажите как изменить если это возможно
PHP:
	<?php
$postgm = intval($_POST['gmcity']);
if ($postgm>0) {
	//записать куку
	require_once('gismeteo/baza_gismeteo.php');
	preg_match("/$postgm>(.*)</sUi",$baza,$gorod);
	$city = $after_replace = str_replace("<", "", $gorod[0]); 
	$city = explode (">", $city);
	$citynum = $city[0];
	setcookie("gismeteopogoda", $citynum, time() + intval(157680000));
} else {
	//читать из куки
	$citynum = $_COOKIE['gismeteopogoda'];
}
if ($citynum == "") {$citynum = "37212"; //номер города 
}
//считываем содержимое файла в переменную $xml
$xmlq = file_get_contents('http://informer.gismeteo.ru/xml/'.$citynum.'_1.xml');
//передаём содержимое xml файла расширению SimpleXML
$res1 = simplexml_load_string($xmlq);
//Запускаем цикл для отображения погоды
for ($i = 0; $i < count ($res1->REPORT->TOWN->FORECAST); $i++) {
//время суток прогноза погоды
switch ((int)$res1->REPORT->TOWN->FORECAST[$i]->attributes()->tod):
case  0:$time = 'ночь'; $cs='t';break;
case  1:$time = 'утро'; $cs='s';break;
case  2:$time = 'день'; $cs='s';break;
case  3:$time = 'вечер';$cs='t';break;
default:$time = '';break;
endswitch;
//день недели на который осуществляется прогноз
switch ((int)$res1->REPORT->TOWN->FORECAST[$i]->attributes()->weekday):
case  1:$weekday = 'воскресенье';break;
case  2:$weekday = 'понедельник';break;
case  3:$weekday = 'вторник';break;
case  4:$weekday = 'среда';break;
case  5:$weekday = 'четверг';break;
case  6:$weekday = 'пятница';break;
case  7:$weekday = 'суббота';break;
default:$weekday = '';break;
endswitch;
//выбор облачности
switch ((int) $res1->REPORT->TOWN->FORECAST[$i]->PHENOMENA->attributes()->cloudiness):
case  0:$cloudiness = 'ясно';$cl=1;break;
case  1:$cloudiness = 'малооблачно';$cl=2;break;
case  2:$cloudiness = 'облачно';$cl=3;break;
case  3:$cloudiness = 'пасмурно';$cl=4;break;
default:$cloudiness = '';break;
endswitch;
//определение типа осадков
switch ((int) $res1->REPORT->TOWN->FORECAST[$i]->PHENOMENA->attributes()->precipitation):
case  4:$precipitation = 'дождь';$cd=1;break;
case  5:$precipitation = 'ливень';$cd=2;break;
case  6:$precipitation = 'снег';$cd=3;break;
case  7:$precipitation = 'снег';$cd=3;break;
case  8:$precipitation = 'гроза';$cd=2;break;
case  9:$precipitation = 'нет данных';$cd=5;break;
case 10:$precipitation = 'без осадков';$cd=0;break;
default:$precipitation = '';break;
endswitch;
//определение направления ветра
switch ((int) $res1->REPORT->TOWN->FORECAST[$i]->WIND->attributes()->direction):
case  0:$w_direct = 'с';break;
case  1:$w_direct = 'св';break;
case  2:$w_direct = 'в';break;
case  3:$w_direct = 'юв';break;
case  4:$w_direct = 'ю';break;
case  5:$w_direct = 'юз';break;
case  6:$w_direct = 'з';break;
case  7:$w_direct = 'с';break;
default:$w_direct = '';break;
endswitch;
//город для которого осуществляется прогноз
$namecity = urldecode ($res1->REPORT->TOWN->attributes()->sname);
//день на который осуществляется прогноз
$daygismeteo = $res1->REPORT->TOWN->FORECAST[$i]->attributes()->day;
//месяц на который осуществляется прогноз
$monthgismeteo = $res1->REPORT->TOWN->FORECAST[$i]->attributes()->month;
//год на который осуществляется прогноз
$yeargismeteo = $res1->REPORT->TOWN->FORECAST[$i]->attributes()->year;
// температура
$t_min = $res1->REPORT->TOWN->FORECAST[$i]->TEMPERATURE->attributes()->min;
$t_max = $res1->REPORT->TOWN->FORECAST[$i]->TEMPERATURE->attributes()->max;
if ($t_min >0 ) $t_min='+'.$t_min;
if ($t_max >0 ) $t_max='+'.$t_max;
// давление
$d_min = $res1->REPORT->TOWN->FORECAST[$i]->PRESSURE->attributes()->min;
$d_max = $res1->REPORT->TOWN->FORECAST[$i]->PRESSURE->attributes()->max;
// скорость ветра
$w_min = $res1->REPORT->TOWN->FORECAST[$i]->WIND->attributes()->min;
$w_max = $res1->REPORT->TOWN->FORECAST[$i]->WIND->attributes()->max;
// влажность
$r_min = $res1->REPORT->TOWN->FORECAST[$i]->RELWET->attributes()->min;
$r_max = $res1->REPORT->TOWN->FORECAST[$i]->RELWET->attributes()->max;
// комфорт
$h_min = $res1->REPORT->TOWN->FORECAST[$i]->HEAT->attributes()->min;
$h_max = $res1->REPORT->TOWN->FORECAST[$i]->HEAT->attributes()->max;
if ($h_min >0 ) {$h_min='+'.$h_min;$h_col='+';}
if ($h_max >0 ) {$h_max='+'.$h_max;$h_col='+';}
//выводим пользователю прогноз
$gismeteo .="<div style='font-size:10px;'>".$daygismeteo.".".$monthgismeteo.".".$yeargismeteo."&nbsp;<span style='font-size:11px;color:darkgray'>".$weekday."&nbsp;".$time."</span></div>
<table><tr>
  <td><img src='/gismeteo/images/pogoda/".$cs.$cl.$cd.".png' alt='' title='".$cloudiness.",  ".$precipitation.", комфорт ".$h_min."...".$h_max." °C'width='54'><br></td>
  <td><span style='color:#0954A6;'>".$t_min." ... ".$t_max." °C</span><br>
	  <span style='color:silver'>".$d_min."...".$d_max." мм<br>
	  ".$w_direct."  ".$w_min."...".$w_max." м/с<br>
	  ".$r_min."...".$r_max." %</span><br>
  </td>
</tr></table><br>";}
if (intval($_GET['setupgm'])==1) {
	require_once('gismeteo/baza_gismeteo.php');
	$co .= $baza;
} 
echo "<div>".$co."</div>".$gismeteo."
";
?>
Еще нашел красивую погоду на флеш но на английском, может кто может перевести ?
Показывает по фаренгейту и цельсию, но после обновления страницы ставится фаренгейт
Тоже неплохо было бы обрезать выбор бэкграунда и все меню, оставить по умолчанию сельсий
скачать:
 

Вложения

  • pogoda.jpg
    pogoda.jpg
    12,9 KB · Просмотры: 27
Как всегда я пошел по длиннейшему пути и с другой стороны:(
Скажите, а функция utf2win - это какая-то стандартная строковая функция или к iconv относится, моих познаний и прямого описания функции я не нашел, зато нашел следующий работоспособный код

PHP:
function utf2win( $s ) { 
    if ( function_exists('iconv') ) { 
        return iconv("UTF-8", "CP1251", $s); 
    } 
    if ( function_exists('mb_convert_encoding') ) { 
        return mb_convert_encoding($s, "CP1251", "UTF-8"); 
    } 
    $i = 0; $m = strlen($s); $t = ''; 
    while ( $i < $m ) { 
        $h = ord($s[$i++]); 
        if ( $h <= 127 ) { $t .= chr($h); continue; } 
        $l = ord($s[$i++]); 
        if ( $h == 208 ) { 
            if ( $l >= 144 && $l <= 191 ) { $t .= chr($l+48); continue; } 
            if ( $l == 129 ) { $t .= chr(168); continue; } //russion YO 
            if ( $l == 132 ) { $t .= chr(170); continue; } //ukrainian YE 
            if ( $l == 134 ) { $t .= chr(178); continue; } //ukrainian YI 
            if ( $l == 135 ) { $t .= chr(175); continue; } //ukrainian I 
            continue; 
        } 
        if ( $h == 209 ) { 
            if ( $l >= 128 && $l <= 143 ) { $t .= chr($l+112); continue; } 
            if ( $l == 145 ) { $t .= chr(184); continue; };//russion yo 
            if ( $l == 148 ) { $t .= chr(186); continue; };//ukrainian ye 
            if ( $l == 150 ) { $t .= chr(179); continue; };//ukrainian yi 
            if ( $l == 151 ) { $t .= chr(191); continue; };//ukrainian i 
            continue; 
        } 
    } 
    return $t; 
}
 
вот еще одна реализация utf2win:

PHP:
function u8($win,$h,$t)
{
global $w8;
$w8[chr($h).chr($t)] = $win;
}
$c1 = chr(208);
$c2 = chr(209);
u8("й",208,185); u8("ц",209,134); u8("у",209,131);
u8("к",208,186); u8("е",208,181); u8("н",208,189);
u8("г",208,179); u8("ш",209,136); u8("щ",209,137);
u8("з",208,183); u8("х",209,133); u8("ъ",209,138);
u8("ф",209,132); u8("ы",209,139); u8("в",208,178);
u8("а",208,176); u8("п",208,191); u8("р",209,128);
u8("о",208,190); u8("л",208,187); u8("д",208,180);
u8("ж",208,182); u8("э",209,141); u8("я",209,143);
u8("ч",209,135); u8("с",209,129); u8("м",208,188);
u8("и",208,184); u8("т",209,130); u8("ь",209,140);
u8("б",208,177); u8("ю",209,142); u8("Й",208,153);
u8("Ц",208,166); u8("У",208,163); u8("К",208,154);
u8("Е",208,149); u8("Н",208,157); u8("Г",208,147);
u8("Ш",208,168); u8("Щ",208,169); u8("З",208,151);
u8("Х",208,165); u8("Ъ",208,170); u8("Ф",208,164);
u8("Ы",208,171); u8("В",208,146); u8("А",208,144);
u8("П",208,159); u8("Р",208,160); u8("О",208,158);
u8("Л",208,155); u8("Д",208,148); u8("Ж",208,150);
u8("Э",208,173); u8("Я",208,175); u8("Ч",208,167);
u8("С",208,161); u8("М",208,156); u8("И",208,152);
u8("Т",208,162); u8("Ь",208,172); u8("Б",208,145);
u8("Ю",208,174); u8("ё",209,145); u8("Ё",208,129);
 
function utf2win ($text)
{
global $c1,$c2,$w8;
$u = false;
$temp = "";
for($i=0,$len=strlen($text); $i<$len; $i++) {
   $c = substr($text,$i,1);
   if ($u) {
     $c = $w8[$lc.$c];
     $temp .= isset($c)?$c:"?";
     $u = false;
   }
   else if ($c==$c1 || $c==$c2) {
     $u = true;
     $lc = $c;
   }
   else
     $temp .= $c;
}
return $temp;
}

Добавлено через 54 секунды
и кстати она работает без подключения дополнительных модулей пхп
 
Вот еще нашел страницу с данными как отсюда брать погоду. Хотел на сайт на 5-ть дней поставить. Помогите с парсером.
 
Вот еще нашел страницу с данными как отсюда брать погоду. Хотел на сайт на 5-ть дней поставить. Помогите с парсером.
Даже не знаю... А сколько платишь? Или тебе безвозмездно помочь? Тогда сам шевелись: пиши скрипт, потом показывай если вдруг не заработает - поможем абсолютно бесплатно. Тут помогают начинающим РНР программистам, а не жадным "web-мастерам" :)
Если не можешь сам написать - нанимай людей. Нет денег - бери готовое. Тем более, в этой теме есть рабочие парсеры, потрудись найти номер своей Находки и будет тебе парсер. Успехофф.
 
Назад
Сверху