Posted 25 марта, 201410 yr comment_59539 Решил побаловаться я плюшками от 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 = "днів"; }} // Відмінювання-фініш // относительно надписи, на сколько дней предоставлен прогноз.
25 марта, 201410 yr comment_59540 все хорошо, но надо бы дописать, чтобы укранийский язык на русский не забыли изменить ) а то есть такие кто не читают, а просто копи-паст...
25 марта, 201410 yr Author comment_59541 Insider, а... ну да... Локализацию нужно изменить )) Сам то я под себя делал. но Укр, это не китайский. +/- понятно, думаю ;-)
25 марта, 201410 yr comment_59542 Insider, а... ну да... Локализацию нужно изменить )) Сам то я под себя делал. но Укр, это не китайский. +/- понятно, думаю ;-) ну почти... я его часто не понимаю придется своих личных украина - русских переводчиков спрашивать
25 марта, 201410 yr Author comment_59543 Insider, Сочувствую... мне же легче на много в плане понимания.
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.