Когда я делюсь одной из моих страниц на FB, я хочу показать что-то другое. Проблема в том, что я предпочитаю не использовать элементы og:, а распознавать пользовательский агент FB.
Что это? Я не могу найти это.
Когда я делюсь одной из моих страниц на FB, я хочу показать что-то другое. Проблема в том, что я предпочитаю не использовать элементы og:, а распознавать пользовательский агент FB.
Что это? Я не могу найти это.
Для списка строк пользовательского агента найдите здесь. Наиболее используемыми по состоянию на сентябрь 2015 года являются facebookexternalhit/*
и Facebot
. Поскольку вы не указали, на каком языке вы пытаетесь распознать пользовательский агент, я не могу рассказать вам больше информации. Если вы хотите распознать Facebook-бот в PHP, используйте
if (
strpos($_SERVER["HTTP_USER_AGENT"], "facebookexternalhit/") !== false ||
strpos($_SERVER["HTTP_USER_AGENT"], "Facebot") !== false
) {
// it is probably Facebook bot
}
else {
// that is not Facebook
}
ОБНОВЛЕНИЕ. Facebook добавил Facebot
в список своих возможных строк пользовательского агента, поэтому я обновил свой код, чтобы отразить это изменение. Кроме того, код теперь более предсказуем для возможных будущих изменений.
"Пользовательская строка пользователя 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)
Настройка фидера на 1.1 может привести к проблемам фильтрации с версией 1.0.
Для получения дополнительной информации о Facebook Bot (и других ботах), пожалуйста, обратитесь к Botopedia.org - директорию ботов, принадлежащей Comunity-Sourced, на базе Incapsula.
Помимо данных пользовательского агента, каталог также предлагает опцию проверки IP-адресов, позволяющую перекрестно проверять IP/User-Agent, тем самым помогая предотвратить попытки олицетворения.
Вот пользовательский агент Google Crawlers:
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.
public static bool IsFacebook(string userAgent)
{
userAgent = userAgent.ToLower();
return userAgent.Contains("facebookexternalhit");
}
Примечание:
Зачем вам это нужно? Когда вы делитесь ссылкой на свой сайт на Facebook, facebook просматривает ее и анализирует ее, чтобы получить некоторые данные, чтобы отображать миниатюру, заголовок и некоторый контент со своей страницы, но он будет ссылаться на ваш сайт.
Кроме того, я думаю, что это приведет к маскировке сайта, то есть отображению разных данных для пользователя и сканеров. Cloaking не считается хорошей практикой и может искать двигатели и сайт, чтобы принять к сведению его.
Обновление. Facebook также добавил новый пользовательский аккаунт с 28 мая 2014 года.
Facebot
Вы можете узнать больше об искателе facebook на 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" />';
}
?>
Во-первых, вы не должны использовать in_array, поскольку вам нужно будет иметь полный пользовательский агент, а не только подмножество, поэтому он быстро сломается с изменениями (например, версия 1.2 из facebook не будет работать, если вы будете следовать текущему предпочтительному ответу). Также медленнее выполнять итерацию через массив, а не использовать шаблон регулярного выражения.
Как без сомнения, вам захочется больше искать бота, поэтому я привел пример ниже с двумя именами ботов, разделенными на шаблон с помощью pipe | символ. /i в конце делает регистр нечувствительным.
Также вы не должны использовать $_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";
}
Более безопасный и быстрый код.
И если вы хотите заблокировать ботов facebook от доступа к вашему сайту (при условии, что вы используете Apache), добавьте это в свой файл .htaccess
:
<Limit GET POST>
BrowserMatchNoCase "Feedfetcher-Google" feedfetcher
BrowserMatchNoCase "facebookexternalhit" facebook
order deny,allow
deny from env=feedfetcher
deny from env=facebook
</Limit>
Он также блокирует Google FeedFetcher, который также может использоваться для дешевого DDoSing.
В перспективе модификаций пользовательского агента на стороне FB, возможно, безопаснее использовать такое регулярное выражение:
<?php
if (preg_match("/facebook|facebot/i", $_SERVER['HTTP_USER_AGENT'])){
do_something();
}
?>
Дополнительную информацию о сканере Facebook можно найти в своем документе: https://developers.facebook.com/docs/sharing/webmasters/crawler
Агенты пользователей Facebook:
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
}
У вас уже есть ответ для Facebook выше, но один из способов получить любого пользовательского агента - это разместить скрипт на вашем сайте, который будет отправлять вам письма при его посещении. Например, создайте этот файл в своем домене, например, по адресу https://example.com/user-agent.php:
<?php
mail('[email protected]', 'User Agent', $_SERVER['HTTP_USER_AGENT']);
Затем зайдите на Facebook, введите там ссылку на скрипт и нажмите пробел. Вам на самом деле ничего не нужно делиться, просто набрав ссылку, и пробел заставит Facebook получить предварительный просмотр. Затем вы должны получить электронное письмо с пользовательским агентом Facebook.