24
2013
03

随便弄了个天气预报

 天气预报现在很多网站都提供了丰富的api,像有道和中国天气网提供的都是json格式的输出值。非常好用,不过这里我并没有用这两个网站的api,而是用的webxml.com.cn的,而且是get方式来请求和响应。于是乎他得出的的值就会比较奇皅。是这样的格式

XML/HTML代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <ArrayOfString xmlns="http://WebXml.com.cn/">  
  3.   <string>string</string>  
  4.   <string>string</string>  
  5. </ArrayOfString>  

是个对象,看着像数组又好像不是。可以用simplexml_load_string这个函数来解析这个输出值,得到的是一个object类型的值,然后其成员也是object值。这个可以通过print_r 和gettype两方法去测试。这么复杂,我到底是要干吗?

这真是一个值得思考的问题。好像就是要说上面一句话。然后顺便说下这个object可以怎么把值取出来。

PHP代码
  1. $data = simplexml_load_string($data);   
  2.   
  3. $i=0;  
  4. $a=array();  
  5.   
  6. foreach($data->children() as $v){  
  7.       
  8.     $a[$i]= strval($v);  
  9.     $i++;  
  10.       
  11. }  

这样,就把object的值以string类型存到一个一维数组里面去了。至于后来你要做什么用,数组总会吧?

做出来不像东西的东西:天气预报

顺便也把代码全贴一下,没什么用,就给大家看看。不过大家有更好的方法取object里面的值,可以告诉我一下。

PHP代码
  1. <?php   
  2. header("Content-Type:text/html;charset=utf-8");   
  3. if (isset($_GET['city'])) {   
  4. $url = 'http://webservice.webxml.com.cn/WebServices/WeatherWS.asmx/getWeather';   
  5. $city = $_GET['city'];   
  6. $ch = curl_init();   
  7. curl_setopt($ch, CURLOPT_URL, $url);   
  8. curl_setopt($ch, CURLOPT_POST, true);   
  9. curl_setopt($ch, CURLOPT_POSTFIELDS, "theCityCode={$city}&theUserID=");   
  10. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);   
  11. $data = curl_exec($ch);   
  12. curl_close($ch);   
  13. $data = simplexml_load_string($data);   
  14.   
  15. $i=0;  
  16. $a=array();  
  17.   
  18. foreach($data->children() as $v){  
  19.       
  20.     $a[$i]= strval($v);  
  21.     $i++;  
  22.       
  23. }  
  24.   
  25. echo $a[0].'<br />';  
  26. echo $a[4].'<br />';  
  27. echo $a[5].'<br />';  
  28. echo mb_substr($a[6],0,strrpos($a[6],'过敏指数')/3,'utf-8').'<br />';  
  29.   
  30.   
  31. }   
  32. ?>   
  33. <form action="weather.php" method="get">   
  34. 城市: <input type="text" name="city" /> <input type="submit" value="提交" />   
  35. </form>   

 

« 上一篇下一篇 »

相关文章: