如何识别Facebook用户代理

Him*_*ack 52 user-agent facebook

在FB上共享我的一个页面时,我希望显示不同的内容.问题是,我不想使用og:元素,而是识别FB用户代理.

它是什么?我找不到它.

谢谢

Mar*_*in. 103

有关用户代理字符串的列表,请在此处查找.截至2015年9月,最常用的是facebookexternalhit/*Facebot.由于您尚未说明您尝试识别用户代理的语言,因此我无法告诉您更多信息.如果你想在PHP中识别Facebook bot,请使用

if (
    strpos($_SERVER["HTTP_USER_AGENT"], "facebookexternalhit/") !== false ||          
    strpos($_SERVER["HTTP_USER_AGENT"], "Facebot") !== false
) {
    // it is probably Facebook's bot
}
else {
    // that is not Facebook
}
Run Code Online (Sandbox Code Playgroud)

更新:Facebook已添加Facebot到他们可能的用户代理字符串列表中,因此我更新了我的代码以反映更改.此外,代码现在可以更好地预测未来可能的变化.

  • 您可以查看[Facebook的最佳做法页面](https://developers.facebook.com/docs/sharing/best-practices#crawl),了解有关如何检测其抓取工具和抓取工具的更多最新详细信息.请注意,**`Facebot`**已添加到用户代理字符串列表中. (7认同)
  • @donut 的链接不再包含正确的信息。更新后的网址为:https://developers.facebook.com/docs/sharing/webmasters/crawler (2认同)

Iga*_*man 16

"Facebook的用户代理字符串是facebookexternalhit/1.1(+ http://www.facebook.com/externalhit_uatext.php)......"

你好

小而重要的纠正 - > Facebook外部命中使用2个不同的用户代理:

facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)
facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php) 
Run Code Online (Sandbox Code Playgroud)

将fitler设置为1.1只会导致1.0版本的过滤问题.

有关Facebook Bot(以及其他机器人)的更多信息,请参阅Botopedia.org - 一个由Incapsula提供支持的Comunity-Sourced bot目录.

除了用户代理数据外,该目录还提供IP验证选项,允许您交叉验证IP /用户代理,从而有助于防止模拟尝试.


Vir*_*dra 14

以下是Facebook抓取工具用户代理:

FacebookExternalHit/1.1
FacebookExternalHit/1.0
Run Code Online (Sandbox Code Playgroud)

要么

facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)
facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)
Run Code Online (Sandbox Code Playgroud)

请注意,版本号可能会更改.因此,使用正则表达式查找爬虫名称,然后显示您的内容.

更新:

您可以在PHP中使用此代码来检查Facebook用户代理

if(preg_match('/^FacebookExternalHit\/.*?/i',$agent)){
    print "Facebook User-Agent";
    // process here for Facebook
}
Run Code Online (Sandbox Code Playgroud)

这是ASP.NET代码.您可以使用此功能检查userAgent是否是Facebook的使用者.

public static bool IsFacebook(string userAgent)  
{  
    userAgent = userAgent.ToLower();  
    return userAgent.Contains("facebookexternalhit");  
}  
Run Code Online (Sandbox Code Playgroud)

注意:

你为什么要这么做?当您在Facebook上共享指向您网站的链接时,Facebook会对其进行抓取并对其进行解析,以获取一些数据以显示您网页上的缩略图,标题和部分内容,但它会链接回您的网站.

此外,我认为这会导致隐藏网站,即向用户和抓取工具显示不同的数据.伪装不被认为是一种好的做法,搜索引擎和网站可能会注意到它.

更新:截至2014年5月28日,Facebook还增加了新的使用者

Facebot
Run Code Online (Sandbox Code Playgroud)

您可以在https://developers.facebook.com/docs/sharing/webmasters/crawler上阅读有关facebook抓取工具的更多信息.

  • @msec:如果Facebook没有抓取页面,它如何知道页面的详细信息,如标题,缩略图等? (3认同)