Skip to main content.

About

注册Marketva,立刻送5美金

Trip Advisor

建设城市 

 

用PHP做基于Yahoo!Map Api 的地域访问统计

网站一直在用clustrmaps的访问统计,感觉用地图显示简单的网站访问情况很直观。单最近clustrmaps发信根我说由于网站的每日访问量超过2500,要我升级帐户才能继续使用,也就是说访问量太大要给钱,才可以用,呵呵。我不想掏钱,那只好找其他类似的服务。google的半天,竟然没有找到适合的,倒是看到结合google map做的gvisit。试用过gvisit,但并不太符合我的要求,它只是显示访问量比较大的一些ip的位置。既然找不到,那就自己写一个。在google的过程也看到很多基于google map的应用,但发现yahoo用flash实现的map更漂亮点(只是说界面,没有作过其他比较),我决定就用yahoo map api做一个网站的地域访问统计

说了一大堆废话,现在正式介绍yahoo map api。yahoo的map api提供了地理信息查询功能,只要你提交国家名称、地区、城市、街道、zip之中的一个或者多个,就可以找到相关的地点的详细地理信息,包括经纬度等。在测试的过程中发现,美国、加拿大的信息已经丰富到街道名称;中国的只是到城市级别,但这对我来说已经够用。


visit statistics
由于是flash的应用,Yahoo提供了Flash/AS API、AXJAX API,我不会flash,那只有用geocoding+php啦。要在地图上显示访问者的位置,那就要用到ip to city的转换,在这里我用的是maxmind的geolitecity,ip到城市的对应能达到60%,不算很理想,再多就是要钱的。通过GeoLiteCity我们就可以得到IP所在的城市,然后用Yahoo map api就可以查到城市对应的经纬度。其实GeoLiteCity就有返回经纬度,但这里介绍如何应用Yahoo map API得到城市的经纬度。

查找城市地理信息的接口是http://api.local.yahoo.com/MapsService/V1/geocode?appid=yahoodemo&output=php&location=guangzhou
其中appid是你从yahoo申请到的application id,output是指明接口返回结果的格式,默认是xml,另一种是php,如果参数设为php,那么返回的是serialize php,把返回内容用unserialize()就可以得到一个php的数组,非常方便。这里我用的就是output=php。location就是你要查询的地点。
<?php
/**
    geo.inc.php
*/

##缓存从Yahoo得到的城市地理信息
function request_cache($url, $dest_file, $timeout = 243200)
{
    if(!
file_exists($dest_file) || filemtime($dest_file) < (time() - $timeout)) {
        
$fp = fopen($url, 'r');
        
$stream = fgets($fp);
        
$tmpf = tempnam('/tmp', 'YWS');
        
file_put_contents($tmpf, $stream);
        @
fclose($fp);
        
rename($tmpf, $dest_file);
        return
$stream;
    } else {
        return
file_get_contents($dest_file);
    }
}

function
yahoo_geo($location)
{
    
$q = 'http://api.local.yahoo.com/MapsService/V1/geocode';
    
$q .= '?appid=vxs-unet&output=php&location=' . rawurlencode($location);
    
$tmp = '/tmp/geo/yws_geo_' . md5($q);
    
$stream = request_cache($q, $tmp);
    
$ret = unserialize($stream);
    if(!
is_array($ret)) return false;
    return
$ret['ResultSet']['Result'];
}
?>

详细的参数信息请看http://developer.yahoo.net/maps/rest/V1/geocode.html

查询地理信息的程序 geo.php:
<html><head>
<title>GeoCoding API Example</title>
</head><body>
<form action="/php/ymap/geo1.php" method="GET">
<input type="text" size="80" name="location" />
</form>
<?phpinclude './geo.inc';
if(!empty(
$_REQUEST['location'])) {
    
$a = yahoo_geo($_REQUEST['location']);
    echo
"<pre>";
    
print_r($a);
    echo
"</pre>";
}
?>
</body></html>


评论

作用不是很大吧?
不如用Google分析

Posted by kankan at 2006年11月18日 21时58分20秒
发表评论
:

:
:



<   八月 2008   >
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

当年今日

not found