Как распознать Facebook User-Agent


при совместном использовании одной из моих страниц на FB, Я хочу, чтобы отобразить что-то другое. Проблема в том, что я предпочитаю не использовать OG: elements, а распознавать FB user-agent.

Что это? Я не могу его найти.

спасибо

10 51

10 ответов:

для списка строк user-agent, посмотрите вверх здесь. Наиболее часто используемые, по состоянию на сентябрь 2015 года,facebookexternalhit/* и Facebot. Поскольку вы не указали, на каком языке вы пытаетесь распознать user-agent, я не могу сказать вам больше информации. Если вы хотите распознать Facebook bot в PHP, используйте

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
}

обновление: Facebook добавил Facebot чтобы перечислить их возможные строки пользовательского агента, поэтому я обновил свой код, чтобы отразить изменение. Кроме того, код теперь более предсказуемо для возможных будущих изменений.

" строка пользовательского агента Facebook-это facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)..."

Привет

небольшая, но важная поправка - > Facebook external hit использует 2 разных пользовательских агента:

facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)
facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php) 

установка вам fitler только 1.1 может вызвать проблемы фильтрации с версией 1.0.

для получения дополнительной информации о Facebook Bot (и других ботах), пожалуйста, обратитесь к Botopedia.org - каталог ботов с общим источником, работающий от Incapsula.

помимо данных агента пользователя, каталог также предлагает опцию проверки IP, позволяющую перекрестно проверять IP / агент пользователя, что помогает предотвратить попытки олицетворения.

вот искатели Facebook User Agent:

FacebookExternalHit/1.1
FacebookExternalHit/1.0

или

facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)
facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)

обратите внимание, что номера версий могут измениться. Поэтому используйте регулярное выражение, чтобы найти имя искателя, а затем отобразить содержимое.

обновление:

вы можете использовать этот код в PHP для проверки Facebook User Agent

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

вот ASP.NET код. Вы можете использовать эту функцию, чтобы проверить, является ли userAgent Facebook useragent.

public static bool IsFacebook(string userAgent)  
{  
    userAgent = userAgent.ToLower();  
    return userAgent.Contains("facebookexternalhit");  
}  

Примечание:

зачем тебе это делать? Когда вы публикуете ссылку на свой сайт на Facebook, facebook просматривает ее и анализирует, чтобы получить некоторые данные для отображения миниатюры, заголовка и некоторого контента с вашей страницы, но он будет ссылаться на ваш сайт.

кроме того, я думаю, что это приведет к маскировке сайта, т. е. отображение различных данных для пользователя и искателей. Маскировка не считается хорошей практикой и может быть поисковыми системами и сайтом примите это к сведению.

обновление: Facebook также добавил новый агент пользователя по состоянию на 28 мая 2014 года

Facebot

вы можете прочитать больше о Facebook crawler на https://developers.facebook.com/docs/sharing/webmasters/crawler

Пожалуйста, обратите внимание, что иногда агент visionutils/0.2 . Вы тоже должны это проверить.

короткое решение-проверить шаблон, а не загружать весь беспорядок пользователю каждый раз

<?php
    # Facebook optimized stuff
    if(strstr($_SERVER['HTTP_USER_AGENT'],'facebookexternalhit')) {
        $buffer.='<link rel="image_src" href="images/site_thumbnail.png" />';
    }
?>

и если вы хотите заблокировать бот facebook от доступа к вашему сайту (предполагая, что вы используете Apache), добавьте это в свой .htaccess file:

<Limit GET POST>
BrowserMatchNoCase "Feedfetcher-Google" feedfetcher
BrowserMatchNoCase "facebookexternalhit" facebook
order deny,allow
deny from env=feedfetcher
deny from env=facebook
</Limit>

Он также блокирует feedfetcher google, который также может быть использован для дешевого DDoSing.

во-первых, вы не должны использовать in_array, поскольку вам нужно будет иметь полный пользовательский агент, а не только подмножество, таким образом, быстро сломается с изменениями (т. е. версия 1.2 от facebook не будет работать, если вы будете следовать текущему предпочтительному ответу). Кроме того, медленнее перебирать массив, а не использовать шаблон регулярного выражения.

Как, несомненно, вы захотите посмотреть больше ботов позже, поэтому я привел пример ниже с двумя именами ботов, разделенными на шаблон с трубой | символом. я в конец делает его нечувствительным к регистру.

также вы не должны использовать $_SERVER['HTTP_USER_AGENT']; но вы должны отфильтровать его сначала, если кто-то был немного неприятные вещи существуют там.

$pattern = '/(FacebookExternalHit|GoogleBot)/i';
$agent = filter_input(INPUT_SERVER, 'HTTP_USER_AGENT', FILTER_SANITIZE_ENCODED);
    if(preg_match($pattern,$agent)){
      echo "found one of the patters"; 
   }

немного более безопасный и быстрый код.

С точки зрения модификации пользовательского агента на стороне FB, возможно, безопаснее использовать регулярное выражение :

<?php
if (preg_match("/facebook|facebot/i", $_SERVER['HTTP_USER_AGENT'])){
   do_something();
}
?>

вы можете найти дополнительную информацию о Facebook crawler на их doc:https://developers.facebook.com/docs/sharing/webmasters/crawler

Facebook User-агенты являются:

FacebookExternalHit/1.1
FacebookExternalHit/1.0
facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)
facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)
facebookexternalhit/1.0 (+https://www.facebook.com/externalhit_uatext.php)
facebookexternalhit/1.1 (+https://www.facebook.com/externalhit_uatext.php)

Я использую код ниже, чтобы обнаружить FB User-Agent в PHP, и он работает по назначению:

$agent = $_SERVER['HTTP_USER_AGENT'];
if(stristr($agent, 'FacebookExternalHit')){
    //Facebook User-Agent
}else{
    //Other User-Agent
}

еще один общий подход в PHP

$agent = $_SERVER['HTTP_USER_AGENT'];
$agent = trim($agent);
$agent = strtolower($agent);
if (
strpos($agent,'facebookexternalhit/1.1')===0
|| strpos($agent,'facebookexternalhit/1.0')===0
){
    //probably facebook
}else{
    //probably not facebook
}