微信天气环境质量

来源:互联网 发布:java贪吃蛇小程序 编辑:程序博客网 时间:2024/05/02 04:50

最近我们公司终于认识到微信的重要性,申请了公众平台,没事干,然后想着能不能开发一下微信的后台,据说微信后台开发一般使用微信+新浪Sae模式,那就是用这个模式把。

第一步当然是申请sae了网址 http://sae.sina.com.cn/

第二步开启微信公众平台开发者模式,验证token和url通过,就能使用远程服务器了。

第三步用php编写代码  

<?php/**  * ΢@author wang zhanliang.  */// define your tokendefine ( "TOKEN", "weixin" );$wechatObj = new wechatCallbackapiTest ();$wechatObj->responseMsg ();class wechatCallbackapiTest {public function responseMsg() {// get post data, May be due to the different environments$postStr = $GLOBALS ["HTTP_RAW_POST_DATA"];date_default_timezone_set("Asia/Hong_Kong");// extract post dataif (! empty ( $postStr )) {$postObj = simplexml_load_string ( $postStr, 'SimpleXMLElement', LIBXML_NOCDATA );$fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;$keyword = trim ( $postObj->Content );$time = time ();$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";$picTpl = "<xml>                       <ToUserName><![CDATA[%s]]></ToUserName>                       <FromUserName><![CDATA[%s]]></FromUserName>                       <CreateTime>%s</CreateTime>                       <MsgType><![CDATA[%s]]></MsgType>                       <ArticleCount>1</ArticleCount>                       <Articles>                       <item>                       <Title><![CDATA[%s]]></Title>                        <Description><![CDATA[%s]]></Description>                       <PicUrl><![CDATA[%s]]></PicUrl>                       <Url><![CDATA[%s]]></Url>                       </item>                       </Articles>                       <FuncFlag>1</FuncFlag>                       </xml> ";                    if (trim ( $postObj->MsgType ) == "event" and trim ( $postObj->Event ) == "subscribe") {$msgType = "news";                $title = "欢迎";$data = date ( 'Y-m-d' );$desription = "感谢您关注【步青科技】" . "\n" . "步青科技为您提供完美的建筑监测与室内环境治理方案。" . "\n" . "本订阅号功能如下:" . "\n" . "【1】居室我知道" . "\n" . "【2】建筑我知道" . "\n" . "【3】今日环境  输入:如:郑州环境" . "\n" . "【4】优惠活动" . "\n" . "【5】关注我们" . "\n" . "【6】联系我们" . "\n" . "【7】了解更多" . "\n";                $image = "http://h.hiphotos.bdimg.com/album/s%3D1600%3Bq%3D90/sign=406a9d51d300baa1be2c43bd77208263/0b46f21fbe096b6329730eed0e338744ebf8ac21.jpg";$turl = "http://siteapp.baidu.com/webapp/www.shbq.com?host=www.shbq.com";$resultStr = sprintf ( $picTpl, $fromUsername, $toUsername, $time, $msgType, $title, $desription, $image, $turl );echo $resultStr;}else if (! empty ( $keyword )) {$msgType = "text";                                    $kv = new SaeKV();                    // 初始化KVClient对象                    $ret = $kv->init();                    //天气                    $str = mb_substr($keyword,-2,2,"UTF-8");                    $str_key = mb_substr($keyword,0,-2,"UTF-8");                    if($str == '环境' && !empty($str_key)){                        $xml_uri = 'http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName='.$str_key;                        $dom = simplexml_load_file($xml_uri);                         $str ="";                        foreach($dom as $k=>$v)                        {                            $str .= $v."||";                        }                        $strs = explode("||", $str);                    if(empty($strs[1])){               $contentStr = "抱歉,没有查到\"".$str_key."\"的环境信息!";                    } else {                                  $ret = $kv->get($str_key)->time_point;                        $time2 =  strtotime(substr( $ret,0,10)." ".substr( $ret,11,8)) ;                        $time1 = strtotime(date( "Y-m-d H:i:s"));                         $sub1 = ceil(($time2 - $time1) / 3600);    //60 * 60                        if($sub<-1){                            //更新数据                            $urlpm = "http://www.pm25.in/api/querys/aqi_ranking.json?token=XXXXXXXXXX";                            $weather = file_get_contents ( $urlpm);                            $weatherJsonpm = json_decode($weather);                            foreach ( $weatherJsonpm as $key ) {                                  $ret = $kv->set($key->area, $key);                            }                          }                        // 获得key-value                          $ret = $kv->get($str_key);                                                                $contentStr = "【".$ret->area."天气及空气质量预报】\n".                                 $strs[6]."\n".                                 $strs[10]."\n".                                "AQI指数:".$ret->aqi."\n".                                "空气质量:".$ret->quality."\n".                                "等级:".$ret->level."\n".                                "首要污染物:".$ret->primary_pollutant."\n".                                "一氧化碳CO:".$ret->co."(mg/m3)"."\n".                                "二氧化氮NO2:". $ret->no2."(μg/m3)"."\n".                                "二氧化硫SO2:".$ret->so2."(μg/m3)"."\n".                                "臭氧O3:".$ret->o3."(μg/m3)"."\n".                                "PM10:".$ret->pm10."(μg/m3)"."\n".                                "PM2.5:".$ret->pm2_5."(μg/m3)"."\n".                                "-------"."\n".                                "天气数据". $strs[4]."时发布,数据有中国天气网提供(感谢WeatherWebService无偿提供api).\n".                                "空气质量数据".$ret->time_point."时发布,数据有中国环保局提供(感谢PM25.in无偿提供api).";                                }                         $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);                         echo $resultStr;                    }}} else {echo "input something";exit ();}}}?>

define ( "TOKEN", "weixin" );就是与微信建立连接的token,一定要一致。

由于需要有天气和环境的数据,所以需要调用第三方的api
天气数据是 使用传说中的http://m.weather.com.cn/data/101010100.html,坑爹的是有一天我突然发现数据不更新了,百度了一下才知道原来是这个api暂停了免费服务了,很无语。。。既然不能用就用其他的api吧,找了一下最终决定使用http://www.webxml.com.cn/WebServices/WeatherWebService.asmx提供的免费api,楼主好人啊,可是这个api是xml格式的,所以在接收到的数据需要
$xml_uri = 'http://www.webxml.com.cn/WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName='.$str_key;
$dom = simplexml_load_file($xml_uri); //获得城市的xml文件
$str ="";
$v."||";//
foreach($dom as $k=>$v)
{
$str .
=把xml形式的文件转化为字符串,且每个item以||符号分割?这是为嘛?为了方便的将字符串转为数组,方面后面的读取
}
}
$strs = explode("||", $str);//嘻嘻
$strs[n]读item的值,好了天气数据已经得到啦
那么怎么得到环境质量数据呢?提供环境质量数据的公司少之又少啊,更何况是免费的api,找了很久终于找到一个免费提供环境质量api的组织了,http://www.pm25.in/,楼主好人呐。不过要使用免费api的话需要先申请token,申请很快,得到token不要急着调用api,因为考虑到服务器的工作压力,调用api的次数是有限制的。那怎么办呢?执手相看泪眼竟无语凝噎...
哈哈,真好,pm2.5.in.提供的api返回格式是json,而sae提供了一个就KVDB的数据库,据说这个数据库是mongodb的一个变种,而mongodb最大的特色就是保存数据格式是json,查询结果也是json返回。这不正好。。。使用KVDB做缓存数据。
这样就解决了多次调用api限制的问题了。
好了,看下结果吧。


                                             
0 0
原创粉丝点击