在widgets目录新建weather目录
创建WeatherWidget.php
<?php namespace frontend\widgets\weather; use yii\base\Widget; /** * * @author xiaoxie * */ class WeatherWidget extends Widget { public function postUrl($url, $data = []) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $handles = curl_exec($ch); curl_close($ch); return $handles; } public function getUrl($url, $data = []) { $ch = curl_init(); // 设置选项,包括URL curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER, 0); // 执行并获取HTML文档内容 $output = curl_exec($ch); // 释放curl句柄 curl_close($ch); return $output; } /** * 获取经纬度 * * @return mixed */ public function getPoint() { $latlon = $this->postUrl('http://api.map.baidu.com/location/ip?ak=CXtGNbmUioe3pfZ0yvnsNDjaYj63vQ8C&coor=bd09ll'); $latlonarr = json_decode($latlon, true); $point = $latlonarr['content']['point']; return $point; } /** * 根据经纬度获取城市 * * @param unknown $point * @return mixed */ public function getCity() { $ip = $_SERVER["REMOTE_ADDR"]; $city = $this->getUrl('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=' . $ip); $cityarr = json_decode($city, true); // 城市名称 $cityname = $cityarr['city']; return $cityname; } /** * 获取天气预报接口 * * @return string|number[] */ public function getWeatherinfo() { $cityname = $this->getCity(); // print_r($cityname);exit; $data = $this->getUrl('http://www.sojson.com/open/api/weather/json.shtml?city=' . $cityname); $weatherdata = json_decode($data, true); $weatherarr = []; if ($weatherdata['status'] == 200) { foreach ($weatherdata['data']['forecast'] as $key => $value) { $weatherarr[$key]['date'] = $value['date']; $weatherarr[$key]['high'] = $value['high']; $weatherarr[$key]['low'] = $value['low']; $weatherarr[$key]['fx'] = $value['fx']; $weatherarr[$key]['fl'] = $value['fl']; $weatherarr[$key]['type'] = $value['type']; $weatherarr[$key]['notice'] = $value['notice']; $weatherarr[$key]['icon'] =$value['icon']; } } else { $weatherarr['status'] = 500; $weatherarr[0]['date'] = date('Y-m-d'); $weatherarr[0]['icon'] = ''; $weatherarr[0]['high'] = ''; $weatherarr[0]['low'] = ''; $weatherarr[0]['fx'] = ''; $weatherarr[0]['fl'] = ''; $weatherarr[0]['type'] = '正在掐指计算'; $weatherarr[0]['notice'] = '正在加载中'; } return $weatherarr; } /** * * {@inheritdoc} * @see \yii\base\Widget::run() */ public function run() { $point = $this->getPoint(); $cityname = $this->getCity($point); $weatherarr = $this->getWeatherinfo(); $i = 0; foreach ($weatherarr as $key => $value) { if (substr($value['date'], 0, 2) == date('d')) { $i = $key; } } return $this->render('index', [ 'data' => $weatherarr, 'city' => $cityname, 'i' => $i ]); } }
创建一个视图文件index.php
<div class="fright"> <div class="module weather_detail"> <div id="weatherInfo" style=""> <div class="btitle"> <h2><?=$city ?>市天气预报</h2> </div> <div class="bmeta"> <?php if(Yii::$app->request->get('type') == 'more'):?> <div class="row"> <div class="col-lg-12"> <?php foreach ($data as $list):?> <div class="stitle"><?=$list['date'] ?> <span style='color: #5BC0DE'><?=$list['type'] ?></span> <span style='font-family: cursive;'> <?=$list['fx'] ?></span> </div> <div class="panel"></div> <?php endforeach;?> </div> </div> <?php else:?> <div class="days2"> <div class="row"> <div class="stitle"> <span style='padding-left: 5%'>今天</span> <?=$data[$i]['date'] ?></div> <div class="panel"></div> <div class="col-lg-8" style='padding-left: 20%'> <div class="icon"> <span id="dayIcon" class="<?=$data[$i]['icon'] ?>"></span> </div> <div class="phrase"> <em>天气:</em><span id="dayTxt"><?=$data[$i]['type'] ?></span> </div> </div> </div> <div class='panel'></div> <div class="row" style='padding-left: 20%'> <div class="temperature"> <span class="low" id="lowT"><?=$data[$i]['low'] ?></span>~<span class="high" id="highT"><?=$data[$i]['high'] ?></span> </div> <div class="panel" style='padding-top: 5px'>风向:<?=$data[$i]['fx'] ?></div> <div class="panel" style='padding-top: 5px'> <span style='color: red'>温馨提醒:<?=$data[$i]['notice'] ?></span> </div> <a class="layer today-layer" href="/today-58362.htm" target="_blank" id="todayHref"></a> </div> </div> <div class="panel"></div> <?php endif;?> <div class="row"> <div class="col-lg-12" style='padding-left: 7%'> <a href="<?=Url::to(['site/index','type'=>'more']) ?>"><div class="btn-more btn btn-info btn-block btn-post">查看7日天气预报</div></a> </div> </div> </div> </div> </div> </div>