web-dev-qa-db-fra.com

Comment reconnaître Facebook User-Agent

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.

52
Himberjack

Pour obtenir la liste des chaînes d’agent utilisateur, recherchez ici . Les plus utilisés, à compter de 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 en dire plus. Si vous voulez reconnaître le bot Facebook 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
}

[~ # ~] met à jour [~ # ~] : Facebook a ajouté Facebot à la liste de ses chaînes utilisateur-agent possibles. J'ai mis à jour mon code pour refléter le changement. De plus, le code est maintenant plus prévisible face à d'éventuels changements futurs.

103
Martin.

"La chaîne d'agent utilisateur de Facebook est facebookexternalhit/1.1 (+ http://www.facebook.com/externalhit_uatext.php ) ..."

Salut

Correction minime mais importante -> Le hit externe de Facebook 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) 

Régler votre fitler sur 1.1 uniquement peut causer des problèmes de filtrage avec la version 1.0.

Pour plus d'informations sur Facebook Bot (et d'autres robots), veuillez vous référer à Botopedia.org - un répertoire de bots créé par Comunity, créé par Incapsula.

Outre les données d'agent utilisateur, l'annuaire propose également une option de vérification IP, vous permettant de procéder à une vérification croisée d'une adresse IP/utilisateur, contribuant ainsi à empêcher les tentatives d'emprunt d'identité.

16
Igal Zeifman

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 trouver le nom du robot, puis affichez votre contenu.

Mise à jour :

Vous pouvez utiliser ce code dans PHP pour rechercher 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 l’agent utilisateur est l’agent utilisateur de Facebook.

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

Remarque:

Pourquoi auriez-vous besoin de faire ça? Lorsque vous partagez un lien vers votre site sur Facebook, Facebook l'explore et le analyse pour obtenir des données permettant d'afficher la vignette, le titre et du contenu de votre page, mais le lien renvoyait vers votre site.

De plus, je pense que cela conduirait à masquer le site, c'est-à-dire à afficher des données différentes pour l'utilisateur et les robots d'exploration. Cloaking n'est pas considéré comme une bonne pratique et peut prendre note des moteurs de recherche et du site.

Mise à jour : Facebook a également ajouté un nouvel utilisateur en date du 28 mai 2014.

Facebot

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

14
Virendra

Veuillez noter que parfois l'agent est visionutils/0.2. Vous devriez le vérifier aussi.

4
Luchezar

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

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

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

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

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

1
betelgeuz

Et si vous voulez empêcher les robots facebook d'accéder à votre site Web (en supposant que vous utilisez Apache), ajoutez ceci à votre .htaccess fichier:

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

Il bloque également le feedfetcher de Google qui peut également être utilisé pour des DDoS à moindre coût.

1
Juribiyan

Les utilisateurs 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 dans PHP et il fonctionne comme prévu:

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

Tout d’abord, vous ne devez pas utiliser in_array car vous aurez besoin de l’agent utilisateur complet et pas seulement d’un sous-ensemble, ce qui rompra rapidement les modifications (c’est-à-dire que la version 1.2 de Facebook ne fonctionnera pas si vous suivez la réponse actuellement préférée). Il est également plus lent d'itérer dans un tableau plutôt que d'utiliser un motif regex.

Comme nul doute que vous voudrez rechercher plus de bots plus tard, j'ai donc donné l'exemple ci-dessous avec deux noms de bots séparé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 vous devriez le filtrer d’abord au cas où il y aurait un peu de vilaine chose.

$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.

1
Andrew Killen

Une autre approche générique 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
}
0
Timo Huovinen

Vous avez déjà la réponse ci-dessus pour Facebook, mais un moyen d'obtenir un agent d'utilisateur est de placer sur votre site un script qui vous enverra un message lorsqu'il le visitera. Par exemple, créez ce fichier sur votre domaine à l’emplacement, par exemple https://example.com/user-agent.php :

<?php
    mail('[email protected]', 'User Agent', $_SERVER['HTTP_USER_AGENT']);

Ensuite, visitez Facebook, tapez le lien vers le script et appuyez sur la barre d'espace. En réalité, vous n'avez rien à partager, il vous suffit de taper le lien pour laisser un espace à Facebook pour obtenir un aperçu. Vous devriez alors recevoir un email avec l'agent utilisateur de Facebook.


Enter the link on Facebook

Get an email with the user agent

0