Cómo reconocer User-Agent de Facebook

Cuando comparto una de mis páginas en FB, quiero mostrar algo diferente. El problema es que prefiero no usar los elementos og:, sino reconocer el agente de usuario de FB.

¿Qué es? No puedo encontrarlo

Gracias

Para obtener una lista de cadenas de agente de usuario, busque aquí . Los más utilizados, desde septiembre de 2015, son facebookexternalhit/* y Facebot . Como no ha indicado en qué idioma está tratando de reconocer al usuario-agente, no puedo darle más información. Si desea reconocer el bot de Facebook en PHP, use

 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 } 

ACTUALIZACIÓN : Facebook ha agregado Facebot a la lista de sus posibles cadenas de agente de usuario, por lo que he actualizado mi código para reflejar el cambio. Además, el código ahora es más predecible para posibles cambios futuros.

“La cadena de agente de usuario de Facebook es facebookexternalhit / 1.1 (+ http://www.facebook.com/externalhit_uatext.php ) …”

Hola

Corrección pequeña, pero importante, -> el hit externo de Facebook usa 2 agentes de usuario diferentes:

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

Configurarlo a 1.1 solo puede causar problemas de filtrado con la versión 1.0.

Para obtener más información sobre Facebook Bot (y otros bots), consulte Botopedia.org , un directorio bot de origen comunitario , desarrollado por Incapsula.

Además de los datos de agente de usuario, el directorio también ofrece una opción de verificación de IP, lo que le permite verificar de forma cruzada un IP / User-Agent, lo que ayuda a evitar bashs de suplantación.

Aquí está el agente de usuario de los rastreadores de Facebook:

 FacebookExternalHit/1.1 FacebookExternalHit/1.0 

o

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

Tenga en cuenta que los números de versión pueden cambiar. Entonces use una expresión regular para encontrar el nombre del rastreador y luego muestre su contenido.

Actualización :

Puede usar este código en PHP para verificar si el agente de usuario de Facebook

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

Aquí está el código ASP.NET. Puede usar esta función para verificar si userAgent es el agente de uso de Facebook.

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

Nota:

¿Por qué necesitarías hacer eso? Cuando comparte un enlace a su sitio en Facebook, Facebook lo rastrea y lo analiza para obtener algunos datos para mostrar la miniatura, el título y parte del contenido de su página, pero se vinculará a su sitio.

Además, creo que esto llevaría a ocultar el sitio, es decir, mostrar datos diferentes al usuario y a los rastreadores. El encubrimiento no se considera una buena práctica y los motores de búsqueda y el sitio pueden tomar nota.

Actualización : Facebook también agregó un nuevo userragent a partir del 28 de mayo de 2014

 Facebot 

Puede leer más sobre el rastreador de Facebook en https://developers.facebook.com/docs/sharing/webmasters/crawler

Tenga en cuenta que a veces el agente es visionutils/0.2 . Deberías verificarlo también.

La solución corta es verificar el patrón, y no cargar todo el desorden al usuario cada vez

 < ?php # Facebook optimized stuff if(strstr($_SERVER['HTTP_USER_AGENT'],'facebookexternalhit')) { $buffer.=''; } ?> 

Y si quiere bloquear Facebook Bot para que no acceda a su sitio web (suponiendo que esté usando Apache), agregue esto a su archivo .htaccess :

  BrowserMatchNoCase "Feedfetcher-Google" feedfetcher BrowserMatchNoCase "facebookexternalhit" facebook order deny,allow deny from env=feedfetcher deny from env=facebook  

También bloquea feedfetcher de google que también se puede usar para DDoSing barato.

En primer lugar, no debe usar in_array, ya que necesitará tener el agente de usuario completo y no solo un subconjunto, por lo que se romperá rápidamente con los cambios (es decir, la versión 1.2 de Facebook no funcionará si sigue la respuesta preferida actual). También es más lento iterar a través de una matriz en lugar de utilizar un patrón de expresión regular.

Como no hay dudas, querrás buscar más bots más tarde, así que he dado el siguiente ejemplo con 2 nombres de bot divididos en un patrón con el conducto | símbolo. el / i al final lo hace insensible a mayúsculas / minúsculas.

Además, no debería usar $ _SERVER [‘HTTP_USER_AGENT’]; pero deberías filtrarlo primero en caso de que alguien haya sido un poco desagradable.

 $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"; } 

Un código un poco más seguro y más rápido.

En la perspectiva de las modificaciones de agente de usuario en el lado FB, es quizás más seguro usar una expresión regular como esa:

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

Puede encontrar más información sobre el rastreador de Facebook en su documento: https://developers.facebook.com/docs/sharing/webmasters/crawler

Los Agentes de usuario de Facebook son:

 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) 

Estoy usando el siguiente código para detectar FB User-Agent en PHP y funciona como estaba previsto:

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

Otro enfoque genérico en 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 }