在这篇教程中,我们将介绍如何在微信公众平台上开发天气预报功能。我们将使用中国天气网的气象数据接口来获取天气信息。
这篇教程将介绍以下内容:
一、中国天气网
中国天气网提供了丰富的气象数据接口。下面我们介绍主要的几个:
国家根节点接口:
http://flash.weather.com.cn/wmaps/xml/china.xml
<span <</span><span city </span><span quName</span><span ="广东"</span><span pyName</span><span ="guangdong"</span><span cityname</span><span ="广州"</span><span state1</span><span ="2"</span><span state2</span><span ="7"</span><span stateDetailed</span><span ="阴转小雨"</span><span tem1</span><span ="8"</span><span tem2</span><span ="15"</span><span windState</span><span ="微风"</span><span /></span>
省级节点接口(以广东为例):
http://flash.weather.com.cn/wmaps/xml/Guangdong.xml
<span <</span><span city </span><span cityX</span><span ="409"</span><span cityY</span><span ="257"</span><span cityname</span><span ="深圳"</span><span centername</span><span ="深圳"</span><span fontColor</span><span ="FFFFFF"</span><span pyName</span><span ="shenzhen"</span><span state1</span><span ="1"</span><span state2</span><span ="1"</span><span stateDetailed</span><span ="多云"</span><span tem1</span><span ="12"</span><span tem2</span><span ="18"</span><span temNow</span><span ="12"</span><span windState</span><span ="微风"</span><span windDir</span><span ="东北风"</span><span windPower</span><span ="1级"</span><span humidity</span><span ="74%"</span><span time</span><span ="21:15"</span><span url</span><span ="101280601"</span><span /></span>
。
实时天气数据(以深圳为例):
http://www.weather.com.cn/data/sk/101280601.html
<span { </span><span "</span><span weatherinfo</span><span "</span><span : { </span><span "</span><span city</span><span "</span>: <span "</span><span 深圳</span><span "</span><span , </span><span "</span><span cityid</span><span "</span>: <span "</span><span 101280601</span><span "</span><span , </span><span "</span><span temp</span><span "</span>: <span "</span><span 12</span><span "</span><span , </span><span "</span><span WD</span><span "</span>: <span "</span><span 东北风</span><span "</span><span , </span><span "</span><span WS</span><span "</span>: <span "</span><span 1级</span><span "</span><span , </span><span "</span><span SD</span><span "</span>: <span "</span><span 75%</span><span "</span><span , </span><span "</span><span WSE</span><span "</span>: <span "</span><span 1</span><span "</span><span , </span><span "</span><span time</span><span "</span>: <span "</span><span 21:20</span><span "</span><span , </span><span "</span><span isRadar</span><span "</span>: <span "</span><span 1</span><span "</span><span , </span><span "</span><span Radar</span><span "</span>: <span "</span><span JC_RADAR_AZ9755_JB</span><span "</span><span } }</span>
六日天气数据(以深圳为例):
http://m.weather.com.cn/data/101280601.html
<span { </span><span "</span><span weatherinfo</span><span "</span><span : { </span><span "</span><span city</span><span "</span>: <span "</span><span 深圳</span><span "</span><span , </span><span "</span><span city_en</span><span "</span>: <span "</span><span shenzhen</span><span "</span><span , </span><span "</span><span date_y</span><span "</span>: <span "</span><span 2014年2月15日</span><span "</span><span , </span><span "</span><span date</span><span "</span>: <span ""</span><span , </span><span "</span><span week</span><span "</span>: <span "</span><span 星期六</span><span "</span><span , </span><span "</span><span fchh</span><span "</span>: <span "</span><span 18</span><span "</span><span , </span><span "</span><span cityid</span><span "</span>: <span "</span><span 101280601</span><span "</span><span , </span><span "</span><span temp1</span><span "</span>: <span "</span><span 12℃~18℃</span><span "</span><span , </span><span "</span><span temp2</span><span "</span>: <span "</span><span 16℃~21℃</span><span "</span><span , </span><span "</span><span temp3</span><span "</span>: <span "</span><span 17℃~23℃</span><span "</span><span , </span><span "</span><span temp4</span><span "</span>: <span "</span><span 11℃~18℃</span><span "</span><span , </span><span "</span><span temp5</span><span "</span>: <span "</span><span 10℃~15℃</span><span "</span><span , </span><span "</span><span temp6</span><span "</span>: <span "</span><span 12℃~17℃</span><span "</span><span , </span><span "</span><span tempF1</span><span "</span>: <span "</span><span 53.6℉~64.4℉</span><span "</span><span , </span><span "</span><span tempF2</span><span "</span>: <span "</span><span 60.8℉~69.8℉</span><span "</span><span , </span><span "</span><span tempF3</span><span "</span>: <span "</span><span 62.6℉~73.4℉</span><span "</span><span , </span><span "</span><span tempF4</span><span "</span>: <span "</span><span 51.8℉~64.4℉</span><span "</span><span , </span><span "</span><span tempF5</span><span "</span>: <span "</span><span 50℉~59℉</span><span "</span><span , </span><span "</span><span tempF6</span><span "</span>: <span "</span><span 53.6℉~62.6℉</span><span "</span><span , </span><span "</span><span weather1</span><span "</span>: <span "</span><span 多云</span><span "</span><span , </span><span "</span><span weather2</span><span "</span>: <span "</span><span 阴</span><span "</span><span , </span><span "</span><span weather3</span><span "</span>: <span "</span><span 多云</span><span "</span><span , </span><span "</span><span weather4</span><span "</span>: <span "</span><span 中雨</span><span "</span><span , </span><span "</span><span weather5</span><span "</span>: <span "</span><span 多云</span><span "</span><span , </span><span "</span><span weather6</span><span "</span>: <span "</span><span 阴</span><span "</span><span , </span><span "</span><span img1</span><span "</span>: <span "</span><span 1</span><span "</span><span , </span><span "</span><span img2</span><span "</span>: <span "</span><span 99</span><span "</span><span , </span><span "</span><span img3</span><span "</span>: <span "</span><span 2</span><span "</span><span , </span><span "</span><span img4</span><span "</span>: <span "</span><span 99</span><span "</span><span , </span><span "</span><span img5</span><span "</span>: <span "</span><span 1</span><span "</span><span , </span><span "</span><span img6</span><span "</span>: <span "</span><span 99</span><span "</span><span , </span><span "</span><span img7</span><span "</span>: <span "</span><span 8</span><span "</span><span , </span><span "</span><span img8</span><span "</span>: <span "</span><span 99</span><span "</span><span , </span><span "</span><span img9</span><span "</span>: <span "</span><span 1</span><span "</span><span , </span><span "</span><span img10</span><span "</span>: <span "</span><span 99</span><span "</span><span , </span><span "</span><span img11</span><span "</span>: <span "</span><span 2</span><span "</span><span , </span><span "</span><span img12</span><span "</span>: <span "</span><span 99</span><span "</span><span , </span><span "</span><span img_single</span><span "</span>: <span "</span><span 1</span><span "</span><span , </span><span "</span><span img_title1</span><span "</span>: <span "</span><span 多云</span><span "</span><span , </span><span "</span><span img_title2</span><span "</span>: <span "</span><span 多云</span><span "</span><span , </span><span "</span><span img_title3</span><span "</span>: <span "</span><span 阴</span><span "</span><span , </span><span "</span><span img_title4</span><span "</span>: <span "</span><span 阴</span><span "</span><span , </span><span "</span><span img_title5</span><span "</span>: <span "</span><span 多云</span><span "</span><span , </span><span "</span><span img_title6</span><span "</span>: <span "</span><span 多云</span><span "</span><span , </span><span "</span><span img_title7</span><span "</span>: <span "</span><span 中雨</span><span "</span><span , </span><span "</span><span img_title8</span><span "</span>: <span "</span><span 中雨</span><span "</span><span , </span><span "</span><span img_title9</span><span "</span>: <span "</span><span 多云</span><span "</span><span , </span><span "</span><span img_title10</span><span "</span>: <span "</span><span 多云</span><span "</span><span , </span><span "</span><span img_title11</span><span "</span>: <span "</span><span 阴</span><span "</span><span , </span><span "</span><span img_title12</span><span "</span>: <span "</span><span 阴</span><span "</span><span , </span><span "</span><span img_title_single</span><span "</span>: <span "</span><span 多云</span><span "</span><span , </span><span "</span><span wind1</span><span "</span>: <span "</span><span 微风</span><span "</span><span , </span><span "</span><span wind2</span><span "</span>: <span "</span><span 微风</span><span "</span><span , </span><span "</span><span wind3</span><span "</span>: <span "</span><span 微风</span><span "</span><span , </span><span "</span><span wind4</span><span "</span>: <span "</span><span 东北风3-4级</span><span "</span><span , </span><span "</span><span wind5</span><span "</span>: <span "</span><span 微风</span><span "</span><span , </span><span "</span><span wind6</span><span "</span>: <span "</span><span 微风</span><span "</span><span , </span><span "</span><span fx1</span><span "</span>: <span "</span><span 微风</span><span "</span><span , </span><span "</span><span fx2</span><span "</span>: <span "</span><span 微风</span><span "</span><span , </span><span "</span><span fl1</span><span "</span>: <span "</span><span 小于3级</span><span "</span><span , </span><span "</span><span fl2</span><span "</span>: <span "</span><span 小于3级</span><span "</span><span , </span><span "</span><span fl3</span><span "</span>: <span "</span><span 小于3级</span><span "</span><span , </span><span "</span><span fl4</span><span "</span>: <span "</span><span 3-4级</span><span "</span><span , </span><span "</span><span fl5</span><span "</span>: <span "</span><span 小于3级</span><span "</span><span , </span><span "</span><span fl6</span><span "</span>: <span "</span><span 小于3级</span><span "</span><span , </span><span "</span><span index</span><span "</span>: <span "</span><span 较舒适</span><span "</span><span , </span><span "</span><span index_d</span><span "</span>: <span "</span><span 建议着薄外套、开衫牛仔衫裤等服装。年老体弱者应适当添加衣物,宜着夹克衫、薄毛衣等。</span><span "</span><span , </span><span "</span><span index48</span><span "</span>: <span "</span><span 较舒适</span><span "</span><span , </span><span "</span><span index48_d</span><span "</span>: <span "</span><span 建议着薄外套、开衫牛仔衫裤等服装。年老体弱者应适当添加衣物,宜着夹克衫、薄毛衣等。</span><span "</span><span , </span><span "</span><span index_uv</span><span "</span>: <span "</span><span 最弱</span><span "</span><span , </span><span "</span><span index48_uv</span><span "</span>: <span "</span><span 最弱</span><span "</span><span , </span><span "</span><span index_xc</span><span "</span>: <span "</span><span 适宜</span><span "</span><span , </span><span "</span><span index_tr</span><span "</span>: <span "</span><span 适宜</span><span "</span><span , </span><span "</span><span index_co</span><span "</span>: <span "</span><span 舒适</span><span "</span><span , </span><span "</span><span st1</span><span "</span>: <span "</span><span 19</span><span "</span><span , </span><span "</span><span st2</span><span "</span>: <span "</span><span 13</span><span "</span><span , </span><span "</span><span st3</span><span "</span>: <span "</span><span 23</span><span "</span><span , </span><span "</span><span st4</span><span "</span>: <span "</span><span 16</span><span "</span><span , </span><span "</span><span st5</span><span "</span>: <span "</span><span 24</span><span "</span><span , </span><span "</span><span st6</span><span "</span>: <span "</span><span 18</span><span "</span><span , </span><span "</span><span index_cl</span><span "</span>: <span "</span><span 适宜</span><span "</span><span , </span><span "</span><span index_ls</span><span "</span>: <span "</span><span 适宜</span><span "</span><span , </span><span "</span><span index_ag</span><span "</span>: <span "</span><span 不易发</span><span "</span><span } }</span>
以上接口是我们做天气预报功能将使用到的接口。
二、微信公众平台开发
1. 需要将城市编码对照表导入到数据库中,以下是SAE导入后截图
2. 将城市名转为城市代码的方法,这将在用户发送城市名的时候调用
<span 1</span> <span function</span> fromNameToCode(<span $name</span><span ) </span><span 2</span> <span { </span><span 3</span> <span $mysql_host</span> =<span SAE_MYSQL_HOST_M; </span><span 4</span> <span $mysql_host_s</span> =<span SAE_MYSQL_HOST_S; </span><span 5</span> <span $mysql_port</span> =<span SAE_MYSQL_PORT; </span><span 6</span> <span $mysql_user</span> =<span SAE_MYSQL_USER; </span><span 7</span> <span $mysql_password</span> =<span SAE_MYSQL_PASS; </span><span 8</span> <span $mysql_database</span> =<span SAE_MYSQL_DB; </span><span 9</span> <span 10</span> <span $mysql_table</span> = "weather"<span ; </span><span 11</span> <span $mysql_state</span> = "SELECT * FROM ".<span $mysql_table</span>." WHERE `cityName` = '".<span $name</span>."'"<span ; </span><span 12</span> <span 13</span> <span $con</span> = <span mysql_connect</span>(<span $mysql_host</span>.':'.<span $mysql_port</span>, <span $mysql_user</span>, <span $mysql_password</span>, <span true</span><span ); </span><span 14</span> <span if</span> (!<span $con</span><span ){ </span><span 15</span> <span die</span>('Could not connect: ' . <span mysql_error</span><span ()); </span><span 16</span> <span } </span><span 17</span> <span mysql_query</span>("SET NAMES 'UTF8'"<span ); </span><span 18</span> <span mysql_select_db</span>(<span $mysql_database</span>, <span $con</span><span ); </span><span 19</span> <span $result</span> = <span mysql_query</span>(<span $mysql_state</span><span ); </span><span 20</span> <span $cityCode</span> = ""<span ; </span><span 21</span> <span while</span>(<span $row</span> = <span mysql_fetch_array</span>(<span $result</span><span )) </span><span 22</span> <span { </span><span 23</span> <span $cityCode</span> = <span $row</span>['cityCode'<span ]; </span><span 24</span> <span break</span><span ; </span><span 25</span> <span } </span><span 26</span> <span mysql_close</span>(<span $con</span><span ); </span><span 27</span> <span return</span> <span $cityCode</span><span ; </span><span 28</span> }
3. 编写接口调用函数,用于向天气网发送cURL请求,获取数据
<span 1</span> <span function</span> httpRequest(<span $url</span><span ) </span><span 2</span> <span { </span><span 3</span> <span $ch</span> =<span curl_init(); </span><span 4</span> curl_setopt(<span $ch</span>, CURLOPT_URL, <span $url</span><span ); </span><span 5</span> curl_setopt(<span $ch</span>, CURLOPT_RETURNTRANSFER, 1<span ); </span><span 6</span> <span $output</span> = curl_exec(<span $ch</span><span ); </span><span 7</span> curl_close(<span $ch</span><span ); </span><span 8</span> <span if</span> (<span $output</span> === <span FALSE</span><span ){ </span><span 9</span> <span return</span> "cURL Error: ". curl_error(<span $ch</span><span ); </span><span 10</span> <span } </span><span 11</span> <span return</span> <span $output</span><span ; </span><span 12</span> }
4. 编写获取天气数据的函数,这里获取实时天气和未来3日天气,并将返回结果封装成图文信息的数组
<span 1</span> <span function</span> getWeatherInfo(<span $cityName</span><span ) </span><span 2</span> <span { </span><span 3</span> <span $cityCode</span> = fromNameToCode(<span $cityName</span><span ); </span><span 4</span> <span 5</span> <span if</span> (<span $cityCode</span> == ""<span ) </span><span 6</span> <span { </span><span 7</span> <span return</span> "错误的城市名或者此城市不在数据库中!"<span ; </span><span 8</span> <span } </span><span 9</span> <span 10</span> <span //</span><span 获取实时天气</span> <span 11</span> <span $url</span> = "http://www.weather.com.cn/data/sk/".<span $cityCode</span>.".html"<span ; </span><span 12</span> <span $output</span> = httpRequest(<span $url</span><span ); </span><span 13</span> <span $weather</span> = json_decode(<span $output</span>, <span true</span><span ); </span><span 14</span> <span $info</span> = <span $weather</span>['weatherinfo'<span ]; </span><span 15</span> <span 16</span> <span $weatherArray</span> = <span array</span><span (); </span><span 17</span> <span $weatherArray</span>[] = <span array</span>("Title"=>$info['city']."天气预报", "Description"=>"", "PicUrl"=>"", "Url" =>""<span ); </span><span 18</span> <span if</span> ((int)<span $cityCode</span> < 101340000<span ){ </span><span 19</span> <span $result</span> = "实况 温度:".<span $info</span>['temp']."℃ 湿度:".<span $info</span>['SD']." 风速:".<span $info</span>['WD'].<span $info</span>['WSE']."级"<span ; </span><span 20</span> <span $weatherArray</span>[] = <span array</span>("Title"=><span str_replace</span>("%", "﹪", <span $result</span>), "Description"=>"", "PicUrl"=>"", "Url" =>""<span ); </span><span 21</span> <span } </span><span 22</span> <span 23</span> <span //</span><span 获取六日天气</span> <span 24</span> <span $url</span> = "http://m.weather.com.cn/data/".<span $cityCode</span>.".html"<span ; </span><span 25</span> <span $output</span> = httpRequest(<span $url</span><span ); </span><span 26</span> <span $weather</span> = json_decode(<span $output</span>, <span true</span><span ); </span><span 27</span> <span $info</span> = <span $weather</span>['weatherinfo'<span ]; </span><span 28</span> <span 29</span> <span if</span> (!<span empty</span>(<span $info</span>['index_d'<span ])){ </span><span 30</span> <span $weatherArray</span>[] = <span array</span>("Title" =><span $info</span>['index_d'], "Description" =>"", "PicUrl" =>"", "Url" =>""<span ); </span><span 31</span> <span } </span><span 32</span> <span 33</span> <span $weekArray</span> = <span array</span>("日","一","二","三","四","五","六"<span ); </span><span 34</span> <span $maxlength</span> = 3<span ; </span><span 35</span> <span for</span> (<span $i</span> = 1; <span $i</span> <= <span $maxlength</span>; <span $i</span>++<span ) { </span><span 36</span> <span $offset</span> = <span strtotime</span>("+".(<span $i</span>-1)." day"<span ); </span><span 37</span> <span $subTitle</span> = <span date</span>("m月d日",<span $offset</span>)." 周".<span $weekArray</span>[<span date</span>('w',<span $offset</span>)]." ".<span $info</span>['temp'.<span $i</span>]." ".<span $info</span>['weather'.<span $i</span>]." ".<span $info</span>['wind'.<span $i</span><span ]; </span><span 38</span> <span $weatherArray</span>[] = <span array</span>("Title" =><span $subTitle</span>, "Description" =>"", "PicUrl" =>"http://discuz.comli.com/weixin/weather/"."d".<span sprintf</span>("%02u",<span $info</span>['img'.((<span $i</span> *2)-1)]).".jpg", "Url" =>""<span ); </span><span 39</span> <span } </span><span 40</span> <span 41</span> <span return</span> <span $weatherArray</span><span ; </span><span 42</span> }
5. 在微信公众平台接口函数中处理收到的文本消息时,文本将为城市名,直接调用获取天气的函数
<span 1</span> <span /*</span> <span 2</span> <span 方倍工作室 </span><span 3</span> <span CopyRight 2013 All Rights Reserved </span><span 4</span> <span */</span> <span 5</span> <span 6</span> <span define</span>("TOKEN", "weixin"<span ); </span><span 7</span> <span 8</span> <span $wechatObj</span> = <span new</span><span wechatCallbackapiTest(); </span><span 9</span> <span if</span> (!<span isset</span>(<span $_GET</span>['echostr'<span ])) { </span><span 10</span> <span $wechatObj</span>-><span responseMsg(); </span><span 11</span> }<span else</span><span { </span><span 12</span> <span $wechatObj</span>-><span valid(); </span><span 13</span> <span } </span><span 14</span> <span 15</span> <span class</span><span wechatCallbackapiTest </span><span 16</span> <span { </span><span 17</span> <span public</span> <span function</span><span valid() </span><span 18</span> <span { </span><span 19</span> <span $echoStr</span> = <span $_GET</span>["echostr"<span ]; </span><span 20</span> <span if</span>(<span $this</span>-><span checkSignature()){ </span><span 21</span> <span echo</span> <span $echoStr</span><span ; </span><span 22</span> <span exit</span><span ; </span><span 23</span> <span } </span><span 24</span> <span } </span><span 25</span> <span 26</span> <span private</span> <span function</span><span checkSignature() </span><span 27</span> <span { </span><span 28</span> <span $signature</span> = <span $_GET</span>["signature"<span ]; </span><span 29</span> <span $timestamp</span> = <span $_GET</span>["timestamp"<span ]; </span><span 30</span> <span $nonce</span> = <span $_GET</span>["nonce"<span ]; </span><span 31</span> <span $token</span> =<span TOKEN; </span><span 32</span> <span $tmpArr</span> = <span array</span>(<span $token</span>, <span $timestamp</span>, <span $nonce</span><span ); </span><span 33</span> <span sort</span>(<span $tmpArr</span><span ); </span><span 34</span> <span $tmpStr</span> = <span implode</span>(<span $tmpArr</span><span ); </span><span 35</span> <span $tmpStr</span> = <span sha1</span>(<span $tmpStr</span><span ); </span><span 36</span> <span 37</span> <span if</span>(<span $tmpStr</span> == <span $signature</span><span ){ </span><span 38</span> <span return</span> <span true</span><span ; </span><span 39</span> }<span else</span><span { </span><span 40</span> <span return</span> <span false</span><span ; </span><span 41</span> <span } </span><span 42</span> <span } </span><span 43</span> <span 44</span> <span public</span> <span function</span><span responseMsg() </span><span 45</span> <span { </span><span 46</span> <span $postStr</span> = <span $GLOBALS</span>["HTTP_RAW_POST_DATA"<span ]; </span><span 47</span> <span if</span> (!<span empty</span>(<span $postStr</span><span )){ </span><span 48</span> <span $this</span>->logger("R ".<span $postStr</span><span ); </span><span 49</span> <span $postObj</span> = <span simplexml_load_string</span>(<span $postStr</span>, 'SimpleXMLElement',<span LIBXML_NOCDATA); </span><span 50</span> <span $RX_TYPE</span> = <span trim</span>(<span $postObj</span>-><span MsgType); </span><span 51</span> <span 52</span> <span switch</span> (<span $RX_TYPE</span><span ) </span><span 53</span> <span { </span><span 54</span> <span case</span> "event": <span 55</span> <span $result</span> = <span $this</span>->receiveEvent(<span $postObj</span><span ); </span><span 56</span> <span break</span><span ; </span><span 57</span> <span case</span> "text": <span 58</span> <span $result</span> = <span $this</span>->receiveText(<span $postObj</span><span ); </span><span 59</span> <span break</span><span ; </span><span 60</span> <span } </span><span 61</span> <span $this</span>->logger("T ".<span $result</span><span ); </span><span 62</span> <span echo</span> <span $result</span><span ; </span><span 63</span> }<span else</span><span { </span><span 64</span> <span echo</span> ""<span ; </span><span 65</span> <span exit</span><span ; </span><span 66</span> <span } </span><span 67</span> <span } </span><span 68</span> <span 69</span> <span private</span> <span function</span> receiveEvent(<span $object</span><span ) </span><span 70</span> <span { </span><span 71</span> <span $content</span> = ""<span ; </span><span 72</span> <span switch</span> (<span $object</span>-><span Event) </span><span 73</span> <span { </span><span 74</span> <span case</span> "subscribe": <span 75</span> <span $content</span> = "欢迎关注方倍工作室 "<span ; </span><span 76</span> <span break</span><span ; </span><span 77</span> <span case</span> "unsubscribe": <span 78</span> <span $content</span> = "取消关注"<span ; </span><span 79</span> <span break</span><span ; </span><span 80</span> <span } </span><span 81</span> <span $result</span> = <span $this</span>->transmitText(<span $object</span>, <span $content</span><span ); </span><span 82</span> <span return</span> <span $result</span><span ; </span><span 83</span> <span } </span><span 84</span> <span 85</span> <span private</span> <span function</span> receiveText(<span $object</span><span ) </span><span 86</span> <span { </span><span 87</span> <span $keyword</span> = <span trim</span>(<span $object</span>-><span Content); </span><span 88</span> <span 89</span> <span include</span>("weather.php"<span ); </span><span 90</span> <span $content</span> = getWeatherInfo(<span $keyword</span><span ); </span><span 91</span> <span $result</span> = <span $this</span>->transmitNews(<span $object</span>, <span $content</span><span ); </span><span 92</span> <span return</span> <span $result</span><span ; </span><span 93</span> <span } </span><span 94</span> <span 95</span> <span 96</span> <span private</span> <span function</span> transmitText(<span $object</span>, <span $content</span><span ) </span><span 97</span> <span { </span><span 98</span> <span $textTpl</span> = "<span <xml> </span><span 99</span> <span <ToUserName><![CDATA[%s]]></ToUserName> </span><span 100</span> <span <FromUserName><![CDATA[%s]]></FromUserName> </span><span 101</span> <span <CreateTime>%s</CreateTime> </span><span 102</span> <span <MsgType><![CDATA[text]]></MsgType> </span><span 103</span> <span <Content><![CDATA[%s]]></Content> </span><span 104</span> </xml>"<span ; </span><span 105</span> <span $result</span> = <span sprintf</span>(<span $textTpl</span>, <span $object</span>->FromUserName, <span $object</span>->ToUserName, <span time</span>(), <span $content</span><span ); </span><span 106</span> <span return</span> <span $result</span><span ; </span><span 107</span> <span } </span><span 108</span> <span 109</span> <span private</span> <span function</span> transmitNews(<span $object</span>, <span $arr_item</span><span ) </span><span 110</span> <span { </span><span 111</span> <span if</span>(!<span is_array</span>(<span $arr_item</span><span )) </span><span 112</span> <span return</span><span ; </span><span 113</span> <span 114</span> <span $itemTpl</span> = "<span <item> </span><span 115</span> <span <Title><![CDATA[%s]]></Title> </span><span 116</span> <span <Description><![CDATA[%s]]></Description> </span><span 117</span> <span <PicUrl><![CDATA[%s]]></PicUrl> </span><span 118</span> <span <Url><![CDATA[%s]]></Url> </span><span 119</span> <span </item> </span><span 120</span> "<span ; </span><span 121</span> <span $item_str</span> = ""<span ; </span><span 122</span> <span foreach</span> (<span $arr_item</span> <span as</span> <span $item</span><span ) </span><span 123</span> <span $item_str</span> .= <span sprintf</span>(<span $itemTpl</span>, <span $item</span>['Title'], <span $item</span>['Description'], <span $item</span>['PicUrl'], <span $item</span>['Url'<span ]); </span><span 124</span> <span 125</span> <span $newsTpl</span> = "<span <xml> </span><span 126</span> <span <ToUserName><![CDATA[%s]]></ToUserName> </span><span 127</span> <span <FromUserName><![CDATA[%s]]></FromUserName> </span><span 128</span> <span <CreateTime>%s</CreateTime> </span><span 129</span> <span <MsgType><![CDATA[news]]></MsgType> </span><span 130</span> <span <Content><![CDATA[]]></Content> </span><span 131</span> <span <ArticleCount>%s</ArticleCount> </span><span 132</span> <span <Articles> </span><span 133</span> <span $item_str</span><span </Articles> </span><span 134</span> </xml>"<span ; </span><span 135</span> <span 136</span> <span $result</span> = <span sprintf</span>(<span $newsTpl</span>, <span $object</span>->FromUserName, <span $object</span>->ToUserName, <span time</span>(), <span count</span>(<span $arr_item</span><span )); </span><span 137</span> <span return</span> <span $result</span><span ; </span><span 138</span> <span } </span><span 139</span> <span 140</span> <span private</span> <span function</span> logger(<span $log_content</span><span ) </span><span 141</span> <span { </span><span 142</span> <span } </span><span 143</span> }
四、如何扩展
1. 在数据库加入邮编、区号、拼音等字段,可以扩展成使用区号等方式查询,请参考:http://www.cnblogs.com/txw1958/archive/2013/02/07/weixin-if4-weather-forecast.html
2. 拥有高级接口的用户,可以使用结合语音识别+中文分词技术,实现语音版的智能查询,请参考:http://www.cnblogs.com/txw1958/archive/2013/02/06/weixin-if40-voice-recognition.html

PHP在现代Web开发中仍然重要,尤其在内容管理和电子商务平台。1)PHP拥有丰富的生态系统和强大框架支持,如Laravel和Symfony。2)性能优化可通过OPcache和Nginx实现。3)PHP8.0引入JIT编译器,提升性能。4)云原生应用通过Docker和Kubernetes部署,提高灵活性和可扩展性。

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

PHP和Python各有优势,适合不同场景。1.PHP适用于web开发,提供内置web服务器和丰富函数库。2.Python适合数据科学和机器学习,语法简洁且有强大标准库。选择时应根据项目需求决定。

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

PHP成为许多网站首选技术栈的原因包括其易用性、强大社区支持和广泛应用。1)易于学习和使用,适合初学者。2)拥有庞大的开发者社区,资源丰富。3)广泛应用于WordPress、Drupal等平台。4)与Web服务器紧密集成,简化开发部署。

PHP在现代编程中仍然是一个强大且广泛使用的工具,尤其在web开发领域。1)PHP易用且与数据库集成无缝,是许多开发者的首选。2)它支持动态内容生成和面向对象编程,适合快速创建和维护网站。3)PHP的性能可以通过缓存和优化数据库查询来提升,其广泛的社区和丰富生态系统使其在当今技术栈中仍具重要地位。

在PHP中,弱引用是通过WeakReference类实现的,不会阻止垃圾回收器回收对象。弱引用适用于缓存系统和事件监听器等场景,需注意其不能保证对象存活,且垃圾回收可能延迟。

\_\_invoke方法允许对象像函数一样被调用。1.定义\_\_invoke方法使对象可被调用。2.使用$obj(...)语法时,PHP会执行\_\_invoke方法。3.适用于日志记录和计算器等场景,提高代码灵活性和可读性。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

WebStorm Mac版
好用的JavaScript开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver CS6
视觉化网页开发工具