免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3388 | 回复: 0
打印 上一主题 下一主题

利用prototype和Google的weather api做天气预报 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-22 17:39 |只看该作者 |倒序浏览
利用prototype和GOOGLE的weather api做天气预报
想拿prototype练练手,就用prototype做个天气预报吧。
Google Weather API 只支持美国地区使用邮政编码进行查询,例如:
http://www.google.com/ig/api?hl=zh-cn&weather=94043
(94043 为 山景城, 美国加州 的邮政编码)
而除了美国以外的地区需要使用经纬度坐标作为参数才能执行 Google Weather API, 例如:
http://www.google.com/ig/api?hl=zh-cn&weather=,,,30670000,104019996
(30670000,104019996 为 成都, 中国大陆 的经纬度坐标)
要其它地区的经纬度坐标,可以通过 Google API 提供的国家代码列表及相应的城市经纬度坐标列表可以查询到,以下是 Google API 提供的查询参数:
http://www.google.com/ig/countries?output=xml&hl=zh-cn
(查询 Google 所支持的所有国家的代码,并以 zh-cn 简体中文显示)
http://www.google.com/ig/cities? ... h-cn&country=cn

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  
<html>  
<head>  
<title> New Document </title>  
<meta. name="Generator" content="EditPlus">  
</head>  
<script. language="javascript" src="prototype.js"></script>  
<script. language="javascript">  
  
//取得中国所有的城市  
function getCity()  
{  
var url = "http://www.google.com/ig/cities";  
var cityPara = {method:"get" ,  
     parameters:"output=xml&hl=zh-cn&country=cn" ,  
     onComplete:showCityRespose  
     };  
var cityRequest = new Ajax.Request( url , cityPara);  
}  
  
function showCityRespose(originalRequest)  
{  
cityInfo = originalRequest.responseXML;  
cityNodes = cityInfo.getElementsByTagName("city";  
for(var i=0;i<cityNodes.length;i++){  
  var city = cityNodes;  
  var cityName = getData( city , "name";  
  var latitude = getData( city ,"latitude_e6";  
  var longitude= getData( city ,"longitude_e6";  
  var ption =document.createElement("option";  
  $("city".options.add(option);  
  option.innerText = cityName;  
  option.value=",,,"+latitude+","+longitude;  
}  
}  
function forecast(city)  
{  
$("result".innerHTML = "请稍等";  
var url = "http://www.google.com/ig/api";  
var para = {method:"get" ,  
  parameters:"hl=zh-cn&weather="+city ,  
  onComplete:showResult  
};  
var forecastRequest = new Ajax.Request(url , para);  
}  
  
//显示预报结果  
function showResult(originalRequest)  
{  
$("result".innerHTML = "";  
resultXML = originalRequest.responseXML;  
forecastNodes = resultXML.getElementsByTagName("forecast_conditions";  
for(i=0;i<forecastNodes.length;i++){  
  var neNode = forecastNodes;  
  var weekday = getData( oneNode , "day_of_week";  
  var low = getData( oneNode , "low");  
  var high = getData( oneNode , "high");  
  var icon = getData( oneNode , "icon");  
  var result = document.createElement("div");  
  result.appendChild(document.createTextNode(weekday));  
  result.appendChild(document.createElement("br"));  
  result.appendChild(document.createTextNode("最低温度"+low));  
  result.appendChild(document.createElement("br"));  
  result.appendChild(document.createTextNode("最高温度"+high));  
  result.appendChild(document.createElement("br"));  
  var image = document.createElement("img");  
  image.setAttribute("src" , "http://www.google.com"+icon);  
  result.appendChild(image);  
  $("result").appendChild(result);  
}  
}  
  
//取得数据值  
function getData(parentNode , nodeName)  
{  
return parentNode.getElementsByTagName(nodeName)[0].getAttribute("data");  
}  
</script>  
<body nLoad="getCity()">  
<div id="selectcity">  
<form. name="form1" method="post" action="">  
<select name="city" id="city" nChange="forecast(this.value)">  
        <option value="">选择城市</option>  
     </select>     
  </form>  
</div>  
  
<div id="result">  
  
</div>  
</body>  
</html>  

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
选择城市

注意这段代码在IE下可以使用,在IE里XMLHTTPREQUEST可以选择允许跨域。
在FF下,就不能使用了
解决办法:你可以先用PHP读下来GOOGLE提供的数据,再用XML形式提供给这个程序,就可以啦。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP