当前位置:首页 > PHP实例:PHP天气查询

PHP实例:PHP天气查询

点击次数:1688  更新日期:2011-01-04
\n

<?php


\n

city_name=_GET[\'city\'];


\n

//用正则在city.txt中查找相应城市的天气城市代码
city_name=trim(ereg_replace(“[ ]{1,}”,”",city_name));
time_file=”city.txt”;


\n

city_all=file_get_contents(time_file);
preg=”|city_name,(.*)\\s|i”;
preg_match_all(preg,city_all,cn, PREG_SET_ORDER);
city_n=trim(cn[0][1]);


\n


if(city_n)
{
nowtime=date(“Y-m-d”);


\n

file = “cache/city_name.txt”;


\n

//获取文件的最后修改日期
if(file_exists(file))
{
last_time=date(“Y-m-d”,filemtime(file));
}
else{
last_time=date(“Y-m-d”);
}
//新建保存匹配数组
records=null;


\n


//如果文件存在,或还没过期,则直接读取缓存数据
if (file_exists(file) && last_time==nowtime)
{

records = unserialize(file_get_contents(file));


\n

}
else
{


\n

//以下就是如何在网站上 获取天气资料,,小偷部分!感觉其中的preg_match_all功能很强大


\n

data=file_get_contents(“http://weather.msn.com/local.aspx?wealocations=wc:city_n”);
preg=”|<td class=\\”icon\\”><img src=\\”(.*)\\” width=.*class=\\”hilo\\”><tr><th>Hi:<\\/th> <td>(.*)°<\\/td><\\/tr><tr><th>L<\\/th> <td>(.*)°<\\/td><\\/tr><\\/table>.*class=\\”skytext\\” colspan=\\”3\\”>(.*)<\\/td>|U”;


\n

preg_match_all(preg,data,records);
unset (records[0][0]);


\n

//序列化组
OUTPUT = serialize(records);
//打开文件,
fp = fopen(file,”w”);
//把数组写进文件
fputs(fp, OUTPUT);
//关闭
fclose(fp);

}

image=records[1][0];
resulta=records[2][0];
resultb=records[3][0];
resultc=records[4][0];
reString=”<table width=\\”100%\\”>
<tr bgcolor=\\”#cccccc\\”>
<td width=\\”50%\\”><font size=\\”4\\”>city_name</font></td>
<td width=\\”50%\\”><div align=\\”right\\”><font size=\\”3\\”>nowtime</div></font></td>
</tr>
<tr>
<td rowspan=\\”2\\”><img src=’”.image.”‘ \\/></td>
<td><font size=\\”3\\”>”.resulta.”-”.resultb.”(F)</fong></td>
</tr>
<tr>
<td colspan=\\”2\\”><font size=\\”3\\”>”.resultc.”</fong></td>
</tr>
</table>”;
}
else
{
reString=”<table width=\\”100%\\”>
<tr bgcolor=\\”#cccccc\\”>
<td width=\\”50%\\”><font size=\\”4\\”>The city: city_name hasnt been found!</font></td>
</tr>
</table>”;
}
echo iconv(“gb2312″,”utf-8″,reString);


\n

?>


\n

主要是把当天的做个缓存,这样第2次访问同一城市的时候的话就比较快了。虽然不是什么好代码,但是对与刚刚学习PHP的人还是一个蛮好的例子,特别是里面的正则表达式的应用。


\n

前编主要是处理 部分,也就是天气查询的核心部分,现在是AJAX中的部分 代码如下:


\n

var xmlHttp;
function createXMLHttpRequest()
{
var xmlHttpRequest;
if(window.ActiveXObject)
{
xmlHttpRequest=new ActiveXObject(“Microsoft.XMLHTTP”);
return xmlHttpRequest;


\n

}
else if(window.XMLHttpRequest)
{
xmlHttpRequest=new XMLHttpRequest();
return xmlHttpRequest;
}
}


\n


function startXmlHttpRequest()
{
var form=document.getElementById(“city”);
var city=form.value;
var cityName=form.Text;

xmlHttp=createXMLHttpRequest();
xmlHttp.open(“GET”,”weather/getHtml.php?city=”+city+”&cityname=”+cityName+”&time=”+new Date(),true);
xmlHttp.onreadystatechange=returnText;
xmlHttp.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”);
xmlHttp.send(null);


\n


}
function startTextXmlHttpRequest()
{
var form=document.getElementById(“textcity”);
var city=form.value;
xmlHttp=createXMLHttpRequest();
xmlHttp.open(“GET”,”weather/textGetHtml.php?city=”+city,true);
xmlHttp.onreadystatechange=returnText;
xmlHttp.setRequestHeader(“Content-Type”,”application/x-www-form-urlencoded”);
xmlHttp.send(null);


\n


}


\n

function validataIpAdd()
{

}
function returnText()
{
var div=document.getElementById(“result_box”);
var loading=document.getElementById(“loading”);
div.innerHTML=”";
loading.style.display=”block”;
if(xmlHttp.readyState==1)
{

}
else if(xmlHttp.readyState==4)
{
if(xmlHttp.status==200)
{

div.innerHTML=xmlHttp.responseText;
loading.style.display=”none”;
}
}
}


\n

主要比较简单! 由4个函数组成 1个是创建 1个是提交 一个是返回 顶部的是是判断浏览器然后创建XMLHTMLREQUES


\n

来源:CSDN

\n