Sam & Max » reverse dns lookup http://sametmax.com Du code, du cul Sat, 07 Nov 2015 10:56:13 +0000 en-US hourly 1 http://wordpress.org/?v=4.1 Authoriser GoogleBot à crawler certains contenus de votre site sous Django avec Reverse DNS Lookup 30 http://sametmax.com/authoriser-googleboot-a-crawler-certains-contenus-de-votre-site-sous-django-avec-reverse-dns-lookup/ http://sametmax.com/authoriser-googleboot-a-crawler-certains-contenus-de-votre-site-sous-django-avec-reverse-dns-lookup/#comments Tue, 20 Nov 2012 20:29:46 +0000 http://sametmax.com/?p=3165 Si vous avez du contenu rich media que vous voulez le faire indexer par Google vous allez devoir proposer dans votre Sitemap un lien vers votre contenu video ou image. Et vous n’avez certainement pas envie que tout le monde puisse puiser dedans.

D’après La doc Google, le rich media c’est l’avenir, micro-datas, sitemap video, etc… faut être à la page.
Du coup vous avez envie que votre contenu se retrouve indexé par Google et rien que lui, ou pas lui et rien que Yahoo, ou pas Yahoo et rien que Bing, ou pas que Bing mais rien que Yahoo et Google et aussi un peu Bing finalement mais surtout pas Da silva…Je l’aime pas Da silva

Google conseille d’utiliser le Reverse DNS lookup. En gros de récupérer le nom de domaine du robot en fonction de l’IP qui vous crawle.

On fait une fonction qui check l’ip et on gère le retour dans la vue Django:

def allowed_bot(ip):
    """
        Do a reverse dns lookup on IP to get domain 
        and check if it is a bot from know search engines
    """
    allowed_bots = ['.msn.com', '.yahoo.com', '.googlebot.com']
    try:
        socket.setdefaulttimeout(5)
        host = socket.gethostbyaddr(ip)[0]
    except socket.herror:
        return False
 
    for bot in allowed_bots:
        if host.find(bot) > 0:
            return True
 
def ma_vue(request):
    """
       redirect to video to index
    """
    ip = request.META.get('REMOTE_ADDR', None)
 
    if allowed_bot(ip): 
        return http.HttpResponseRedirect("http://monsite.com/video/meme.flv") 
    else:
        return http.http404

Cette méthode n’est pas à utiliser pour une vue qui retourne une page entière car ça ferait une requête à chaque fois, mais pour du contenu qu’on a mis à dispo dans un Sitemap comme un player flv .

Exemple de sitemap avec la balise video :

 
    <video:video>      
      <video:player_loc allow_embed="yes">http://www.monsite.com/player.swf?file=/play/76293.xml</video:player_loc>
      <video:thumbnail_loc>http://www.monsite.com/video/76293/thumbnail.jpg</video:thumbnail_loc>
      <video:title>mémé à l'île de la raie</video:title>
      <video:description>Aller mémé te laisse pas ratrapper par la raie !</video:description>
    </video:video>

Il y a d’autres solutions comme récupérer la liste de toutes les IPs des crawlers et les passer à Nginx en adaptant un peu cet article

NB: Si vous utilisez nginx en tant que proxy n’oubliez pas d’inclure proxy_set_header pour renvoyer la bonne IP du client:

location / {
  proxy_pass        http://monsite_cherrypy;
  proxy_set_header  X-Real-IP  $remote_addr;
}
]]>
http://sametmax.com/authoriser-googleboot-a-crawler-certains-contenus-de-votre-site-sous-django-avec-reverse-dns-lookup/feed/ 30