Comment reconnaître l’agent utilisateur Facebook

Lorsque je partage une de mes pages sur FB, je souhaite afficher quelque chose de différent. Le problème est que je préfère ne pas utiliser les éléments og: mais reconnaître l’agent utilisateur FB.

Qu’Est-ce que c’est? Je ne peux pas le trouver

Merci

Pour la liste des chaînes d’utilisateur-agent, regardez ici . Les plus utilisés, en septembre 2015, sont facebookexternalhit/* et Facebot . Comme vous n’avez pas indiqué la langue dans laquelle vous essayez de reconnaître l’agent utilisateur, je ne peux pas vous dire plus d’informations. Si vous voulez reconnaître Facebook bot en PHP, utilisez

 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 } 

MISE À JOUR : Facebook a ajouté Facebot à la liste de leurs chaînes possibles d’agent utilisateur, j’ai donc mis à jour mon code pour refléter le changement. De plus, le code est désormais plus prévisible pour les changements futurs possibles.

“La chaîne de l’agent utilisateur de Facebook est facebookexternalhit / 1.1 (+ http://www.facebook.com/externalhit_uatext.php ) …”

salut

Correction petite mais importante -> Facebook external hit utilise 2 agents utilisateurs différents:

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

Si vous définissez fitler sur 1.1 uniquement, des problèmes de filtrage peuvent survenir avec la version 1.0.

Pour plus d’informations sur Facebook Bot (et autres robots), veuillez vous référer à Botopedia.org – un répertoire de bot basé sur la communauté, alimenté par Incapsula.

Outre les données de l’agent utilisateur, l’annuaire offre également une option de vérification IP, qui vous permet de vérifier une adresse IP ou un agent utilisateur, évitant ainsi toute tentative d’usurpation d’identité.

Voici l’agent utilisateur des robots Facebook:

 FacebookExternalHit/1.1 FacebookExternalHit/1.0 

ou

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

Notez que les numéros de version peuvent changer. Utilisez donc une expression régulière pour rechercher le nom du robot, puis affichez votre contenu.

Mise à jour :

Vous pouvez utiliser ce code en PHP pour vérifier l’agent utilisateur Facebook

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

Voici le code ASP.NET. Vous pouvez utiliser cette fonction pour vérifier si userAgent est le useragent de Facebook.

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

Remarque:

Pourquoi aurais-tu besoin de faire ça? Lorsque vous partagez un lien vers votre site sur Facebook, Facebook l’explore et l’parsing pour obtenir des données permettant d’afficher la vignette, le titre et certains contenus de votre page, mais il vous renvoie à votre site.

De plus, je pense que cela conduirait à une dissimulation du site, c’est-à-dire à afficher des données différentes pour l’utilisateur et les robots d’exploration. La fabrication de capes n’est pas considérée comme une bonne pratique et les moteurs de recherche et les sites peuvent en prendre note.

Mise à jour : Facebook a également ajouté un nouvel useragent au 28 mai 2014

 Facebot 

Vous pouvez en savoir plus sur le robot Facebook sur https://developers.facebook.com/docs/sharing/webmasters/crawler

Veuillez noter que parfois l’agent est visionutils/0.2 . Vous devriez vérifier pour cela aussi.

La solution courte consiste à vérifier le motif et à ne pas charger tout le désordre à chaque fois

 '; } ?> 

Et si vous souhaitez empêcher le bot Facebook d’accéder à votre site Web (en supposant que vous utilisez Apache), ajoutez-le à votre fichier .htaccess :

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

Il bloque également le feedfetcher de Google qui peut également être utilisé pour DDoSing à bas prix.

Tout d’abord, vous ne devez pas utiliser in_array car vous devrez disposer de l’agent utilisateur complet et pas seulement d’un sous-ensemble, donc vous romprez rapidement les modifications (la version 1.2 de facebook ne fonctionnera pas si vous suivez la réponse préférée actuelle). Il est également plus lent de parcourir un tableau plutôt que d’utiliser un modèle de regex.

Comme il ne fait aucun doute que vous voudrez chercher plus de bot plus tard, j’ai donné l’exemple ci-dessous avec 2 noms de robots divisés en un motif avec le tube | symbole. le / i à la fin le rend insensible à la casse.

Aussi, vous ne devriez pas utiliser $ _SERVER [‘HTTP_USER_AGENT’]; mais il faut d’abord filtrer au cas où quelqu’un aurait été un peu désagréable.

 $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 code un peu plus sûr et plus rapide.

Dans la perspective des modifications de l’agent utilisateur du côté du FB, il est peut-être plus sûr d’utiliser une expression rationnelle comme celle-ci:

  

Vous pouvez trouver plus d’informations sur le crawler Facebook sur leur doc: https://developers.facebook.com/docs/sharing/webmasters/crawler

Les utilisateurs de Facebook sont:

 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) 

J’utilise le code ci-dessous pour détecter FB User-Agent en PHP et cela fonctionne comme prévu:

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

Une autre approche générique en PHP

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