Ruskat Опубликовано 25 марта, 2014 Поделиться Опубликовано 25 марта, 2014 Решил побаловаться я плюшками от Highcharts Сделал скрипт прогноза погоды от Гисметео. Выглядит так: Код таков: $city_id = "4953"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, '__www.gismeteo.ua/ua/month/.$city_id./'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); $g_d = curl_exec($ch); // Витягуємо графіку $rs01 = explode('<ul class="wtools">',$g_d); $g_d1 = $rs01[1] ; $rs3 = explode('<script type="text/javascript">',$g_d1); $pics = $rs3[0]; //Обробка preg_match("!class="wtitle">(.*?)</h1>!si", $pics, $city_name); // отримуємо назву міста // Діаграма на місяць $rs2 = explode('<div class="rframe" id="graph"><div class="fcontent">',$g_d); $g_d2 = $rs2[1] ; $rs4 = explode('</div></div>',$g_d2); $diagram = $rs4[0]; //Обробка //Максимальна температура preg_match("!c:[(.*?)],!si", $diagram, $deg_max); $dg_max = explode(",", $deg_max[1]); //var_dump ($dg_max); $picts01 = strip_tags($pics, '<img>'); preg_match_all("!<img src=(.*?)/>!si", $picts01, $picts); //Мінімальна температура preg_match("!cmin:[(.*?)],!si", $diagram, $deg_min); $dg_min = explode(",", $deg_min[1]); preg_match("!x:[(.*?)],!si", $diagram, $date); $count = count($dg_min); $i=-1; $pl =''; $dt_bgn = new DateTime(date('d-m-Y',strtotime('0 day'))); $dt_end = new DateTime(date('d-m-Y',strtotime('+'.$count.' day'))); $dt_end1 = $dt_end->modify('+1 day'); $interval = new DateInterval('P1D'); $daterange = new DatePeriod($dt_bgn, $interval ,$dt_end1); $datas = array($dg_min, $dg_max, $daterange); foreach($daterange as $date): $i++; $f_data = $date->format("d.m"); $pl .= "'$f_data'"; if($i<$count)$pl .=','; endforeach; // Відмінювання-старт // $n=$i; // Вставляємо кількість днів $n = $n % 100; $n1 = $n % 10; if ($n > 10 && $n < 20) $word = "днів"; else{ if ($n1 > 1 && $n1 < 5) $word = "дні"; else{ if ($n1 == 1) $word = "день"; else $word = "днів"; }} // Відмінювання-фініш // ?> <script type="text/javascript" src"__code.jquery.com/jquery-git2.js"></script> <script type="text/javascript" charset="utf-8">jQuery.noConflict();</script> <script type="text/javascript"> jQuery(function () { jQuery('#container').highcharts({ chart: { type: 'spline' }, title: { text: 'Прогноз погоди у <?php echo substr($city_name[1],16,-17); ?> ' }, subtitle: { text: 'на <?php echo $i." {$word}";?> .' }, xAxis: { categories: [<?php echo $pl; ?>] }, yAxis: { title: { text: 'Teмпература' }, labels: { formatter: function() { return this.value +'°С' } } }, tooltip: { crosshairs: true, shared: true, valueSuffix: '°C' }, plotOptions: { spline: { marker: { radius: 5, lineColor: '#aaa', lineWidth: 4 } } }, series: [{ name: 'Максимальна температура', lineColor: '#ff0000', color: 'rgba(255, 0, 0, 1)', marker: { symbol: 'square' }, //data: [<?php echo $deg_max[1]; ?>] <?php $count = count($picts[1]); $i=-1; $pl ='data: ['; foreach($picts[1] as $pic): $i++; $pl .= "{y:{$dg_max[$i]},"; $pl .= "marker: {symbol: 'url({$pic})'}"; $pl .= "}"; //$pl .= $pic; if($i<$count)$pl .=','; endforeach; echo $pl."]"; ?> }, { name: 'Мінімальна температура', lineColor: '#0022ff', color: 'rgba(0, 150, 255, 1)', marker: { symbol: 'diamond' }, data: [<?php echo $deg_min[1]; ?>] }] }); }); </script> <script src="__code.highcharts.com/highcharts.js"></script> <script src="__code.highcharts.com/modules/exporting.js"></script> <div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div> Можете подганать под себя... Аякс не конфликтует. Мона сохранять скрины, делать виджет нужных размеров... Подправлено несколько нюансов... Так как прогнозы по колличеству дней меняются, то в строке $dt_end = new DateTime(date('d-m-Y',strtotime('+'.$count.' day'))); указано не конкретное число прогнозируемых дат, а переменная, которая выведет колличество дат исходя из колличества цифр минимальных температур, которые разделены изначально запятой. Проработал падежи // Відмінювання-старт // $n=$i; // Вставляємо кількість днів $n = $n % 100; $n1 = $n % 10; if ($n > 10 && $n < 20) $word = "днів"; else{ if ($n1 > 1 && $n1 < 5) $word = "дні"; else{ if ($n1 == 1) $word = "день"; else $word = "днів"; }} // Відмінювання-фініш // относительно надписи, на сколько дней предоставлен прогноз. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Insider Опубликовано 25 марта, 2014 Поделиться Опубликовано 25 марта, 2014 все хорошо, но надо бы дописать, чтобы укранийский язык на русский не забыли изменить ) а то есть такие кто не читают, а просто копи-паст... Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ruskat Опубликовано 25 марта, 2014 Автор Поделиться Опубликовано 25 марта, 2014 Insider, а... ну да... Локализацию нужно изменить )) Сам то я под себя делал. но Укр, это не китайский. +/- понятно, думаю ;-) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Insider Опубликовано 25 марта, 2014 Поделиться Опубликовано 25 марта, 2014 Insider, а... ну да... Локализацию нужно изменить )) Сам то я под себя делал. но Укр, это не китайский. +/- понятно, думаю ;-) ну почти... я его часто не понимаю придется своих личных украина - русских переводчиков спрашивать Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ruskat Опубликовано 25 марта, 2014 Автор Поделиться Опубликовано 25 марта, 2014 Insider, Сочувствую... мне же легче на много в плане понимания. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.