首先,你要有个ip库。
php获取客户端ip,入库查找到相应的城市。
qq天气预报,城市有对应的编号。<select id="obSelect" onchange="getredirect(this.value)"><option selected value="125">北京</option><option value="292">广州</option><option value="252">上海</option><option value="127">天津</option><option value="212">重庆</option><option value="115">沈阳</option><option value="244">南京</option><option value="211">武汉</option><option value="166">成都</option><option value="186">西安</option><option value="82">石家庄</option><option value="84">太原</option><option value="189">郑州</option><option value="103">长春</option><option value="17">哈尔滨</option><option value="69">呼和浩特</option><option value="140">济南</option><option value="248">合肥</option><option value="255">杭州</option><option value="276">福州</option><option value="287">厦门</option><option value="218">长沙</option><option value="296">深圳</option><option value="295">南宁</option><option value="232">桂林</option><option value="264">南昌</option><option value="227">贵阳</option><option value="1">香港</option><option value="2">澳门</option><option value="179">昆明</option><option value="280">台北</option><option value="150">拉萨</option><option value="303">海口</option><option value="57">兰州</option><option value="78">银川</option><option value="56">西宁</option><option value="28">乌鲁木齐</option></select>
然后构造你的iframe的地址:http://weather.news.qq.com/inc/ss125.htm
更改红色数字即可……
php获取客户端ip,入库查找到相应的城市。
qq天气预报,城市有对应的编号。<select id="obSelect" onchange="getredirect(this.value)"><option selected value="125">北京</option><option value="292">广州</option><option value="252">上海</option><option value="127">天津</option><option value="212">重庆</option><option value="115">沈阳</option><option value="244">南京</option><option value="211">武汉</option><option value="166">成都</option><option value="186">西安</option><option value="82">石家庄</option><option value="84">太原</option><option value="189">郑州</option><option value="103">长春</option><option value="17">哈尔滨</option><option value="69">呼和浩特</option><option value="140">济南</option><option value="248">合肥</option><option value="255">杭州</option><option value="276">福州</option><option value="287">厦门</option><option value="218">长沙</option><option value="296">深圳</option><option value="295">南宁</option><option value="232">桂林</option><option value="264">南昌</option><option value="227">贵阳</option><option value="1">香港</option><option value="2">澳门</option><option value="179">昆明</option><option value="280">台北</option><option value="150">拉萨</option><option value="303">海口</option><option value="57">兰州</option><option value="78">银川</option><option value="56">西宁</option><option value="28">乌鲁木齐</option></select>
然后构造你的iframe的地址:http://weather.news.qq.com/inc/ss125.htm
更改红色数字即可……
php获取客户端ip,入库查找到相应的城市。
这个操作能说具体点吗?
我刚学不是很清楚】
还有就是一定要用ip库吗???
你能用php获取到用户的ip吧。
你有了ip就需要去判断该ip是属于哪个地区的吧,这样才能调出对应城市的天气预报,对吧?这个是通过ip去ip库查询的。
至于ip库,你搜一下纯真ip库,不知道现在全不全,可以试验下。
或者简单点,默认都是北京的,让用户自己选择去看哪个城市。呵呵
这有一篇帖子,你可以参考参考。呵呵,总感觉给你的说的方法复杂了……
<?php
class QQWry{
var $StartIP=0;
var $EndIP=0;
var $Country='';
var $Local=''; var $CountryFlag=0; // 标识 Country位置
// 0x01,随后3字节为Country偏移,没有Local
// 0x02,随后3字节为Country偏移,接着是Local
// 其他,Country,Local,Local有类似的压缩。可能多重引用。
var $fp; var $FirstStartIp=0;
var $LastStartIp=0;
var $EndIpOff=0 ; function getStartIp($RecNo){
$offset=$this->FirstStartIp+$RecNo * 7 ;
@fseek($this->fp,$offset,SEEK_SET) ;
$buf=fread($this->fp ,7) ;
$this->EndIpOff=ord($buf[4]) + (ord($buf[5])*256) + (ord($buf[6])* 256*256);
$this->StartIp=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);
return $this->StartIp;
} function getEndIp(){
@fseek ( $this->fp , $this->EndIpOff , SEEK_SET ) ;
$buf=fread ( $this->fp , 5 ) ;
$this->EndIp=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);
$this->CountryFlag=ord ( $buf[4] ) ;
return $this->EndIp ;
} function getCountry(){
switch ( $this->CountryFlag ) {
case 1:
case 2:
$this->Country=$this->getFlagStr ( $this->EndIpOff+4) ;
//echo sprintf('EndIpOffset=(%x)',$this->EndIpOff );
$this->Local=( 1 == $this->CountryFlag )? '' : $this->getFlagStr ( $this->EndIpOff+8);
break ;
default :
$this->Country=$this->getFlagStr ($this->EndIpOff+4);
$this->Local=$this->getFlagStr ( ftell ( $this->fp ));
}
}
function getFlagStr ($offset){
$flag=0 ;
while(1){
@fseek($this->fp ,$offset,SEEK_SET) ;
$flag=ord(fgetc($this->fp ) ) ;
if ( $flag == 1 || $flag == 2 ) {
$buf=fread ($this->fp , 3 ) ;
if ($flag==2){
$this->CountryFlag=2;
$this->EndIpOff=$offset - 4 ;
}
$offset=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])* 256*256);
}
else{
break ;
} }
if($offset<12)
return '';
@fseek($this->fp , $offset , SEEK_SET ) ; return $this->getStr();
} function getStr ( )
{
$str='' ;
while ( 1 ) {
$c=fgetc ( $this->fp ) ;
//echo "$cn" ; if(ord($c[0])== 0 )
break ;
$str.= $c ;
}
//echo "$str n";
return $str ;
}
function qqwry ($dotip='') {
if( !is_string($dotip) || $dotip==''){return;}
if(preg_match("/^127/",$dotip)){$this->Country="本地网络";return ;}
elseif(preg_match("/^192/",$dotip)) {$this->Country="局域网";return ;} $nRet;
$ip=$this->IpToInt ( $dotip );
$this->fp= fopen(__QQWRY__, "rb");
if ($this->fp == NULL) {
$szLocal= "OpenFileError";
return 1; }
@fseek ( $this->fp , 0 , SEEK_SET ) ;
$buf=fread ( $this->fp , 8 ) ;
$this->FirstStartIp=ord($buf[0]) + (ord($buf[1])*256) + (ord($buf[2])*256*256) + (ord($buf[3])*256*256*256);
$this->LastStartIp=ord($buf[4]) + (ord($buf[5])*256) + (ord($buf[6])*256*256) + (ord($buf[7])*256*256*256); $RecordCount= floor( ( $this->LastStartIp - $this->FirstStartIp ) / 7);
if ($RecordCount <= 1){
$this->Country="FileDataError";
fclose($this->fp) ;
return 2 ;
} $RangB= 0;
$RangE= $RecordCount;
// Match ...
while ($RangB < $RangE-1)
{
$RecNo= floor(($RangB + $RangE) / 2);
$this->getStartIp ( $RecNo ) ; if ( $ip == $this->StartIp )
{
$RangB=$RecNo ;
break ;
}
if ($ip>$this->StartIp)
$RangB= $RecNo;
else
$RangE= $RecNo;
}
$this->getStartIp ( $RangB ) ;
$this->getEndIp ( ) ; if ( ( $this->StartIp <= $ip ) && ( $this->EndIp >= $ip ) ){
$nRet=0 ;
$this->getCountry ( ) ;
//这样不太好..............所以..........
$this->Local=str_replace("(我们一定要解放台湾!!!)", "", $this->Local);
}
else{
$nRet=3 ;
$this->Country='未知' ;
$this->Local='' ;
}
fclose ( $this->fp );
$this->Country=preg_replace("/(CZ88.NET)|(纯真网络)/","局域网/未知",$this->Country);
$this->Local=preg_replace("/(CZ88.NET)|(纯真网络)/","局域网/未知",$this->Local);
//////////////看看 $nRet在上面的值是什么0和3,于是将下面的行注释掉
return $nRet ; //return "$this->Country $this->Local";#如此直接返回位置和国家便可以了
} function IpToInt($Ip) {
$array=explode('.',$Ip);
$Int=($array[0] * 256*256*256) + ($array[1]*256*256) + ($array[2]*256) + $array[3];
return $Int;
}
}/*实例演示
require_once('QQWry.class.php');//加载这个类
$QQWry=new QQWry;
$QQWry->QQWry("60.31.95.255");//用你的IP获取方法获取IP替换掉60.31.95.255这个地方只是演示
$country = $QQWry->Country;
echo $QQWry->Country.",".$QQWry->Local;//如果是UTF-8格式编码,就用iconv转换一下,否则会有乱码
*/
?>这样就可以把IP对应的地址读出来,然后用if(strstr($country,"郑州")!=NULL){}的方式判断你需要的城市,并按你的意思来定义iframe各个城市的天气预报地址即可。虽然麻烦,但是这也是最准确的解决办法。
define('__QQWRY__',"QQWry.Dat"); //定义ip库地址
指扫了一眼,看到“str_replace("(我们一定要解放台湾!!!)", ”强悍的程序。不过,我宁可自己写读那什么dat纯真IP........