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 = "днів"; }} // Відмінювання-фініш // относительно надписи, на сколько дней предоставлен прогноз. Link to comment https://ipbmafia.ru/topic/7632-prognoz-pogody-s-pomoshyu-highcharts/ Share on other sites Больше вариантов
25 марта, 201410 yr comment_59540 все хорошо, но надо бы дописать, чтобы укранийский язык на русский не забыли изменить ) а то есть такие кто не читают, а просто копи-паст... Link to comment https://ipbmafia.ru/topic/7632-prognoz-pogody-s-pomoshyu-highcharts/?&do=findComment&comment=59540 Share on other sites Больше вариантов
25 марта, 201410 yr Author comment_59541 Insider, а... ну да... Локализацию нужно изменить )) Сам то я под себя делал. но Укр, это не китайский. +/- понятно, думаю ;-) Link to comment https://ipbmafia.ru/topic/7632-prognoz-pogody-s-pomoshyu-highcharts/?&do=findComment&comment=59541 Share on other sites Больше вариантов
25 марта, 201410 yr comment_59542 Insider, а... ну да... Локализацию нужно изменить )) Сам то я под себя делал. но Укр, это не китайский. +/- понятно, думаю ;-) ну почти... я его часто не понимаю придется своих личных украина - русских переводчиков спрашивать Link to comment https://ipbmafia.ru/topic/7632-prognoz-pogody-s-pomoshyu-highcharts/?&do=findComment&comment=59542 Share on other sites Больше вариантов
25 марта, 201410 yr Author comment_59543 Insider, Сочувствую... мне же легче на много в плане понимания. Link to comment https://ipbmafia.ru/topic/7632-prognoz-pogody-s-pomoshyu-highcharts/?&do=findComment&comment=59543 Share on other sites Больше вариантов
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.