首页 > 代码库 > 【微信公众平台开发】封装获取天气预报功能

【微信公众平台开发】封装获取天气预报功能


微信公众平台小功能多点,可以增加用户的粘性,不会感觉你微信没内容,就把你给取消关注了。所以得折腾各种有的没的东西。

个人封装天气预报功能代码如下(说明下:网上有很多此类代码,但是要自己理解,就得实际折腾)
<?php
header('Content-Type:text/html;charset=utf-8');
class WeChatMsgType
{
	private  $toUserName;
	private  $fromUserName;
	private  $xmlModle;
	private  $createTime;
	
	public function SetUserInfo($toUserName,$fromUserName) //设置用户信息
	{
		$this->toUserName = $toUserName;
		$this->fromUserName = $fromUserName;
		$this->createTime = time();
	}
	
	
       
	public function WeatherMsg($cityName)	//天气预报信息
	{
		$url = "http://api.map.baidu.com/telematics/v3/weather?location=".$cityName."&output=json&ak=11ffd27d38deda622f51c9d314d46b17";
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_URL, $url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		$output = curl_exec($ch); 
		curl_close($ch);
		$result = json_decode($output, true);
		if ($result["error"] != 0){
			return $result["status"];
		}
		$curHour = (int)date('H',time());
		
		$weather = $result["results"][0];
		
		$ImageTexts = array();
		
		$ImageTexts[0] = self::SetImageTextInfo($weather['currentCity'].'天气预报',"", "", "");
		//$aa=var_export(urldecode(urlencode($weather)),true);
		//file_put_contents("debug.txt", date("Y-m-d H:i:s",time()).$aa.PHP_EOL,FILE_APPEND);
		for($i=0; $i<count($weather['weather_data']); $i++)
		{
			$ImageTexts[$i+1] = self::SetImageTextInfo($weather["weather_data"][$i]["date"]."\n".
            $weather["weather_data"][$i]["weather"]." ".
            $weather["weather_data"][$i]["wind"]." ".
            $weather["weather_data"][$i]["temperature"],
					"", (($curHour >= 6) && ($curHour < 18))?$weather["weather_data"][$i]["dayPictureUrl"]:$weather["weather_data"][$i]["nightPictureUrl"], "");
		}
		
		return self::ImageTextMsg($ImageTexts);
	}
	
	
	
	public function SetImageTextInfo($sTitle, $sDescription, $sPicUrl, $Url) 
	{
		$item = "<item>
				<Title><![CDATA[%s]]></Title> 
				<Description><![CDATA[%s]]></Description>
				<PicUrl><![CDATA[%s]]></PicUrl>
				<Url><![CDATA[%s]]></Url>
				</item>
				";
		$ret=sprintf($item, $sTitle, $sDescription, $sPicUrl,$Url);
		return $ret;
	}
	
	public function ImageTextMsg($ImageTexts)
	{
		$this->xmlModle = "<xml>
				<ToUserName><![CDATA[%s]]></ToUserName>
				<FromUserName><![CDATA[%s]]></FromUserName>
				<CreateTime>%s</CreateTime>
				<MsgType><![CDATA[news]]></MsgType>
				<ArticleCount>%d</ArticleCount>
				<Articles>
				";
		foreach ($ImageTexts as $item)
		{
			$this->xmlModle = $this->xmlModle.$item;
		}
		$this->xmlModle = $this->xmlModle."</Articles></xml>" ;
		
		$ret=sprintf($this->xmlModle, $this->fromUserName, $this->toUserName, $this->createTime,count($ImageTexts));
		return $ret;
	}
}
?>

调用用法:
$weChatMsgType = new WeChatMsgType();
$weChatMsgType->SetUserInfo($this->toUserName, $this->fromUserName);
$resultStr=$weChatMsgType->WeatherMsg("北京");



注:上面ak同百度周边搜索篇说明一样,不懂看前面