Как распознать Facebook User-Agent
при совместном использовании одной из моих страниц на FB, Я хочу, чтобы отобразить что-то другое. Проблема в том, что я предпочитаю не использовать OG: elements, а распознавать FB user-agent.
Что это? Я не могу его найти.
спасибо
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
короткое решение-проверить шаблон, а не загружать весь беспорядок пользователю каждый раз
<?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 }