58 votes

Comment reconnaître l'agent utilisateur de Facebook

Lorsque je partage une de mes pages sur FB, je veux 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 de FB.

Qu'est-ce que c'est ? Je n'arrive pas à le trouver.

1 votes

if(strpos($_SERVER['HTTP_USER_AGENT'], 'facebookexternalhit') !== false) { ... }

110voto

Martin. Points 7087

Pour obtenir la liste des chaînes d'agents utilisateurs, consultez le site suivant aquí . Les plus utilisés, en septembre 2015, sont les suivants facebookexternalhit/* y Facebot . Comme vous n'avez pas précisé dans quelle langue vous essayez de reconnaître le user-agent, je ne peux pas vous donner plus d'informations. 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
}

UPDATE : Facebook a ajouté Facebot à la liste de leurs chaînes d'agent utilisateur possibles, j'ai donc mis à jour mon code pour refléter ce changement. De plus, le code est maintenant plus prévisible pour d'éventuels changements futurs.

7 votes

Vous pouvez passer à la caisse La page des meilleures pratiques de Facebook pour plus de détails et des mises à jour sur la façon de détecter ses crawlers et scrapers. Notez que Facebot a été ajouté à la liste des chaînes d'agent utilisateur.

2 votes

Le lien de @donut ne contient plus les bonnes informations. L'URL mis à jour est : developers.facebook.com/docs/sharing/webmasters/crawler

0 votes

De plus, pour information, j'utilise le code suivant, plus sûr pour l'avenir : if(strpos($_SERVER["HTTP_USER_AGENT"], "facebookexternalhit/") !== false || strpos($_SERVER["HTTP_USER_AGENT"], "Facebot") !== false) { /* It's probably Facebook's bot */ }

16voto

Igal Zeifman Points 782

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

Bonjour

Petite, mais importante, correction -> 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) 

Le fait de régler votre fitler sur la version 1.1 seulement peut causer des problèmes de filtrage avec la version 1.0.

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

Outre les données relatives à l'agent utilisateur, le répertoire offre également une option de vérification de l'IP, qui vous permet de procéder à une vérification croisée de l'IP et de l'agent utilisateur, ce qui contribue à prévenir les tentatives d'usurpation d'identité.

15voto

Virendra Points 1878

Voici l'agent utilisateur des crawlers de 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 crawler, 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 le userAgent est celui de Facebook.

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

Note :

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

De plus, je pense que cela conduirait au cloaking du site, c'est-à-dire à l'affichage de données différentes pour l'utilisateur et les crawlers. Le cloaking n'est pas considéré comme une bonne pratique et les moteurs de recherche et le site peuvent en prendre note.

Mise à jour : Facebook a également ajouté un nouveau useragent depuis le 28 mai 2014.

Facebot

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

0 votes

Lisez d'abord la politique de confidentialité de Facebook !

3 votes

@msec : si Facebook n'explore pas la page, comment connaît-il les détails de la page, comme le titre, les vignettes, etc.

4voto

Luchezar Points 20

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

0 votes

Y a-t-il des preuves de cela ?

0 votes

Quand j'écrivais un script pour détecter facebook et lui montrer un contenu différent parfois l'useragent était visionutils/0.2.

1 votes

On peut supposer qu'il s'agit d'un robot de reconnaissance faciale qui vient gratter toutes les images qui pourraient contenir des personnes.

3voto

user2213708 Points 59

La solution courte est de vérifier le modèle, et de 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" />';
    }
?>

0 votes

N'oubliez pas un !empty($_SERVER['HTTP_USER_AGENT']) depuis $_SERVER['HTTP_USER_AGENT'] n'est pas défini lorsque le client n'envoie pas cet en-tête.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X