微信公众平台天气预报功能开发

本来是想自己直接从中国天气网获取信息并处理,后来发现处理起来太麻烦,而且要获取所有城市的城市编码,再有就是!不支持国外天气!!(我们学校有很多毕业生在国外上学,所以我考虑还是做出支持国外天气的版本)

因此考虑直接调用别人的API,一开始选用了方倍工作室已经做好的接口(无奈也没有国外)。直到有一天返回北京天气温度是零下的时候(当时天热到不敢出门)。。。换!换!换!

后来终于发现最靠谱的接口----百度的天气API。

废话少说,首先大家要上 百度地图API申请一个专用key(大概一分钟就搞定了,很方便)
代码如下:

//图文信息2 for 天气【这是微信的图文信息模板】
  $tqTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>5</ArticleCount>
<Articles>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
</Articles>
</xml> ";//最后发现最多只能看到五个item= =无语。。。

PHP代码

if(substr_count($keyword,'天气')!=0 && $keyword!='天气')
  {
   $geshu = substr_count($keyword,'天气');
   $t = explode("天气",$keyword);

   for($i=0;$i<=$geshu;$i++)
   {
    if($t[$i]!='')
    {
    $city = $t[$i];
    break;
    }

   }
   $mykey = "【这里换成你的API key】";
   $url = "http://api.map.baidu.com/telematics/v3/weather?location=".$city."&output=json&ak=".$mykey;
   $output = file_get_contents($url);
   $contentStr = json_decode($output, true);

   if($contentStr['status']=='success')
   {

    $T[0]['Title']=$contentStr['date']." ".$contentStr['results'][0]['currentCity']."天气";
//$T[0]['PicUrl']="http://zhengwairen-try2.stor.sinaapp.com/xytq.jpg";
//$T[0]['Url']="http://zhengwairen-try2.stor.sinaapp.com/xytq.jpg";
    //上面两行可以设成你想要的顶部图片
    if(is_array($contentStr['results'][0]['index']))
    {
    $T[2]['Title']="【pm2.5】".$contentStr['results'][0]['pm25']."\n"."【".$contentStr['results'][0]['index'][0]['title']."】"."(".$contentStr['results'][0]['index'][0]['zs'].") ".$contentStr['results'][0]['index'][0]['des'];
    //下一行是洗车指数,感觉不对主题还是不要的好。。
    //$T[2]['Title']=$T[2]['Title']."\n"."【".$contentStr['results'][0]['index'][1]['title']."】(".$contentStr['results'][0]['index'][1]['zs'].") ".$contentStr['results'][0]['index'][1]['des'];
    $T[2]['Title']=$T[2]['Title']."\n"."【".$contentStr['results'][0]['index'][2]['title']."】(".$contentStr['results'][0]['index'][2]['zs'].") ".$contentStr['results'][0]['index'][2]['des'];
    }
    else
    $guowai=1;
    for($i=1,$aaa=0;$i<=5;$i++)
    {
    if($i==2 && $guowai!=1)
     continue;
    if($guowai==1 && $i==5)
     continue;
    $T[$i]['Title']=$contentStr['results'][0]['weather_data'][$aaa]['date']." ".$contentStr['results'][0]['weather_data'][$aaa]['temperature']." ".$contentStr['results'][0]['weather_data'][$aaa]['weather']." ".$contentStr['results'][0]['weather_data'][$aaa]['wind'];
    $T[$i]['PicUrl']=$contentStr['results'][0]['weather_data'][$aaa]['dayPictureUrl'];
    $T[$i]['Url']=$contentStr['results'][0]['weather_data'][$aaa]['dayPictureUrl'];
    $aaa++;
    }

    $tianqi = sprintf($tqTpl,$fromUsername,$toUsername,time(),"news",$T[0]['Title'],$T[0]['Description'],$T[0]['PicUrl'],$T[0]['Url'], $T[1]['Title'],$T[1]['Description'],$T[1]['PicUrl'],$T[1]['Url'], $T[2]['Title'],$T[2]['Description'],$T[2]['PicUrl'],$T[2]['Url'], $T[3]['Title'],$T[3]['Description'],$T[3]['PicUrl'],$T[3]['Url'], $T[4]['Title'],$T[4]['Description'],$T[4]['PicUrl'],$T[4]['Url'],$T[5]['Title'],$T[5]['Description'],$T[5]['PicUrl'],$T[5]['Url']);
    echo $tianqi;
   }

  }

效果图如下:

将其中的$mykey变量改成自己的APIkey就行了。另外有一点让我不解的是,我微信用的图文模板明明是6个item,为什么回复实际效果只有5个呢= = 求广大网友帮忙解释

最后附代码说明。用户发送“北京天气”和“天气北京”都是可以的,所以首先做了字符串处理,得到正确的城市名。利用百度地图API给的网址,发出GET请求(其实就是直接访问),获取一个json类型的数据包。将数据包信息转成数组格式,对应的回复微信用户即可。国外的天气没有当天天气的具体说明,所以最后做了一点小修改。

(0)

相关推荐

  • ASP.NET使用WebService实现天气预报功能

    本文使用Asp.Net (C#)调用互联网上公开的WebServices(http://www.webxml.com.cn/WebServices/WeatherWebService.asmx)来实现天气预报,该天气预报 Web 服务,数据来源于中国气象局http://www.cma.gov.cn/,数据每2.5小时左右自动更新一次,准确可靠.包括 340 多个中国主要城市和 60 多个国外主要城市三日内的天气预报数据. 效果图 : 步骤 : 1 .新建web 项目,添加窗体. 2 . 引用右键

  • Jquery + Ajax调用webService实例代码(asp.net)

    webService中要实现ajax调用,则要加这句代码: // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释. [System.Web.Script.Services.ScriptService] 代码下载 /201008/yuanma/WebService2.rar 复制代码 代码如下: //无参数调用 $(document).ready(function() { $('#btn1').click(function() { $.ajax({ typ

  • asp.net(c#)动态修改webservice的地址和端口(动态修改配置文件)

    这个问题其实并没有我想像的那个复杂,我们都知道怎么直接修改吧,那就是修改WebConfig文件的配置节具体的方法看下面图片 这个相信很多人都知道,直接修改就行了动态修改方式----------------------------------------------------------那么怎么动态修改呢?我想可能很多人都会这样讲,修改WebConfig文件,有专用的帮助类,也可以自己写因为WebConfig是可以Xml的形来编辑的,对的这种方法确实是可行的那么我告诉你们,你们错了,有更简单而且

  • asp.net实现根据城市获取天气预报的方法

    本文实例讲述了asp.net实现根据城市获取天气预报的方法.分享给大家供大家参考,具体如下: public void GetWetheaerByCity(string cityName) { string city = cityName; string mycity = HttpUtility.UrlEncode(city, System.Text.Encoding.GetEncoding("GB2312")); System.Net.HttpWebRequest request =

  • asp.net类库中添加WebService引用出现问题解决方法

    在Web项目内添加WebService的引用是件很简单的事情,今天在类库中添加WebService引用时候,却遇到了问题,特此记录下来. 1.添加服务引用. 2.点击高级 3.添加Web引用 4.看到了就跟Web项目添加WebService一样了 添加完成后,再次点击 添加引用就出现了添加Web引用了

  • 使用ASP.NET一般处理程序或WebService返回JSON的实现代码

    示例代码下载: http://zsharedcode.googlecode.com/files/JQueryElementDemo.rar 本文中所包含的内容如下: * 准备  * 一般处理程序/ashx  * WebService/asmx准备 如果希望通过 ashx 或者 asmx 来返回 JSON, 那么需要引用程序集 System.Web.Extensions.dll, 在 .NET 3.5, 4.0 中已经默认包含. 对于 .NET 2.0, 3.0, 需要安装 ASP.NET 2.0

  • jQuery Ajax方法调用 Asp.Net WebService 的详细实例代码

    ws.aspx 代码 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1&q

  • Python天气预报采集器实现代码(网页爬虫)

    爬虫简单说来包括两个步骤:获得网页文本.过滤得到数据. 1.获得html文本. python在获取html方面十分方便,寥寥数行代码就可以实现我们需要的功能. 复制代码 代码如下: def getHtml(url): page = urllib.urlopen(url) html = page.read() page.close() return html 这么几行代码相信不用注释都能大概知道它的意思. 2.根据正则表达式等获得需要的内容. 使用正则表达式时需要仔细观察该网页信息的结构,并写出正

  • ASP.net(c#)打造24小时天气预报及实时天气

    本文详细介绍关于ASP.NET的实时天气及24小时天气预报 修改其中的url获得其他城市的天气情况的文章专题. ASP.NET的实时天气及24小时天气预报(C#)  修改其中的url获得其他城市的天气情况  如广州为:  http://weather.yahoo.com /forecast/CHXX0037_c.html  注意仅适用于获得yahoo上的天气预报 GetWeather.aspx  ----------------------------------- 复制代码 代码如下: <%@

  • Vista天气预报--修正不显示中国天气预报的BUG

    经过努力,修改了weather.js文件,可以获得中国的天气预报了! 之前已经由朋友说过,中国地区不能使用天气预报,是因为wlsrvc.dll文件检测到区域设置为中国,就返回1506,提示"您当前所在国家或地区不支持此服务." 其实如果我们直接在浏览器中输入地址是可以返回中国地区的天气预报的,因此我们可以绕过这个dll文件,自己修改脚本直接获取信息. 我们可以通过Microsoft.XMLDOM来获取网上的xml数据,然后把里面的数据解析到一个类中,返回给原来的脚本显示出来. 为了减少

随机推荐