PHP - 检测是否是正在打开链接的人

时间:2016-06-03 16:32:29

标签: php twitter web-crawler user-agent bots

这个问题一直在扼杀我,我无法找到解决方案。

我实现了一个基于PHP链接的评分系统。

一个人“A”可以在Twitter等社交网络上发布链接,当另一个人“B”打开此链接时,个人A赢得10分。

问题是当链接在Twitter上发布时,例如。它打开了很多次,给对方太多分数。

我试图在PHP中识别用户代理以确定人类何时打开链接,但有些推特点击如下:

Mozilla / 5.0(Macintosh; Intel Mac OS X 10_11_3)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 47.0.2526.111 Safari / 537.36

这显然可能是人类,但事实并非如此,因为该用户代理在同一秒内打开了两次链接,使用了2个不同的IP。 52.19.163.13和52.16.66.216。如果我没弄错的是亚马逊服务器。

即使我排除了robots.txt中的所有机器人,但也无法使用。这是我尝试识别人类的方式。

$app->get('/link/:code', function($codigo){

if(is_human() and !is_bot())
{
   $res = $db->giveCoins($codigo);

    if ($res !== 0) {

    echo "Redirect to another page"; //cannot be a human interaction on this page

    }else
        {
        echo "Robot";
        }
}

});

这些是我用来分析用户代理的功能:

function is_bot(){

$botlist = array("Gigabot", "Googlebot",
                "FlipboardProxy", "Purebot", 
                "facebookexternalhit","applebot",
                "Google-HTTP-Java-Client",
                "Chrome/33.0.0.0");

foreach($botlist as $bot){
if(strpos($_SERVER['HTTP_USER_AGENT'],$bot)!==false)
return true;    // Is a bot
}
return false;    // Not a bot
}        

function is_human(){

$humanlist = array("Android","Safari",
                  "Chrome","OPR","Opera",
                  "Chromium","Firefox");

foreach($humanlist as $bot){
if(strpos($_SERVER['HTTP_USER_AGENT'],$bot)!==false)
return true;    // Probably a human
}
return false;    // Probably not a human
}

我不知道是否有更智能的方法来确定是否是打开链接的人。感谢您的关注

0 个答案:

没有答案