[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Прогноз погоды
Evilsoul
Просматривая урок "Курса валют" возникла мысля сделать "Прогноз погоды" со своего родного Украинского Гидрометцетра ну и вот что у меня получилось:
    function GetInformation()
{
$date = date('d/m/Y');

$link = 'http://meteo.com.ua/forecast_hmc/1';

$fd = fopen($link, 'r');

$text = '';

if(!$fd) echo 'Страница не найдена';
else
{
while(!feof($fd)) $text .= fgets($fd, 4096);
}

fclose($fd);

return $text;
}

$html = GetInformation();

$html = explode('</TR>', $html);

$a = 3; //Ключи строк в которых находятся данные
$b = 5; //Ключи строк в которых находятся данные

$i = 0;

$day = $html[$a];
$night = $html[$b];

$pattern = "'<[\/\!]*?[^<>]*?>'si";

$day = preg_replace($pattern, '|', $day);
$night = preg_replace($pattern, '|', $night);

$day = explode('|', $day);
$night = explode('|', $night);

echo '<table border="1" bgcolor="#ffff00" cellpadding="5"><tr><td>В день: </td><td>'. $day['4'] .'</td><td>'. $day['9'] .'</td><td>'. $day['17'] .'</td><td>'. $day['18'] .'</td></tr></table>';
echo '<table border="1" bgcolor="#5555ff" cellpadding="5"><tr><td>В ночі: </td><td>'. $night['15'] .'</td><td>'. $night['20'] .'</td><td>'. $night['28'] .'</td><td>'. $night['29'] .'</td></tr></table>';
echo '<br><br>';

Конечно его можно причесать, сделать функцию и красиво оформить, но это всё попозже, сейчас хотелось бы услышать замечания или предложения ибо мой метод выбора данных не кажется мне хорошим. Спасибо.



Спустя 1 час, 6 минут, 17 секунд (30.08.2010 - 17:13) twin написал(а):
Цитата
Просматривая урок "Курса валют" возникла мысля сделать "Прогноз погоды"

Спустя 1 день, 23 часа, 9 минут, 50 секунд (1.09.2010 - 16:22) Evilsoul написал(а):
Ну не люблю я Гисметео, не нравятся мне их прогнозы smile.gif

Вот живой пример работы: Погода

CSS
#weather {
text-align: center;
margin: 0;
padding: 0;
font-size: 75%;
}
#weather tr, td{
padding: 2px;
}

.r1, .r2, .r3, .r5 {
display: block;
height: 1px;
overflow: hidden;
font-size:1px;
}
.r5 { margin: 0 5px; }
.r4 { margin: 0 4px; }
.r3 { margin: 0 3px; }
.r2 { margin: 0 2px; }
.r1 { margin: 0 1px; }
#rounded-box{
width: 320px;
}
#rounded-box .inner-box, #rounded-box b {
background-color: #dddddd;
}
.inner-box {
padding:1em;
}


HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>
<meta
http-equiv="content-type" content="text/html; charset=utf-8" />
<meta
name="author" content="Andrew Godjatsky" />
<link
rel="stylesheet" type="text/css" media="screen" href="./style/design.css" />

<title>
Верстаем дивом</title>
</head>

<body>
<br />
<center><div
id="rounded-box">

<b
class="r5"></b>
<b
class="r4"></b>
<b
class="r3"></b>
<b
class="r2"></b>
<b
class="r1"></b>
<b
class="r1"></b>

<div
class="inner-box">
<?php
echo $weather; ?>
</div>
<b
class="r1"></b>
<b
class="r1"></b>
<b
class="r2"></b>
<b
class="r3"></b>
<b
class="r4"></b>
<b
class="r5"></b>
</div></center>
</body>
</html>


PHP:
index
<?php
include './libs/view.php'; // Функции getTpl и parseTpl

$link = 'http://meteo.com.ua/forecast_hmc/1'; // Адресс
$date = date('d-m-Y-H'); // Дата (ДД-ММ-ГГГГ-ЧЧ)
$file = './tpl/weather/weather.txt'; // Имя файла

echo $date . '<br>';
echo date('d-m-Y-H', filemtime($file)) . '<br>';

function GetInformation($link) // Функция для чтения страницы
{
$fd = fopen($link, 'r');
$text = '';

if($fd)
while(!feof($fd))
$text .= fgets($fd, 4096);

fclose($fd);

return $text;
}

function GetData($var) // Функция возвращает массив с нужными данными
{
$pattern = "'<[\/\!]*?[^<>]*?>'si";

$var = preg_replace($pattern, '|', $var);
$var = explode('|', $var);

return $var;
}

if(file_exists($file) && date ('d-m-Y-H', filemtime($file)) == $date) // Проверяем наличие фала и время последнего обновления.
{
$weather = file_get_contents($file);
echo 'работем с файлом';
}
else
{
echo 'работем со скриптом';
$ch = curl_init($link); // Инициализируем сеанс CURL

curl_setopt($ch, CURLOPT_HEADER, 1); // Получаем заголовок
curl_setopt($ch, CURLOPT_NOBODY, 1); // Тело страницы не загружаем
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Возвращаем результат

$res = curl_exec($ch); // Записываем его в переменную

curl_close($ch); // Завершаем сеанс и освобождаем ресурсы

if (strstr($res, 'HTTP/1.1 200 OK')) // Если URL верный:
{


$html = GetInformation($link);

$html = explode('</TR>', $html);

$date = GetData($html[1]);
$day = GetData($html[3]);
$night = GetData($html[5]);

//Направление ветра
$wind = array(
'південний' => 'south',
'південно-західний' => 's-w',
'західний' => 'west',
'північно-західний' => 'n-w',
'північний' => 'north',
'північнно-східний' => 'n-e',
'східний' => 'east',
'південно-східний' => 's-e');

foreach($wind as $var => $val) // Ищем совпадения для вывода картинки соответствующего направления ветра
{
if($var == trim($day['17']))
$d_wind = $wind[$var];

if($var == trim($night['28']))
$n_wind = $wind[$var];
}

// Выводим результат
$tpl = getTpl('./weather/weather');
$data['date'] = $date['7'] . ' ' . $date['3'] . ' ' . date('Y') . ' року у м. Київ';
$data['d_temp'] = $day['4'] . ' °C';
$data['d_prec'] = $day['9'];
$data['d_wind'] = './images/' . $d_wind . '.png';
$data['d_power_wind'] = $day['18'];
$data['n_temp'] = $night['15'] . ' °C';
$data['n_prec'] = $night['20'];
$data['n_wind'] = './images/' . $n_wind . '.png';
$data['n_power_wind'] = $night['29'];

$parse = parseTpl($tpl, $data);
$weather = $parse;

file_put_contents($file, $parse); // Записываем данные в файл
}
else
$weather = 'Не правильный URL';
}

include './tpl/index.htm';
?>


view
<?php
define('IRB_ROOT', str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']));

/**
* Function of reading of templates
* Функция чтения шаблонов
*/

function getTpl($tpl)
{
if(file_exists(IRB_ROOT .'/tpl/'. $tpl .'.tpl'))
return file_get_contents(IRB_ROOT .'/tpl/'. $tpl .'.tpl');
else
include
IRB_ROOT . '/tpl/ no_page.tpl';
die('The template <b>'. $tpl .'.tpl</b> is absent in the specification');
}

/**
* Function of analysis of a template
* Функция разбора шаблона
*/

function parseTpl($cont, $data = '')
{
if(is_array($data))
{
extract($data, EXTR_PREFIX_ALL, 'tpl');

ob_start();
eval('?>'. $cont .'<?php ');
$cont = ob_get_contents();
ob_end_clean();
}
return $cont;
}
?>


Изображения

Вот забыл шаблон добавить:
    <table border="0" cellpadding="0" cellspacing="0" id="weather">
<tr>
<td
colspan="5" bgcolor="white">Прогноз погоди на <?php echo $tpl_date;?></td>
</tr>
<tr>
<td
width="35px"><img src="./images/sun.png" /></td>
<td
width="70px"><?php echo $tpl_d_temp; ?></td>
<td
width="80px"><?php echo $tpl_d_prec; ?></td>
<td
width="35px"><img src="<?php echo $tpl_d_wind; ?>"></td>
<td
width="55"><?php echo $tpl_d_power_wind; ?></td>
</tr>
<tr>
<td
width="35px"><img src="./images/moon.png" /></td>
<td
width="70px"><?php echo $tpl_n_temp; ?></td>
<td
width="80px"><?php echo $tpl_n_prec; ?></td>
<td
width="35px"><img src="<?php echo $tpl_n_wind; ?>"></td>
<td
width="55"><?php echo $tpl_n_power_wind; ?></td>
</tr>
</table>

Спустя 5 минут, 51 секунда (1.09.2010 - 16:28) twin написал(а):
Класс. Я посмотрю по позже и, если не против, размещу рядом с валютой.

Спустя 1 минута, 49 секунд (1.09.2010 - 16:30) Evilsoul написал(а):
Нет, совсем не против.

Спустя 3 часа, 58 минут, 9 секунд (1.09.2010 - 20:28) Evilsoul написал(а):
ВОТ пример, тот хостинг дурацкий.

Спустя 4 дня, 17 часов, 58 секунд (6.09.2010 - 13:29) Evilsoul написал(а):
ApuktaChehov говорит - что Понедельник - день бездельник! smile.gif но меня ударило в работу )

Я всё пытаюсь улучшить код и сделать его более полезным, с его помощью можно создавать прогноз погоды, курс валют вытягивая данные с оф. сайтов или ещё что-то полезное, кому что нравится.

Буду благодарен если у кого будут замечания или предложения.

/* Бесплатные хостинги пишут что у меня плохой код и не хотят с ним работать ... ( К сожалению визуальный пример не могу показать.

Функции для вывода взяты от сюда; */

Массивы с данными можно увеличивать по собственному желанию, мне для погоды и курса валют достаточно 3.

Вот что из этого вышло:

Класс

/**
*
@author Godjatsky Andrew
*
@copyright 2010
*/


class GetDataHtml
{
private $pattern = "'<[\/\!]*?[^<>]*?>'si"; //для уборки HTML тэгов
private $link = ''; // Адрес страницы
private $separator = ''; // Разделитель (по определённому тегу разбываем на строки)
// за частую погода и валюта формируется в таблицах, поэтому разделять лучьше строковыми тэгами </tr>

private $int_arr_1 = 0; // индексы нужных сторк с данными, большой минус класса, их нужно знать точно
private $int_arr_2 = 1;
private $int_arr_3 = 2;

public function __construct($link, $file, $separator, $int_arr_0, $int_arr_1, $int_arr_2)
{
$this->link = $link;
$this->file = $file;
$this->separator = $separator;
$this->int_arr_0 = $int_arr_0;
$this->int_arr_1 = $int_arr_1;
$this->int_arr_2 = $int_arr_2;
}

public function setData()
{
$ch = curl_init($this->link); // Инициализируем сеанс CURL

curl_setopt($ch, CURLOPT_HEADER, 1); // Получаем заголовок
curl_setopt($ch, CURLOPT_NOBODY, 1); // Тело страницы не загружаем
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Возвращаем результат

$res = curl_exec($ch); // Записываем его в переменную

curl_close($ch); // Завершаем сеанс и освобождаем ресурсы

if (strstr($res, 'HTTP/1.1 200 OK')) // Если URL верный:
{
$html = getInformation($this->link);
$html = explode($this->separator, $html);

$data = array('1' => getData($html[$this->int_arr_0]), '2' => getData($html[$this->int_arr_1]), '3' => getData($html[$this->int_arr_2]));

return $data; // возвращаем данные многомерным массивом
}
else
return
$data[1] = 'Не правильный URL';
}

private function getInformation($link) // Функция для чтения страницы
{
$fd = fopen($this->link, 'r');
$text = '';

if($fd)
while(!feof($fd))
$text .= fgets($fd, 4096);

fclose($fd);

return $text;
}

private function getData($var) // Функция возвращает массив с нужными данными
{
$var = preg_replace($pattern, '|', $var);
$var = explode('|', $var);

return $var;
}

}



Здесь использование класса и вывод информации.
/**
*
@author Godjatsky Andrew
*
@copyright 2010
*/


$link = 'http://www.bank.gov.ua//Fin_ryn/OF_KURS/Currency/FindByDate.aspx'; // Адрес
$date = date('d-m-Y-H-i-s'); // Дата (ДД-ММ-ГГГГ-ЧЧ)
$file = './tpl/exchange_rate/exchange_rate.txt'; // Имя файла
$separator = '</tr>';
$int_arr_0 = 16;
$int_arr_1 = 18;
$int_arr_2 = 27;


echo '<br>' . $date . '<br>';
echo date('d-m-Y-H-i-s', filemtime($file)) . '<br>';


if(file_exists($file) && date ('d-m-Y-H-i-s', filemtime($file)) == $date) // Проверяем наличие фала и время последнего обновления.
{
$exchange_rate = file_get_contents($file); //читаем данные из файла
echo 'работем с файлом';
}
else
{
echo 'работем со скриптом';
include './getdatahtml.php'; // Подключаем класс

$obj = new GetDataHtml($link, $file, $separator, $int_arr_0, $int_arr_1, $int_arr_2); //передаём данные в класс
$arr = $obj->setData(); // Получаем результат в виде многомерного массива
//print_r($arr);
// Выводим результат

$tpl = getTpl('./exchange_rate/exchange_rate');
$data['date'] = $date;
$data['Ucurrency'] = ' 1 ' . $arr['1']['4'] . ' = ' . number_format($arr['1']['10']/100,2);
$data['Ecurrency'] = ' 1 ' . $arr['2']['4'] . ' = ' . number_format($arr['2']['10']/100, 2);
$data['Rcurrency'] = ' 1 ' . $arr['3']['4'] . ' = ' . number_format($arr['3']['10']/10, 2);

$parse = parseTpl($tpl, $data); // Выводим информацию И...
$exchange_rate = $parse;

file_put_contents($file, $parse); // ... Записываем данные в файл
}



Вот архив, не пугайтесь там немного мусорно, тестовая папка )


_____________
Кто хочет, ищет возможности, кто не хочет - причины. /_ К. Маркс
Истенно велик тот человек который сумел овладеть своим временем. /_Гесиод VIII-VII вв. до Р. Х.
Медлительный непрерывно борится с бедами всю жизнь. /_Гесиод VIII-VII вв. до Р. Х.
Для того что бы увидеть радугу нужно пережить дождь.
Женщины: Хочется чего-то красного но синего.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.